@openchambery/web 1.18.4-beta.8 → 1.18.4-beta.9
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/{AssistantView-gAiFMDUJ.js → AssistantView-CbCe7NJG.js} +1 -1
- package/dist/assets/{ChatContainer--pExLV0s.js → ChatContainer-CSHDg3oS.js} +4 -4
- package/dist/assets/{DiagramView-DVPEFJ-e.js → DiagramView-DUciKofo.js} +1 -1
- package/dist/assets/{MarkdownRendererImpl-BRHbul8Z.js → MarkdownRendererImpl-BjAOpViW.js} +1 -1
- package/dist/assets/{MobileDetailNavigation-QdKhV7QI.js → MobileDetailNavigation-EXZlPK6E.js} +1 -1
- package/dist/assets/{MobileShareBridge-BZQU25sk.js → MobileShareBridge-CevrYlt3.js} +1 -1
- package/dist/assets/{MobileSurface-D8lS-QI-.js → MobileSurface-cYYd428z.js} +1 -1
- package/dist/assets/{MultiRunWindow-CFkkK54L.js → MultiRunWindow-CNWuOY4y.js} +1 -1
- package/dist/assets/{OnboardingScreen-BIhY1_hf.js → OnboardingScreen-BhSzVmYo.js} +1 -1
- package/dist/assets/{SettingsView-BK_KyEGa.js → SettingsView-YyQ-C-qq.js} +10 -10
- package/dist/assets/{SettingsWindow-Jh9KQuAX.js → SettingsWindow-uUezVVwi.js} +1 -1
- package/dist/assets/{TerminalView-CsJ_5RIn.js → TerminalView-DPto-DoO.js} +1 -1
- package/dist/assets/{ToolOutputDialog-DVCDFHSZ.js → ToolOutputDialog-CgPYRmDX.js} +1 -1
- package/dist/assets/{appThemeRegistry-BD3shSNM.js → appThemeRegistry-CPVFQqR9.js} +2 -2
- package/dist/assets/{clipboard-DKpuHEKi.js → clipboard-DhOMUCwT.js} +1 -1
- package/dist/assets/{context-menu-g6mcnBM7.js → context-menu-BPxTMlbo.js} +1 -1
- package/dist/assets/{dialog-BUMPZfVo.js → dialog-BoAAoL5Z.js} +1 -1
- package/dist/assets/{es-BXwKr_ZN.js → es-BXQb1dPR.js} +1 -1
- package/dist/assets/{fr-DwB802Hk.js → fr-BTyDIvxw.js} +1 -1
- package/dist/assets/{gitApi-jtNyXM2i.js → gitApi-BktvSPdR.js} +1 -1
- package/dist/assets/{insertionBoundaries-PCEg03bu.js → insertionBoundaries-Cqk1aLwK.js} +1 -1
- package/dist/assets/{ja-Bi58i710.js → ja-fcQgtBFy.js} +1 -1
- package/dist/assets/{ko-Bpdqclbh.js → ko-CgoVt1eb.js} +1 -1
- package/dist/assets/{main-BYR7oXuI.js → main-DOGudNxM.js} +2 -2
- package/dist/assets/{main-BhfSJeRs.js → main-UJICKUVV.js} +4 -4
- package/dist/assets/{miniChat-DJn_UXg4.js → miniChat-C465ME90.js} +2 -2
- package/dist/assets/{mobile-DLhipvmN.js → mobile-BHRw1m5c.js} +2 -2
- package/dist/assets/{multirun-C2pAuOrf.js → multirun-BCvIqAk-.js} +1 -1
- package/dist/assets/{pl-Du2feKpf.js → pl-DVDnk2fT.js} +1 -1
- package/dist/assets/{projectMeta-Cn9CpPEo.js → projectMeta-Wxow1DQz.js} +1 -1
- package/dist/assets/{pt-BR-BWH_Buhv.js → pt-BR-ofV_Qcd_.js} +1 -1
- package/dist/assets/{radio-DVYb5sTr.js → radio-CS9DITGQ.js} +1 -1
- package/dist/assets/{renderElectronMiniChatApp-xKOT0Nvl.js → renderElectronMiniChatApp-DAIgdBk9.js} +2 -2
- package/dist/assets/{renderMobileApp-BGDuJARi.js → renderMobileApp-BXOtgQHy.js} +4 -4
- package/dist/assets/{runtimeConfig-Cldsj4A8.js → runtimeConfig-Dofg9S27.js} +1 -1
- package/dist/assets/{runtimeEndpointReset-CSgU2-12.js → runtimeEndpointReset-Cc3yypUQ.js} +1 -1
- package/dist/assets/{sortable-tabs-strip-yILKXhUh.js → sortable-tabs-strip-N3j5So4j.js} +1 -1
- package/dist/assets/{store-Dd7SwiXs.js → store-Hr-xvtDJ.js} +2 -2
- package/dist/assets/{uk-DLdEJOBL.js → uk-Dzob0yMx.js} +1 -1
- package/dist/assets/{useAppFontEffects-CXQZ4yy-.js → useAppFontEffects-BpT_sNyZ.js} +2 -2
- package/dist/assets/{useDesktopWindowControlsLayout-C1jjLChc.js → useDesktopWindowControlsLayout-CGYSjr_T.js} +1 -1
- package/dist/assets/{useEffectiveDirectory-Bkoa0uuw.js → useEffectiveDirectory-BtkZPQZ2.js} +1 -1
- package/dist/assets/{useMobileNavigationStore-B34Winlp.js → useMobileNavigationStore-BNnnW08z.js} +4 -4
- package/dist/assets/{useSessionAutoCleanup-C9bcDyFO.js → useSessionAutoCleanup-C5V-GCiC.js} +1 -1
- package/dist/assets/{useWorkerHighlightedLines-wbAA15f3.js → useWorkerHighlightedLines-Bo9meAHp.js} +1 -1
- package/dist/assets/{zh-CN-D_ZMA-QZ.js → zh-CN-Sndj2nhS.js} +1 -1
- package/dist/assets/{zh-TW-CBJ2QB4M.js → zh-TW-S24a8EMD.js} +1 -1
- package/dist/index.html +2 -2
- package/dist/mini-chat.html +2 -2
- package/dist/mobile.html +2 -2
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var e={"settings.globalConfig.title":`Configuration globale`,"settings.globalConfig.description":`Modifiez les fichiers de configuration actifs dans ~/.config/opencode.`,"settings.globalConfig.actions.reload":`Recharger le fichier`,"settings.globalConfig.restartHint":`Redémarrez OpenCode après l’enregistrement pour appliquer les modifications de configuration.`,"settings.globalConfig.toast.loadFailed":`Échec du chargement du fichier de configuration`,"settings.globalConfig.toast.saveFailed":`Échec de l’enregistrement du fichier de configuration`,"settings.globalConfig.toast.saved":`Configuration enregistrée. Redémarrez OpenCode pour l’appliquer.`,"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.help":`Copiez l’ID depuis l’URL du tableau de bord et le cookie auth depuis les outils du navigateur. OpenChamber 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.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 OpenChamber.`,"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.backToSettings":`Retour aux paramètres`,"settings.view.actions.closeSettings":`Fermer les paramètres`,"settings.view.actions.openSectionList":`Ouvrir la liste des sections`,"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.view.navigation.groups.connection":`Connexion`,"settings.view.navigation.groups.personalization":`Personnalisation`,"settings.view.navigation.groups.workspace":`Espace de travail`,"settings.view.navigation.groups.opencode":`OpenCode`,"settings.view.navigation.groups.content":`Contenu et automatisation`,"settings.view.navigation.groups.system":`Système`,"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.chat.title":`Chat`,"settings.page.shortcuts.title":`Raccourcis`,"settings.page.sessions.title":`Sessions`,"settings.page.summaryAI.title":`Résumés IA`,"settings.page.magicPrompts.title":`Prompts magiques`,"settings.page.notifications.title":`Notifications`,"settings.page.voice.title":`Voix`,"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.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.description":`Connectez-vous à d’autres serveurs OpenChamber via un lien d’import ou SSH.`,"settings.remoteInstances.sidebar.empty":`Aucune instance distante pour le moment. Importez un lien ou ajoutez une connexion SSH.`,"settings.remoteInstances.channel.link":`Lien`,"settings.remoteInstances.channel.ssh":`SSH`,"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 OpenChamber à 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 distant préféré`,"settings.remoteInstances.page.field.preferredRemotePortHint":`Le port OpenChamber doit être utilisé sur l'hôte distant. Laissez vide pour laisser le runtime choisir.`,"settings.remoteInstances.page.field.keepServerRunning":`Maintenir le serveur en marche`,"settings.remoteInstances.page.field.keepServerRunningHint":`S'il est activé, le démon OpenChamber continue de s'exécuter à distance lorsque vous vous déconnectez.`,"settings.remoteInstances.page.field.bindHost":`Lier l'hôte`,"settings.remoteInstances.page.field.bindHostHint":`Interface réseau pour l’URL locale principale. Utilisez 127.0.0.1/localhost pour un accès uniquement local.`,"settings.remoteInstances.page.field.preferredLocalPort":`Port local préféré`,"settings.remoteInstances.page.field.preferredLocalPortHint":`Port local préféré pour le tunnel principal OpenChamber. Laissez vide pour la sélection automatique.`,"settings.remoteInstances.page.field.forwardType":`Type de transfert`,"settings.remoteInstances.page.field.localListen":`Écoute locale`,"settings.remoteInstances.page.field.localTarget":`Cible locale`,"settings.remoteInstances.page.field.remoteListen":`Écoute distante`,"settings.remoteInstances.page.field.remoteTarget":`Cible distante`,"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.actions.cancel":`Annuler`,"settings.common.actions.create":`Créer`,"settings.common.actions.delete":`Supprimer`,"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.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.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.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.openchamber.about.title":`À propos de OpenChamber`,"settings.openchamber.about.field.version":`Version`,"settings.openchamber.about.field.clientVersion":`Client`,"settings.openchamber.about.field.webBundle":`Bundle web`,"settings.openchamber.about.field.instanceOpenChamberVersion":`OpenChamber`,"settings.openchamber.about.field.instanceOpenCodeVersion":`OpenCode`,"settings.openchamber.about.state.checking":`Vérification...`,"settings.openchamber.about.state.upToDate":`À jour`,"settings.openchamber.about.state.builtin":`intégré`,"settings.openchamber.about.actions.checkUpdates":`Vérifier les mises à jour`,"settings.openchamber.about.actions.update":`Mise à jour`,"settings.openchamber.about.actions.updateToVersion":`Mise à jour vers {version}`,"settings.openchamber.about.actions.applyOtaToVersion":`Mettre à jour vers {version}`,"settings.openchamber.about.actions.installNativeToVersion":`Installer {version}`,"settings.openchamber.about.actions.checkForUpdates":`Vérifier les mises à jour`,"settings.openchamber.about.toast.latestVersion":`Vous êtes sur la dernière version`,"settings.openchamber.about.toast.checkFailed":`Impossible de vérifier les mises à jour`,"settings.openchamber.about.betaUpdates.label":`Rejoindre les mises à jour bêta`,"settings.openchamber.about.betaUpdates.description":`Recevez les mises à jour de l’application en avant-première sur cet appareil.`,"settings.openchamber.about.betaUpdates.rollback.title":`Revenir à la version stable ?`,"settings.openchamber.about.betaUpdates.rollback.description":`Vous utilisez une version bêta. La désactivation des mises à jour bêta ramènera OpenChamber à la version stable v{version}. Redémarrez l’application pour appliquer ce changement.`,"settings.openchamber.about.betaUpdates.rollback.actions.cancel":`Garder la bêta`,"settings.openchamber.about.betaUpdates.rollback.actions.confirm":`Revenir à la version stable`,"settings.openchamber.about.diagnostics.label":`Journal de diagnostic`,"settings.openchamber.about.diagnostics.description":`Exporte les feat de diagnostic locaux pour analyser les problèmes d’affichage et de synchronisation. Aucun corps de message ni jeton n’est inclus.`,"settings.openchamber.about.diagnostics.export":`Exporter le journal`,"settings.openchamber.about.diagnostics.exporting":`Exportation…`,"settings.openchamber.about.diagnostics.enable":`Enregistrer les feat de diagnostic`,"settings.openchamber.about.diagnostics.enableHint":`Disponible dans les versions bêta. Enregistre sur cet appareil le cycle de synchronisation et d’affichage de la session, sans le corps du message.`,"settings.openchamber.about.diagnostics.toast.exported":`Journal de diagnostic exporté`,"settings.openchamber.about.diagnostics.toast.failed":`Impossible d’exporter le journal de diagnostic`,"settings.openchamber.about.diagnostics.toast.empty":`Journal de diagnostic exporté. Aucun événement n’a encore été enregistré.`,"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 «\xA0{name}\xA0» à 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.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.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.field.systemPromptPlaceholder":`Vous êtes un assistant IA utile...
|
|
1
|
+
var e={"settings.globalConfig.title":`Configuration globale`,"settings.globalConfig.description":`Modifiez les fichiers de configuration actifs dans ~/.config/opencode.`,"settings.globalConfig.actions.reload":`Recharger le fichier`,"settings.globalConfig.restartHint":`Redémarrez OpenCode après l’enregistrement pour appliquer les modifications de configuration.`,"settings.globalConfig.toast.loadFailed":`Échec du chargement du fichier de configuration`,"settings.globalConfig.toast.saveFailed":`Échec de l’enregistrement du fichier de configuration`,"settings.globalConfig.toast.saved":`Configuration enregistrée. Redémarrez OpenCode pour l’appliquer.`,"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.help":`Copiez l’ID depuis l’URL du tableau de bord et le cookie auth depuis les outils du navigateur. OpenChamber 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.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 OpenChamber.`,"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.backToSettings":`Retour aux paramètres`,"settings.view.actions.closeSettings":`Fermer les paramètres`,"settings.view.actions.openSectionList":`Ouvrir la liste des sections`,"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.view.navigation.groups.connection":`Connexion`,"settings.view.navigation.groups.personalization":`Personnalisation`,"settings.view.navigation.groups.workspace":`Espace de travail`,"settings.view.navigation.groups.opencode":`OpenCode`,"settings.view.navigation.groups.content":`Contenu et automatisation`,"settings.view.navigation.groups.system":`Système`,"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.chat.title":`Chat`,"settings.page.shortcuts.title":`Raccourcis`,"settings.page.sessions.title":`Sessions`,"settings.page.summaryAI.title":`Résumés IA`,"settings.page.magicPrompts.title":`Prompts magiques`,"settings.page.notifications.title":`Notifications`,"settings.page.voice.title":`Voix`,"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.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.description":`Connectez-vous à d’autres serveurs OpenChamber via un lien d’import ou SSH.`,"settings.remoteInstances.sidebar.empty":`Aucune instance distante pour le moment. Importez un lien ou ajoutez une connexion SSH.`,"settings.remoteInstances.channel.link":`Lien`,"settings.remoteInstances.channel.ssh":`SSH`,"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 OpenChamber à 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 distant préféré`,"settings.remoteInstances.page.field.preferredRemotePortHint":`Le port OpenChamber doit être utilisé sur l'hôte distant. Laissez vide pour laisser le runtime choisir.`,"settings.remoteInstances.page.field.keepServerRunning":`Maintenir le serveur en marche`,"settings.remoteInstances.page.field.keepServerRunningHint":`S'il est activé, le démon OpenChamber continue de s'exécuter à distance lorsque vous vous déconnectez.`,"settings.remoteInstances.page.field.bindHost":`Lier l'hôte`,"settings.remoteInstances.page.field.bindHostHint":`Interface réseau pour l’URL locale principale. Utilisez 127.0.0.1/localhost pour un accès uniquement local.`,"settings.remoteInstances.page.field.preferredLocalPort":`Port local préféré`,"settings.remoteInstances.page.field.preferredLocalPortHint":`Port local préféré pour le tunnel principal OpenChamber. Laissez vide pour la sélection automatique.`,"settings.remoteInstances.page.field.forwardType":`Type de transfert`,"settings.remoteInstances.page.field.localListen":`Écoute locale`,"settings.remoteInstances.page.field.localTarget":`Cible locale`,"settings.remoteInstances.page.field.remoteListen":`Écoute distante`,"settings.remoteInstances.page.field.remoteTarget":`Cible distante`,"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.actions.cancel":`Annuler`,"settings.common.actions.create":`Créer`,"settings.common.actions.delete":`Supprimer`,"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.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.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.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.openchamber.about.title":`À propos de OpenChamber`,"settings.openchamber.about.field.version":`Version`,"settings.openchamber.about.field.clientVersion":`Client`,"settings.openchamber.about.field.webBundle":`Bundle web`,"settings.openchamber.about.field.instanceOpenChamberVersion":`OpenChamber`,"settings.openchamber.about.field.instanceOpenCodeVersion":`OpenCode`,"settings.openchamber.about.state.checking":`Vérification...`,"settings.openchamber.about.state.upToDate":`À jour`,"settings.openchamber.about.state.builtin":`intégré`,"settings.openchamber.about.actions.checkUpdates":`Vérifier les mises à jour`,"settings.openchamber.about.actions.update":`Mise à jour`,"settings.openchamber.about.actions.updateToVersion":`Mise à jour vers {version}`,"settings.openchamber.about.actions.applyOtaToVersion":`Mettre à jour vers {version}`,"settings.openchamber.about.actions.installNativeToVersion":`Installer {version}`,"settings.openchamber.about.actions.checkForUpdates":`Vérifier les mises à jour`,"settings.openchamber.about.actions.submitFeedback":`Envoyer des commentaires`,"settings.openchamber.about.toast.latestVersion":`Vous êtes sur la dernière version`,"settings.openchamber.about.toast.checkFailed":`Impossible de vérifier les mises à jour`,"settings.openchamber.about.betaUpdates.label":`Rejoindre les mises à jour bêta`,"settings.openchamber.about.betaUpdates.description":`Recevez les mises à jour de l’application en avant-première sur cet appareil.`,"settings.openchamber.about.betaUpdates.rollback.title":`Revenir à la version stable ?`,"settings.openchamber.about.betaUpdates.rollback.description":`Vous utilisez une version bêta. La désactivation des mises à jour bêta ramènera OpenChamber à la version stable v{version}. Redémarrez l’application pour appliquer ce changement.`,"settings.openchamber.about.betaUpdates.rollback.actions.cancel":`Garder la bêta`,"settings.openchamber.about.betaUpdates.rollback.actions.confirm":`Revenir à la version stable`,"settings.openchamber.about.diagnostics.label":`Journal de diagnostic`,"settings.openchamber.about.diagnostics.description":`Exporte les feat de diagnostic locaux pour analyser les problèmes d’affichage et de synchronisation. Aucun corps de message ni jeton n’est inclus.`,"settings.openchamber.about.diagnostics.export":`Exporter le journal`,"settings.openchamber.about.diagnostics.exporting":`Exportation…`,"settings.openchamber.about.diagnostics.enable":`Enregistrer les feat de diagnostic`,"settings.openchamber.about.diagnostics.enableHint":`Disponible dans les versions bêta. Enregistre sur cet appareil le cycle de synchronisation et d’affichage de la session, sans le corps du message.`,"settings.openchamber.about.diagnostics.toast.exported":`Journal de diagnostic exporté`,"settings.openchamber.about.diagnostics.toast.failed":`Impossible d’exporter le journal de diagnostic`,"settings.openchamber.about.diagnostics.toast.empty":`Journal de diagnostic exporté. Aucun événement n’a encore été enregistré.`,"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 «\xA0{name}\xA0» à 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.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.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.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 «\xA0{name}\xA0» ?`,"settings.commands.sidebar.dialog.resetDescription":`Êtes-vous sûr de vouloir réinitialiser la commande «\xA0{name}\xA0» à 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,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-C0FnF6B9.js";import{kn as t,xn as n}from"./persistence-vZ7H8WKh.js";import{$ as r,A as i,C as a,F as o,G as s,J as c,K as l,L as u,M as d,N as f,Nt as p,O as m,Q as h,R as ee,S as te,T as ne,X as re,Y as g,Z as ie,_ as ae,at as oe,b as se,c as ce,d as le,gt as ue,h as de,ht as fe,it as pe,lt as me,m as he,nt as ge,o as _e,pt as ve,rt as ye,u as be,ut as xe,v as Se,vt as Ce,w as we,x as Te,xt as Ee,yt as De,z as Oe}from"./platform-CTaznShj.js";import{Ua as ke,Xi as _,ia as v,l as y,s as Ae}from"./useMobileNavigationStore-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-C0FnF6B9.js";import{kn as t,xn as n}from"./persistence-vZ7H8WKh.js";import{$ as r,A as i,C as a,F as o,G as s,J as c,K as l,L as u,M as d,N as f,Nt as p,O as m,Q as h,R as ee,S as te,T as ne,X as re,Y as g,Z as ie,_ as ae,at as oe,b as se,c as ce,d as le,gt as ue,h as de,ht as fe,it as pe,lt as me,m as he,nt as ge,o as _e,pt as ve,rt as ye,u as be,ut as xe,v as Se,vt as Ce,w as we,x as Te,xt as Ee,yt as De,z as Oe}from"./platform-CTaznShj.js";import{Ua as ke,Xi as _,ia as v,l as y,s as Ae}from"./useMobileNavigationStore-BNnnW08z.js";var je=e({applyGitStash:()=>G,checkIsGitRepository:()=>S,checkoutCommit:()=>Ke,cherryPick:()=>qe,countGitStashFiles:()=>U,createBranch:()=>J,createGitIdentity:()=>Z,createGitWorktree:()=>z,deleteGitIdentity:()=>$,deleteGitWorktree:()=>B,deleteRemoteBranch:()=>j,discoverGitCredentials:()=>He,discoverGitRepositories:()=>C,dropGitStash:()=>q,generateCommitMessage:()=>N,getCommitFileDiff:()=>Y,getConflictDetails:()=>Xe,getGitBranches:()=>A,getGitIdentities:()=>X,getGitStatus:()=>w,getGitWorktreeBootstrapStatus:()=>L,getGlobalGitIdentity:()=>Ue,git:()=>V,listGitStashes:()=>H,listGitWorktrees:()=>F,merge:()=>Ge,popGitStash:()=>K,previewGitWorktree:()=>R,rebase:()=>We,resetToCommit:()=>Ye,resolveGitPrimaryRoot:()=>T,resolveGitTopLevel:()=>E,revertCommit:()=>Je,stageGitFile:()=>D,stageGitFiles:()=>O,stashGitChanges:()=>W,unstageGitFile:()=>Pe,unstageGitFiles:()=>k,updateGitIdentity:()=>Q,validateGitWorktree:()=>I}),b=()=>n()?.git??null,Me=e=>{typeof window>`u`||window.dispatchEvent(new CustomEvent(`openchamber:chat-force-scroll-bottom`,{detail:{sessionId:e}}))},x=e=>{let t=e.trim(),n=(t.match(/```(?:json)?\s*([\s\S]*?)```/i)?.[1]??t).trim(),r=[n.indexOf(`{`)].filter(e=>e>=0);for(let e of r)for(let t=n.length;t>e;--t)if(n[t-1]===`}`)try{let r=JSON.parse(n.slice(e,t));if(r&&typeof r==`object`&&!Array.isArray(r))return r}catch{}return null},Ne=e=>{let t=e?.data;return(Array.isArray(t?.parts)?t.parts:[]).map(e=>{let t=e;return t.type===`text`?typeof t.text==`string`?t.text:typeof t.content==`string`?t.content:typeof t.value==`string`?t.value:``:``}).filter(e=>e.trim().length>0).join(`
|
|
2
2
|
`).trim()};async function S(e){let t=b();return t?t.checkIsGitRepository(e):ce(e)}async function C(e){return we(e)}async function w(e,t){let n=b();return n?n.getGitStatus(e,t):u(e,t)}async function T(e){return(await ye(e)).root}async function E(e){return(await pe(e)).root}async function D(e,t){let n=b();return n?.stageGitFile?n.stageGitFile(e,t):me(e,t)}async function O(e,t){let n=b();return n?.stageGitFiles?n.stageGitFiles(e,t):xe(e,t)}async function Pe(e,t){let n=b();return n?.unstageGitFile?n.unstageGitFile(e,t):fe(e,t)}async function k(e,t){let n=b();return n?.unstageGitFiles?n.unstageGitFiles(e,t):ue(e,t)}async function A(e,t){let n=b();if(t?.signal?.throwIfAborted(),n){let r=await n.getGitBranches(e,t);return t?.signal?.throwIfAborted(),r}return d(e,t)}async function j(e,t){let n=b();return n?n.deleteRemoteBranch(e,t):te(e,t)}var Fe=30,Ie=12e4,Le=async(e,t)=>{let n=t.slice(0,Fe),r=await Promise.all(n.map(async t=>{try{let[n,r]=await Promise.all([f(e,{path:t,staged:!0}).catch(()=>null),f(e,{path:t,staged:!1}).catch(()=>null)]);return[n?.diff,r?.diff].filter(e=>typeof e==`string`&&e.trim().length>0).join(`
|
|
3
3
|
`)||`--- ${t} (no textual diff available)`}catch{return`--- ${t} (diff unavailable)`}})),i=``;for(let e of r){if(i.length+e.length>Ie){i+=`
|
|
4
4
|
[remaining diffs truncated]`;break}i+=(i?`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{A as t,E as n,b as r,t as i,y as a}from"./useUIStore-NfqK-HA7.js";import{$t as o,D as s,d as c,k as l,u,xn as d}from"./persistence-vZ7H8WKh.js";import{a as f,i as p,r as m}from"./vendor-zustand-B4dlGEM2.js";import{nt as h,rt as g}from"./vendor-base-ui-CnHfUmDN.js";import{B as _,Ct as v,M as y,Mt as b}from"./platform-CTaznShj.js";import{n as x}from"./vendor-react-DLPElpoQ.js";import{s as S}from"./vendor-tanstack-react-query-D7pys_c9.js";import{n as C}from"./vendor-reactuses-core-DDoDDyM9.js";import{n as ee}from"./clipboard-DKpuHEKi.js";import{Co as te,_ as ne,b as re,ct as ie,en as ae,hr as oe,ia as se,l as w,ot as T,so as ce,st as E,un as D,wo as O}from"./useMobileNavigationStore-B34Winlp.js";import{c as le,t as k}from"./utils-C2P0wcWO.js";import{n as A}from"./Icon-D-X70irR.js";import{g as j,v as M}from"./gitApi-jtNyXM2i.js";import{A as ue,M as N,p as P,s as F}from"./projectMeta-Cn9CpPEo.js";var I=e(g(),1),L=e=>{if(!e)return``;let t=e.replace(/\\/g,`/`),n=t.startsWith(`//`),r=t.replace(/\/+/g,`/`);n&&!r.startsWith(`//`)&&(r=`/${r}`);let i=r===`/`,a=/^[A-Za-z]:\/$/.test(r);return!i&&!a&&(r=r.replace(/\/+$/,``)),r},R=e=>/^[A-Za-z]:\//.test(e)?e.toLowerCase():e,z=(e,t)=>{let n=L(t),r=L(e);if(!n||!r)return!1;let i=R(n),a=R(r);return a===i||a.startsWith(`${i}/`)},de=e=>{if(!e||typeof e!=`object`)return{};let t=e,n={};for(let[e,r]of Object.entries(t)){let t=L(e);if(!t||!r||typeof r!=`object`)continue;let i=r,a=Array.isArray(i.openPaths)?Array.from(new Set(i.openPaths.filter(e=>typeof e==`string`).map(e=>L(e)).filter(e=>z(e,t)))):[],o=Array.isArray(i.expandedPaths)?Array.from(new Set(i.expandedPaths.filter(e=>typeof e==`string`).map(e=>L(e)).filter(e=>z(e,t)))):[],s=typeof i.selectedPath==`string`?L(i.selectedPath):null,c=s&&z(s,t)?s:a[0]??null,l=typeof i.touchedAt==`number`&&Number.isFinite(i.touchedAt)?i.touchedAt:Date.now(),u=n[t];if(u){let e=Array.from(new Set([...u.openPaths,...a])),r=Array.from(new Set([...u.expandedPaths,...o]));n[t]={openPaths:e,selectedPath:u.selectedPath??c??e[0]??null,expandedPaths:r,touchedAt:Math.max(u.touchedAt,l)};continue}n[t]={openPaths:a,selectedPath:c,expandedPaths:o,touchedAt:l}}return n},B=(e,t)=>{let n=Object.entries(e);if(n.length<=t)return e;n.sort((e,t)=>(t[1]?.touchedAt??0)-(e[1]?.touchedAt??0));let r={};for(let[e,i]of n.slice(0,t))r[e]=i;return r},V=e=>e?{...e,touchedAt:Date.now()}:{openPaths:[],selectedPath:null,expandedPaths:[],touchedAt:Date.now()},fe=f()(m(p((e,t)=>({byRoot:{},addOpenPath:(t,n,r)=>{let i=L((t||``).trim()),a=L((n||``).trim());!i||!a||!r?.allowOutsideRoot&&!z(a,i)||e(e=>{let t=e.byRoot[i],n=V(t),r=n.openPaths.includes(a),o=r?n.openPaths:[...n.openPaths,a],s=n.selectedPath??a;return t&&r&&t.selectedPath===s?e:{byRoot:B({...e.byRoot,[i]:{...n,openPaths:o,selectedPath:s}},20)}})},removeOpenPath:(t,n)=>{let r=L((t||``).trim()),i=L((n||``).trim());!r||!i||e(e=>{let t=e.byRoot[r];if(!t)return e;let n=R(i),a=e=>R(e)===n,o=t.selectedPath?a(t.selectedPath):!1;if(!t.openPaths.some(a)&&!o)return e;let s=t.openPaths.filter(e=>!a(e)),c=o?s[0]??null:t.selectedPath;return{byRoot:B({...e.byRoot,[r]:{...t,openPaths:s,selectedPath:c,touchedAt:Date.now()}},20)}})},removeOpenPathsByPrefix:(t,n)=>{let r=L((t||``).trim()),i=L((n||``).trim());!r||!i||e(e=>{let t=e.byRoot[r];if(!t)return e;let n=R(i),a=n.endsWith(`/`)?n:`${n}/`,o=e=>{let t=R(e);return t===n||t.startsWith(a)},s=t.openPaths.filter(e=>!o(e));if(s.length===t.openPaths.length)return e;let c=t.selectedPath&&o(t.selectedPath)?s[0]??null:t.selectedPath;return{byRoot:B({...e.byRoot,[r]:{...t,openPaths:s,selectedPath:c,touchedAt:Date.now()}},20)}})},removeExpandedPathsByPrefix:(t,n)=>{let r=L((t||``).trim()),i=L((n||``).trim());!r||!i||e(e=>{let t=e.byRoot[r];if(!t)return e;let n=R(i),a=n.endsWith(`/`)?n:`${n}/`,o=t.expandedPaths.filter(e=>{let t=R(e);return t!==n&&!t.startsWith(a)});return o.length===t.expandedPaths.length?e:{byRoot:B({...e.byRoot,[r]:{...t,expandedPaths:o,touchedAt:Date.now()}},20)}})},setSelectedPath:(t,n,r)=>{let i=L((t||``).trim()),a=n?L(n.trim()):null;!i||a&&!r?.allowOutsideRoot&&!z(a,i)||e(e=>{let t=e.byRoot[i],n=V(t),r=a&&!n.openPaths.includes(a)?[...n.openPaths,a]:n.openPaths;return t&&t.selectedPath===a&&r===t.openPaths?e:{byRoot:B({...e.byRoot,[i]:{...n,openPaths:r,selectedPath:a}},20)}})},ensureSelectedPath:e=>{let n=L((e||``).trim());if(!n)return;let r=t().byRoot[n];if(!r||r.selectedPath)return;let i=r.openPaths[0]??null;i&&t().setSelectedPath(n,i)},toggleExpandedPath:(t,n)=>{let r=L((t||``).trim()),i=L((n||``).trim());!r||!i||!z(i,r)||e(e=>{let t=e.byRoot[r],n=V(t),a=n.expandedPaths.includes(i)?n.expandedPaths.filter(e=>e!==i):[...n.expandedPaths,i];return t&&t.expandedPaths===a&&t.selectedPath===n.selectedPath&&t.openPaths===n.openPaths?e:{byRoot:B({...e.byRoot,[r]:{...n,expandedPaths:a}},20)}})},expandPath:(t,n)=>{let r=L((t||``).trim()),i=L((n||``).trim());!r||!i||!z(i,r)||e(e=>{let t=e.byRoot[r],n=V(t);return n.expandedPaths.includes(i)&&t?e:{byRoot:B({...e.byRoot,[r]:{...n,expandedPaths:[...n.expandedPaths,i]}},20)}})},expandPaths:(t,n)=>{let r=L((t||``).trim());if(!r||!n||n.length===0)return;let i=n.map(e=>L((e||``).trim())).filter(e=>e&&z(e,r));i.length!==0&&e(e=>{let t=e.byRoot[r],n=V(t),a=new Set(n.expandedPaths),o=i.filter(e=>!a.has(e));return o.length===0?e:{byRoot:B({...e.byRoot,[r]:{...n,expandedPaths:[...n.expandedPaths,...o]}},20)}})}}),{name:`files-view-tabs-store`,version:2,storage:a(),migrate:e=>{if(!e||typeof e!=`object`)return{byRoot:{}};let t=e.byRoot;return{byRoot:de(t)}},partialize:e=>({byRoot:de(e.byRoot)})}),{name:`files-view-tabs-store`})),H=x(),pe=(e,t)=>{let n=(0,H.c)(4),r=t===void 0?200:t,[i,a]=I.useState(e),o,s;return n[0]!==r||n[1]!==e?(o=()=>{let t=window.setTimeout(()=>{a(e)},r);return()=>{window.clearTimeout(t)}},s=[e,r],n[0]=r,n[1]=e,n[2]=o,n[3]=s):(o=n[2],s=n[3]),I.useEffect(o,s),i},me=()=>{let e=(0,H.c)(17),t=w(U),n=D(),r;e[0]===t?r=e[1]:(r=e=>t?e.getAttachment(t):void 0,e[0]=t,e[1]=r);let i=re(r),a=w(W),o=w(G),s=O(K),c=O(he),l=v(ge);if(t){let r;e[2]===i?r=e[3]:(r=ne(i),e[2]=i,e[3]=r);let o=r;if(o)return o;let s;e[4]!==t||e[5]!==a?(s=a.get(t),e[4]=t,e[5]=a,e[6]=s):s=e[6];let c=s;if(c?.path)return c.path;let l;if(e[7]!==t||e[8]!==n){let r;e[10]===t?r=e[11]:(r=e=>e.id===t,e[10]=t,e[11]=r),l=n.find(r),e[7]=t,e[8]=n,e[9]=l}else l=e[9];let u=l;if(u?.directory)return u.directory}if(o?.open&&(o.bootstrapPendingDirectory||o.directoryOverride))return(o.bootstrapPendingDirectory||o.directoryOverride)??void 0;if(s){let t;if(e[12]!==s||e[13]!==c){let n;e[15]===s?n=e[16]:(n=e=>e.id===s,e[15]=s,e[16]=n),t=c.find(n),e[12]=s,e[13]=c,e[14]=t}else t=e[14];let n=t;if(n?.path)return n.path}return l??void 0};function U(e){return e.currentSessionId}function W(e){return e.worktreeMetadata}function G(e){return e.newSessionDraft}function K(e){return e.activeProjectId}function he(e){return e.projects}function ge(e){return e.currentDirectory}var _e=.4,q=8,J=e=>{let t=e.gap??q,n=Math.max(0,e.popupBottom-e.boundaryTop-t),r=e.viewportHeight*_e,i=Math.floor(Math.min(n,r));return n>=120?Math.min(n,Math.max(120,i)):i},Y=(e,t=0)=>{let n=e.closest(`main`);if(!n)return null;let r=(e.closest(`.mobile-chat-screen__content`)?.parentElement??n.parentElement?.closest(`main`)??n).querySelector(`:scope > .oc-mobile-detail-navigation`)?.getBoundingClientRect().bottom,i=n.getBoundingClientRect().top;return Math.max(r===void 0?i:Math.max(r,i),t)},ve=(e,t)=>{let n=(0,H.c)(3),[r,i]=I.useState(void 0),a;return n[0]!==e||n[1]!==t?(a=()=>{if(!t)return;let n=()=>{let t=e.current;if(!t)return;let n=window.visualViewport,r=Y(t,n?.offsetTop??0);if(r===null)return;let a=n?.height??window.innerHeight,o=J({popupBottom:t.getBoundingClientRect().bottom,boundaryTop:r,viewportHeight:a});i(e=>e===o?e:o)};return n(),window.addEventListener(`resize`,n),window.addEventListener(`oc:keyboard-settled`,n),window.visualViewport?.addEventListener(`resize`,n),window.visualViewport?.addEventListener(`scroll`,n),()=>{window.removeEventListener(`resize`,n),window.removeEventListener(`oc:keyboard-settled`,n),window.visualViewport?.removeEventListener(`resize`,n),window.visualViewport?.removeEventListener(`scroll`,n)}},n[0]=e,n[1]=t,n[2]=a):a=n[2],I.useLayoutEffect(a),t?r:void 0},ye=()=>{let e=null,t=!1,n=!1;return{pointerDown:(n,r)=>{e={x:n,y:r},t=!1},pointerMove:(n,r)=>{e&&Math.hypot(n-e.x,r-e.y)>6&&(t=!0)},pointerCancel:()=>{e=null,t=!1},pointerUp:r=>{if(!e)return!1;let i=!t;return e=null,t=!1,i?(n=!0,r(),!0):(n=!0,!1)},click:e=>n?(n=!1,!1):(e(),!0)}},X=h(),Z=I.forwardRef(({searchQuery:e,onFileSelect:t,onAgentSelect:n,onSessionSelect:r,onClose:a,style:o},c)=>{let{t:u}=ee(),d=me()??``,f=w(e=>e.currentSessionId),p=oe(e=>e.activeSessions),m=O(e=>e.activeProjectId),h=O(e=>e.projects),g=I.useMemo(()=>h.find(e=>e.id===m)?.path??null,[m,h]),_=I.useMemo(()=>{let e=g||d;return e?e.replace(/\\/g,`/`).replace(/\/+$/,``):null},[g,d]),v=fe(e=>_?e.byRoot[_]:void 0),y=se(e=>e.getVisibleAgents),x=b(e=>e.searchFiles),S=pe(e,180),te=l(),ne=s(),[re,ie]=I.useState([]),[ae,ce]=I.useState([]),[D,j]=I.useState(!1),[M,N]=I.useState(0),P=I.useRef(0),[F,L]=I.useState(360),[R,z]=I.useState({}),[de,B]=I.useState({}),V=I.useRef([]),H=I.useRef([]),U=I.useRef([]),W=I.useRef(null),G=I.useRef(null);G.current||=ye();let K=i(e=>e.isMobile),he=ve(W,K),ge=(e??``).trim(),_e=I.useMemo(()=>{if(!_||!v)return[];let e=[v.selectedPath,...v.openPaths.slice().reverse()].filter(e=>typeof e==`string`&&e.length>0),t=new Set,n=ge.toLowerCase();return e.filter(e=>{if(t.has(e))return!1;t.add(e);let r=e.startsWith(`${_}/`)?e.slice(_.length+1):e;return!n||r.toLowerCase().includes(n)}).slice(0,6).map(e=>{let t=e.replace(/\\/g,`/`),n=t.split(`/`).filter(Boolean).pop()||t;return{name:n,path:t,relativePath:t.startsWith(`${_}/`)?t.slice(_.length+1):t,extension:n.includes(`.`)?n.split(`.`).pop()?.toLowerCase():void 0}})},[ge,_,v]),q=I.useMemo(()=>ge.length>0?ae:ae.slice(0,2),[ae,ge.length]),J=I.useMemo(()=>r?T({sessions:p,currentSessionId:f,searchQuery:ge}):[],[p,f,ge,r]),Y=_e,Z=re;I.useEffect(()=>{let e=e=>{let t=e.target;!t||!W.current||W.current.contains(t)||a()};return document.addEventListener(`pointerdown`,e,!0),()=>{document.removeEventListener(`pointerdown`,e,!0)}},[a]),I.useEffect(()=>{if(!d){ie([]);return}let e=(S??``).trim().replace(/^\.\//,``).replace(/^\/+/,``).toLowerCase();if(!e){ie([]);return}let t=!1;j(!0);let n={includeHidden:te,respectGitignore:!ne};return Promise.all([x(d,e,80,{...n,type:`file`}),x(d,e,40,{...n,type:`directory`})]).then(([n,r])=>{if(t)return;let i=new Set(_e.map(e=>e.path));ie(E({files:n,directories:r,query:e,excludePaths:i,limit:20}))}).catch(()=>{t||ie([])}).finally(()=>{t||j(!1)}),()=>{t=!0}},[d,S,_e,x,te,ne]),I.useEffect(()=>{let t=y(),n=(e??``).trim().toLowerCase(),r=t.filter(e=>e.mode&&e.mode!==`primary`).filter(e=>!n||`${e.name} ${e.description??``}`.toLowerCase().includes(n)).map(e=>({name:e.name,description:e.description,mode:e.mode})).sort((e,t)=>e.name.localeCompare(t.name));ce(r)},[y,e]),I.useEffect(()=>{N(0),z({}),B({})},[Z,Y.length,q.length,J.length]),I.useEffect(()=>{P.current=M},[M]),I.useEffect(()=>{V.current[M]?.scrollIntoView({block:`nearest`})},[M]),I.useEffect(()=>{let e=null,t=()=>{e!==null&&cancelAnimationFrame(e),e=requestAnimationFrame(()=>{let e={},t={};H.current.forEach((n,r)=>{if(!n)return;let i=U.current[r]?.offsetWidth??n.scrollWidth,a=Math.max(0,i-n.clientWidth),o=a>8;if(e[r]=o,o){let e=Math.max(.6,a/110);t[r]=e}}),z(e),B(t)})};return t(),window.addEventListener(`resize`,t),()=>{e!==null&&cancelAnimationFrame(e),window.removeEventListener(`resize`,t)}},[Z,Y]),I.useEffect(()=>{let e=H.current[M];if(!e)return;let t=()=>{let t=e.clientWidth;t>0&&L(t)};if(t(),typeof ResizeObserver>`u`)return;let n=new ResizeObserver(t);return n.observe(e),()=>{n.disconnect()}},[M]);let be=C(e=>{t(e)}),xe=C(e=>{n?.(e)}),Se=C(e=>{r?.(e)}),Ce=(e,t)=>({onMouseDown:e=>e.preventDefault(),onPointerDown:e=>{e.pointerType===`touch`&&G.current?.pointerDown(e.clientX,e.clientY)},onPointerMove:e=>{e.pointerType===`touch`&&G.current?.pointerMove(e.clientX,e.clientY)},onPointerUp:e=>{e.pointerType===`touch`&&(G.current?.pointerUp(t)??!1)&&(e.preventDefault(),e.stopPropagation())},onPointerCancel:()=>G.current?.pointerCancel(),onClick:()=>{G.current?.click(t)},onMouseMove:()=>N(e)});I.useImperativeHandle(c,()=>({handleKeyDown:e=>{if(e===`Escape`){a();return}let t=q.length+J.length+Y.length+Z.length;if(t!==0){if(e===`ArrowDown`){N(e=>(e+1)%t);return}if(e===`ArrowUp`){N(e=>(e-1+t)%t);return}if(e===`Enter`||e===`Tab`){let e=(P.current%t+t)%t;if(e<q.length){let t=q[e];t&&xe(t.name);return}let n=e-q.length;if(n<J.length){let e=J[n];e&&Se(e);return}let r=n-J.length,i=r<Y.length?Y[r]:Z[r-Y.length];i&&be(i)}}}}),[Z,Y,q,J,a,be,xe,Se]);let we=e=>{if(e.isDirectory)return(0,X.jsx)(A,{name:`folder-3-fill`,className:`h-3.5 w-3.5 text-current`});switch(e.extension?.toLowerCase()){case`ts`:case`tsx`:case`js`:case`jsx`:return(0,X.jsx)(A,{name:`code`,className:`h-3.5 w-3.5 text-current`});case`json`:return(0,X.jsx)(A,{name:`code`,className:`h-3.5 w-3.5 text-current`});case`md`:case`mdx`:return(0,X.jsx)(A,{name:`file`,className:`h-3.5 w-3.5 text-current`});case`png`:case`jpg`:case`jpeg`:case`gif`:case`svg`:return(0,X.jsx)(A,{name:`file-image`,className:`h-3.5 w-3.5 text-current`});default:return(0,X.jsx)(A,{name:`file-pdf`,className:`h-3.5 w-3.5 text-current`})}};return(0,X.jsxs)(`div`,{ref:W,className:`absolute z-[100] min-w-0 w-full max-w-[640px] max-h-64 bg-background border-2 border-border/60 rounded-xl shadow-none bottom-full mb-2 left-0 flex flex-col`,style:he===void 0?o:{...o,maxHeight:he},children:[(0,X.jsx)(ue,{preventOverscroll:!0,outerClassName:`flex-1 min-h-0`,className:`px-0`,children:(0,X.jsxs)(`div`,{className:`pb-2`,children:[q.length>0&&(0,X.jsx)(`div`,{className:`px-3 pb-1 pt-2 typography-meta font-medium text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.groups.agents`)}),q.map((e,t)=>(0,X.jsx)(`div`,{ref:e=>{V.current[t]=e},className:k(`flex items-start gap-2 px-3 py-1.5 cursor-pointer typography-ui-label rounded-lg`,K&&`min-h-11`,M===t&&`bg-interactive-selection text-interactive-selection-foreground`),...Ce(t,()=>xe(e.name)),children:(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:`font-semibold truncate`,children:[`@`,e.name]}),e.description&&!K?(0,X.jsx)(`div`,{className:`typography-meta text-muted-foreground truncate`,children:e.description}):null]})},`agent-${e.name}`)),q.length===2&&ge.length===0&&ae.length>2&&(0,X.jsx)(`div`,{className:`px-3 py-1 typography-meta text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.searchMoreAgents`)}),J.length>0&&(0,X.jsx)(`div`,{className:`px-3 pb-1 pt-2 typography-meta font-medium text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.groups.sessions`)}),J.map((e,t)=>{let n=q.length+t;return(0,X.jsxs)(`div`,{ref:e=>{V.current[n]=e},className:k(`flex items-center gap-2 px-3 py-1.5 cursor-pointer typography-ui-label rounded-lg`,K&&`min-h-11`,M===n&&`bg-interactive-selection text-interactive-selection-foreground`),...Ce(n,()=>Se(e)),children:[(0,X.jsx)(A,{name:`chat-thread`,className:`h-4 w-4 flex-shrink-0 text-[var(--primary-base)]`}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,title:e.title||u(`chat.fileMentionAutocomplete.untitledSession`),children:e.title||u(`chat.fileMentionAutocomplete.untitledSession`)}),K?null:(0,X.jsx)(`span`,{className:`flex-shrink-0 typography-meta text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.sessionType`)})]},`session-${e.id}`)}),Y.length>0&&(0,X.jsx)(`div`,{className:`px-3 pb-1 pt-2 typography-meta font-medium text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.groups.recentFiles`)}),Y.map((e,t)=>{let n=q.length+J.length+t,r=e.relativePath||e.name,i=le(r,{maxLength:60}),a=M===n,o=R[n]??!1,s=de[n]??2.6;return(0,X.jsxs)(`div`,{ref:e=>{V.current[n]=e},className:k(`flex items-center gap-2 px-3 py-1.5 cursor-pointer typography-ui-label rounded-lg`,K&&`min-h-11`,a&&`bg-interactive-selection text-interactive-selection-foreground`),...Ce(n,()=>be(e)),children:[we(e),(0,X.jsxs)(`span`,{ref:e=>{H.current[n]=e},className:`relative flex-1 min-w-0 overflow-hidden file-mention-marquee-container`,style:a?{"--file-mention-marquee-width":`${F}px`,"--file-mention-marquee-duration":`${s}s`}:void 0,"aria-label":r,children:[(0,X.jsx)(`span`,{ref:e=>{U.current[n]=e},className:`absolute invisible whitespace-nowrap pointer-events-none`,"aria-hidden":!0,children:r}),o&&a?(0,X.jsx)(`span`,{className:`inline-block whitespace-nowrap file-mention-marquee`,children:r}):(0,X.jsx)(`span`,{className:`block truncate`,children:i})]})]},`recent-${e.path}`)}),Z.length>0&&(0,X.jsx)(`div`,{className:`px-3 pb-1 pt-2 typography-meta font-medium text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.groups.files`)}),Z.map((e,t)=>{let n=q.length+J.length+Y.length+t,r=e.relativePath||e.name,i=le(r,{maxLength:60}),a=M===n,o=R[n]??!1,s=de[n]??2.6;return(0,X.jsxs)(`div`,{ref:e=>{V.current[n]=e},className:k(`flex items-center gap-2 px-3 py-1.5 cursor-pointer typography-ui-label rounded-lg`,K&&`min-h-11`,a&&`bg-interactive-selection text-interactive-selection-foreground`),...Ce(n,()=>be(e)),children:[we(e),(0,X.jsxs)(`span`,{ref:e=>{H.current[n]=e},className:`relative flex-1 min-w-0 overflow-hidden file-mention-marquee-container`,style:a?{"--file-mention-marquee-width":`${F}px`,"--file-mention-marquee-duration":`${s}s`}:void 0,"aria-label":r,children:[(0,X.jsx)(`span`,{ref:e=>{U.current[n]=e},className:`absolute invisible whitespace-nowrap pointer-events-none`,"aria-hidden":!0,children:r}),o&&a?(0,X.jsx)(`span`,{className:`inline-block whitespace-nowrap file-mention-marquee`,children:r}):(0,X.jsx)(`span`,{className:`block truncate`,children:i})]})]},e.path)}),D&&Z.length===0?(0,X.jsx)(`div`,{className:`flex items-center justify-center py-3`,children:(0,X.jsx)(A,{name:`refresh`,className:`h-4 w-4 animate-spin text-muted-foreground`})}):null,!D&&Z.length===0&&Y.length===0&&q.length===0&&J.length===0&&(0,X.jsx)(`div`,{className:`px-3 py-2 typography-ui-label text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.empty`)})]})}),!K&&(0,X.jsx)(`div`,{className:`px-3 pt-1 pb-1.5 border-t typography-meta text-muted-foreground`,children:u(`chat.autocomplete.keyboardHint`)})]})}),be=new Set([`new`,`fork`,`compact`,`undo`,`redo`,`model`,`goal`]),xe=(e,t)=>{if(!t||e.isSkill)return!1;let n=e.name?.trim().toLowerCase();return!!(n&&be.has(n))},Se=(e,t)=>!e||t({name:e}),Ce=` `,we=(e,t)=>{let n=Math.max(0,Math.min(t,e.length)),r=n;for(;r>0&&!/\s/.test(e[r-1]);)--r;return r>=2&&e[r-1]===Ce&&e[r-2]===`/`&&(r-=2),e[r]===`/`?{start:r,end:n}:null},Te=`text-[10px] leading-none uppercase font-bold tracking-tight px-1.5 py-1 rounded border flex-shrink-0`,Ee=k(Te,`bg-[color-mix(in_srgb,var(--primary-base)_12%,transparent)] text-[color-mix(in_srgb,var(--primary-base)_70%,transparent)] border-[color-mix(in_srgb,var(--primary-base)_24%,transparent)]`),De=k(Te,`bg-[color-mix(in_srgb,var(--status-success)_12%,transparent)] text-[color-mix(in_srgb,var(--status-success)_70%,transparent)] border-[color-mix(in_srgb,var(--status-success)_24%,transparent)]`),Oe=k(Te,`bg-[color-mix(in_srgb,var(--status-info)_12%,transparent)] text-[color-mix(in_srgb,var(--status-info)_70%,transparent)] border-[color-mix(in_srgb,var(--status-info)_24%,transparent)]`),ke=k(Te,`bg-[var(--surface-muted)] text-muted-foreground border-[var(--interactive-border)]/60`),Ae=(e,t)=>{let n=t.trim();if(!n)return[...e].sort((e,t)=>e.isBuiltIn===t.isBuiltIn?e.name.localeCompare(t.name):e.isBuiltIn?-1:1);let r=ie(e,n,e=>[e.name,e.description??``]);return r.sort((e,t)=>e.score===t.score?e.item.isBuiltIn===t.item.isBuiltIn?e.item.name.localeCompare(t.item.name):e.item.isBuiltIn?-1:1:e.score-t.score),r.map(e=>e.item)},je=(e,t)=>{let n=!!e.sessionID;return{hasSession:n,canStartSessionCommand:n||e.hasNewDraft,canUseReviewHandoffFlow:n&&!t&&!o()}},Me=I.forwardRef(({searchQuery:e,onCommandSelect:t,onClose:n,directory:r,style:a,commandPolicy:o,commandContext:s},c)=>{let{t:l}=ee(),u=i(e=>e.isMobile),d=w(e=>e.currentSessionId),f=w(e=>!!e.newSessionDraft?.open),p=w(I.useCallback(e=>d?e.getDirectoryForSession(d):void 0,[d])),m=ae(d??``,p??void 0),h=I.useMemo(()=>s??{sessionID:d??null,hasMessages:m.length>0,hasNewDraft:f},[s,d,m.length,f]),{hasSession:g,canStartSessionCommand:_,canUseReviewHandoffFlow:v}=I.useMemo(()=>je(h,u),[h,u]),y=h.hasMessages,[b,x]=I.useState([]),[S,C]=I.useState(!1),ne=te({directory:r}),re=I.useMemo(()=>ne.data??[],[ne.data]),ie=ne.isFetching,oe=ce({directory:r}),se=I.useMemo(()=>oe.data??[],[oe.data]),[T,E]=I.useState(0),D=I.useRef(0),O=I.useRef(!1),le=I.useRef([]),j=I.useRef(null),M=ve(j,u),N=I.useRef(!1),P=I.useRef(null),F=I.useRef(!1);I.useEffect(()=>{let e=e=>{let t=e.target;!t||!j.current||j.current.contains(t)||n()};return document.addEventListener(`pointerdown`,e,!0),()=>{document.removeEventListener(`pointerdown`,e,!0)}},[n]),I.useEffect(()=>{(async()=>{C(ie);try{let t=re.map((e,t)=>({id:`opencode:${e.scope??`global`}:${e.name}:${e.agent??``}:${e.model??``}:${t}`,name:e.name,source:`opencode`,description:e.description,agent:e.agent??void 0,model:e.model??void 0,isBuiltIn:e.isBuiltIn,isSkill:e.source===`skill`,scope:e.scope,reference:e.reference})),n=se.map((e,t)=>({id:`skill:${e.scope}:${e.source??`opencode`}:${e.name}:${t}`,name:e.name,source:`skill`,description:e.description,isSkill:!0,scope:e.scope})),r=[{id:`openchamber:new`,name:`new`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.newDescription`),isBuiltIn:!0},...g&&!y?[{id:`openchamber:init`,name:`init`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.initDescription`),isBuiltIn:!0}]:[],...g?[{id:`openchamber:undo`,name:`undo`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.undoDescription`),isBuiltIn:!0},{id:`openchamber:redo`,name:`redo`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.redoDescription`),isBuiltIn:!0},{id:`openchamber:fork`,name:`fork`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.forkDescription`),isBuiltIn:!0},{id:`openchamber:timeline`,name:`timeline`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.timelineDescription`),isBuiltIn:!0}]:[],{id:`openchamber:model`,name:`model`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.modelDescription`),isBuiltIn:!0},{id:`openchamber:compact`,name:`compact`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.compactDescription`),isBuiltIn:!0},...g?[{id:`openchamber:summary`,name:`summary`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.summaryDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:workspace-review`,name:`workspace-review`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.workspaceReviewDescription`),isOpenChamber:!0}]:[],...v?[{id:`openchamber:handoff-review`,name:`handoff-review`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.handoffReviewDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:plan-feature`,name:`plan-feature`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.featurePlanDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:craft-goal`,name:`craft-goal`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.craftGoalDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:goal`,name:`goal`,source:`openchamber`,description:l(`chat.goal.button.armAria`),isBuiltIn:!0}]:[],..._?[{id:`openchamber:catch-up`,name:`catch-up`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.catchUpDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:debug`,name:`debug`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.debugDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:weigh`,name:`weigh`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.weighDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:explore`,name:`explore`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.exploreDescription`),isOpenChamber:!0}]:[],...t,...n],i=!y,a=r.filter(e=>(i||e.name!==`init`)&&(o?.(e)??!0));x(Ae(a,e))}catch{let t=!y,n=[{id:`openchamber:new`,name:`new`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.newDescription`),isBuiltIn:!0},...g&&!y?[{id:`openchamber:init`,name:`init`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.initDescription`),isBuiltIn:!0}]:[],...g?[{id:`openchamber:undo`,name:`undo`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.undoDescription`),isBuiltIn:!0},{id:`openchamber:redo`,name:`redo`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.redoDescription`),isBuiltIn:!0},{id:`openchamber:fork`,name:`fork`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.forkDescription`),isBuiltIn:!0},{id:`openchamber:timeline`,name:`timeline`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.timelineDescription`),isBuiltIn:!0}]:[],{id:`openchamber:model`,name:`model`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.modelDescription`),isBuiltIn:!0},{id:`openchamber:compact`,name:`compact`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.compactDescription`),isBuiltIn:!0},...g?[{id:`openchamber:summary`,name:`summary`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.summaryDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:workspace-review`,name:`workspace-review`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.workspaceReviewDescription`),isOpenChamber:!0}]:[],...v?[{id:`openchamber:handoff-review`,name:`handoff-review`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.handoffReviewDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:plan-feature`,name:`plan-feature`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.featurePlanDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:craft-goal`,name:`craft-goal`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.craftGoalDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:goal`,name:`goal`,source:`openchamber`,description:l(`chat.goal.button.armAria`),isBuiltIn:!0}]:[],..._?[{id:`openchamber:catch-up`,name:`catch-up`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.catchUpDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:debug`,name:`debug`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.debugDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:weigh`,name:`weigh`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.weighDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:explore`,name:`explore`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.exploreDescription`),isOpenChamber:!0}]:[]].filter(e=>(t||e.name!==`init`)&&(o?.(e)??!0));x(Ae(n,e))}finally{C(!1)}})()},[e,y,g,_,v,re,ie,se,l,o]),I.useEffect(()=>{E(0)},[b]),I.useEffect(()=>{D.current=T},[T]),I.useEffect(()=>{le.current[T]?.scrollIntoView({block:`nearest`})},[T]),I.useImperativeHandle(c,()=>({handleKeyDown:e=>{let r=b.length;if(e===`Escape`){n();return}if(r!==0){if(e===`ArrowDown`){O.current=!0,E(e=>(e+1)%r);return}if(e===`ArrowUp`){O.current=!0,E(e=>(e-1+r)%r);return}if(e===`Enter`||e===`Tab`){let n=(D.current%r+r)%r,i=b[n];i&&t(i,xe(i,e===`Enter`))}}}}),[b,n,t]);let L=e=>{switch(e.name){case`new`:return(0,X.jsx)(A,{name:`add`,className:`h-3.5 w-3.5`});case`init`:return(0,X.jsx)(A,{name:`file`,className:`h-3.5 w-3.5 text-green-500`});case`undo`:return(0,X.jsx)(A,{name:`arrow-go-back`,className:`h-3.5 w-3.5 text-orange-500`});case`redo`:return(0,X.jsx)(A,{name:`arrow-go-forward`,className:`h-3.5 w-3.5 text-orange-500`});case`timeline`:return(0,X.jsx)(A,{name:`time`,className:`h-3.5 w-3.5`});case`compact`:return(0,X.jsx)(A,{name:`scissors`,className:`h-3.5 w-3.5 text-purple-500`});case`goal`:return(0,X.jsx)(A,{name:`target`,className:`h-3.5 w-3.5`});case`review`:return(0,X.jsx)(A,{name:`search-eye`,className:`h-3.5 w-3.5 text-blue-500`});case`test`:case`build`:case`run`:return(0,X.jsx)(A,{name:`terminal-box`,className:`h-3.5 w-3.5 text-cyan-500`});default:return e.isBuiltIn?(0,X.jsx)(A,{name:`flashlight`,className:`h-3.5 w-3.5 text-yellow-500`}):(0,X.jsx)(A,{name:`command`,className:`h-3.5 w-3.5 text-muted-foreground`})}};return(0,X.jsxs)(`div`,{ref:j,className:`absolute z-[100] min-w-0 w-full max-w-[450px] max-h-64 bg-background border-2 border-border/60 rounded-xl shadow-none bottom-full mb-2 left-0 flex flex-col`,style:M===void 0?a:{...a,maxHeight:M},children:[(0,X.jsx)(ue,{preventOverscroll:!0,outerClassName:`flex-1 min-h-0`,className:`px-0 pb-2`,children:S?(0,X.jsx)(`div`,{className:`flex items-center justify-center py-4`,children:(0,X.jsx)(A,{name:`refresh`,className:`h-4 w-4 animate-spin text-muted-foreground`})}):(0,X.jsxs)(`div`,{children:[b.map((e,n)=>{let r=e.isBuiltIn,i=e.isOpenChamber;return(0,X.jsxs)(`div`,{ref:e=>{le.current[n]=e},className:k(`flex gap-2 px-3 py-2 cursor-pointer rounded-lg`,u?`items-center`:`items-start`,n===T&&`bg-interactive-selection`),onMouseDown:e=>e.preventDefault(),onPointerDown:e=>{e.pointerType===`touch`&&(P.current={x:e.clientX,y:e.clientY},F.current=!1)},onPointerMove:e=>{if(e.pointerType!==`touch`||!P.current)return;let t=e.clientX-P.current.x,n=e.clientY-P.current.y;Math.hypot(t,n)>6&&(F.current=!0)},onPointerUp:n=>{if(n.pointerType!==`touch`)return;let r=F.current;P.current=null,F.current=!1,!r&&(n.preventDefault(),n.stopPropagation(),N.current=!0,t(e,xe(e,u)))},onPointerCancel:()=>{P.current=null,F.current=!1},onClick:()=>{if(N.current){N.current=!1;return}t(e,xe(e,u))},onMouseMove:()=>{O.current=!1,E(n)},children:[(0,X.jsx)(`div`,{className:k(!u&&`mt-0.5`),children:L(e)}),(0,X.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsxs)(`span`,{className:`typography-ui-label font-medium`,children:[`/`,e.name]}),e.isSkill?(0,X.jsx)(`span`,{className:Ee,children:l(`chat.commandAutocomplete.badge.skill`)}):(0,X.jsx)(`span`,{className:Ee,children:l(`chat.commandAutocomplete.badge.command`)}),i?(0,X.jsx)(`span`,{className:ke,children:`OpenChamber`}):r?(0,X.jsx)(`span`,{className:ke,children:l(`chat.commandAutocomplete.badge.system`)}):e.scope?(0,X.jsx)(`span`,{className:e.scope===`project`?Oe:De,children:e.scope}):null,e.agent&&(0,X.jsx)(`span`,{className:ke,children:e.agent})]}),e.description&&!u&&(0,X.jsx)(`div`,{className:`typography-meta text-muted-foreground mt-0.5 truncate`,children:e.description})]})]},e.id)}),b.length===0&&(0,X.jsx)(`div`,{className:`px-3 py-2 typography-ui-label text-muted-foreground`,children:l(`chat.commandAutocomplete.empty`)})]})}),!u&&(0,X.jsx)(`div`,{className:`px-3 pt-1 pb-1.5 border-t typography-meta text-muted-foreground`,children:l(`chat.autocomplete.keyboardHint`)})]})});Me.displayName=`CommandAutocomplete`;function Ne(e){return(e.description||e.content).replace(/\s+/g,` `).trim().slice(0,120)}var Pe=I.forwardRef((e,t)=>{let n=(0,H.c)(63),{searchQuery:r,onSnippetSelect:a,onClose:o,style:s}=e,{t:c}=ee(),l=I.useRef(null),u=i(Fe),d=ve(l,u),[f,p]=I.useState(0),m=I.useRef(0),h;n[0]===Symbol.for(`react.memo_cache_sentinel`)?(h=[],n[0]=h):h=n[0];let[g,_]=I.useState(h),v;n[1]===Symbol.for(`react.memo_cache_sentinel`)?(v=[],n[1]=v):v=n[1];let y=I.useRef(v),b=N(Ie),x=N(Le),S=N(Re),C=N(ze),te=i(Be),ne=i(Ve),re,ae;n[2]===x?(re=n[3],ae=n[4]):(re=()=>{x()},ae=[x],n[2]=x,n[3]=re,n[4]=ae),I.useEffect(re,ae);let oe,se;n[5]!==r||n[6]!==b?(oe=()=>{let e=r.trim();if(!e.length){let e=[...b].sort(He);_(e),p(+!!e.length);return}let t=ie(b,e,Ue);t.sort(We);let n=t.map(Ge);_(n),p(+!!n.length)},se=[r,b],n[5]=r,n[6]=b,n[7]=oe,n[8]=se):(oe=n[7],se=n[8]),I.useEffect(oe,se);let w,T;n[9]===f?(w=n[10],T=n[11]):(w=()=>{m.current=f,y.current[f]?.scrollIntoView({block:`nearest`})},T=[f],n[9]=f,n[10]=w,n[11]=T),I.useEffect(w,T);let ce,E;n[12]===o?(ce=n[13],E=n[14]):(E=()=>{let e=e=>{let t=e.target;t&&l.current&&!l.current.contains(t)&&o()};return document.addEventListener(`pointerdown`,e,!0),()=>document.removeEventListener(`pointerdown`,e,!0)},ce=[o],n[12]=o,n[13]=ce,n[14]=E),I.useEffect(E,ce);let D;n[15]!==a||n[16]!==r?(D=e=>{let t=r.trim(),n=e.aliases.includes(t)?t:e.name;a(e,n)},n[15]=a,n[16]=r,n[17]=D):D=n[17];let O=D,le;n[18]!==o||n[19]!==C||n[20]!==te||n[21]!==ne||n[22]!==S||n[23]!==b?(le=()=>{let e=new Set(b.map(Ke)),t=`new-snippet`,n=1;for(;e.has(t);)t=`new-snippet-${n++}`;S({name:t,scope:`global`}),C(t),ne(`snippets`),te(!0),o()},n[18]=o,n[19]=C,n[20]=te,n[21]=ne,n[22]=S,n[23]=b,n[24]=le):le=n[24];let j=le,M,P;n[25]!==O||n[26]!==g||n[27]!==o||n[28]!==j?(M=()=>({handleKeyDown:e=>{if(e===`Escape`){o();return}let t=g.length+1;if(e===`ArrowDown`){p(e=>(e+1)%t);return}if(e===`ArrowUp`){p(e=>(e-1+t)%t);return}if(e===`Enter`||e===`Tab`){if(m.current===0){j();return}let e=g[m.current-1];e&&O(e)}}}),P=[O,g,o,j],n[25]=O,n[26]=g,n[27]=o,n[28]=j,n[29]=M,n[30]=P):(M=n[29],P=n[30]),I.useImperativeHandle(t,M,P);let F;n[31]!==d||n[32]!==s?(F=d===void 0?s:{...s,maxHeight:d},n[31]=d,n[32]=s,n[33]=F):F=n[33];let L;n[34]===Symbol.for(`react.memo_cache_sentinel`)?(L=e=>{y.current[0]=e},n[34]=L):L=n[34];let R=f===0&&`bg-interactive-selection`,z;n[35]===R?z=n[36]:(z=k(`flex items-center gap-2 px-3 py-1.5 cursor-pointer rounded-lg typography-ui-label`,R),n[35]=R,n[36]=z);let de,B;n[37]===Symbol.for(`react.memo_cache_sentinel`)?(de=()=>p(0),B=(0,X.jsx)(A,{name:`add`,className:`h-3.5 w-3.5 text-muted-foreground`}),n[37]=de,n[38]=B):(de=n[37],B=n[38]);let V;n[39]===c?V=n[40]:(V=c(`chat.snippetAutocomplete.action.addNew`),n[39]=c,n[40]=V);let fe;n[41]===V?fe=n[42]:(fe=(0,X.jsx)(`span`,{className:`font-medium text-foreground`,children:V}),n[41]=V,n[42]=fe);let pe;n[43]!==j||n[44]!==z||n[45]!==fe?(pe=(0,X.jsxs)(`div`,{ref:L,className:z,onClick:j,onMouseMove:de,children:[B,fe]}),n[43]=j,n[44]=z,n[45]=fe,n[46]=pe):pe=n[46];let me;n[47]!==O||n[48]!==g||n[49]!==u||n[50]!==f||n[51]!==c?(me=g.length?g.map((e,t)=>(0,X.jsx)(`div`,{ref:e=>{y.current[t+1]=e},className:k(`flex gap-2 px-3 py-1.5 cursor-pointer rounded-lg typography-ui-label`,u?`items-center`:`items-start`,t+1===f&&`bg-interactive-selection`),onClick:()=>O(e),onMouseMove:()=>p(t+1),children:(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsxs)(`span`,{className:`font-semibold truncate`,children:[`#`,e.name]}),(0,X.jsx)(`span`,{className:`text-[10px] leading-none uppercase font-bold tracking-tight px-1.5 py-1 rounded border flex-shrink-0 bg-[var(--surface-muted)] text-muted-foreground border-[var(--interactive-border)]/60`,children:c(`snippets.source.${e.source}`)})]}),!u&&(0,X.jsx)(`div`,{className:`typography-meta text-muted-foreground mt-0.5 truncate`,children:Ne(e)})]})},`${e.source}:${e.filePath}`)):(0,X.jsx)(`div`,{className:`px-3 py-2 typography-ui-label text-muted-foreground`,children:c(`chat.snippetAutocomplete.empty`)}),n[47]=O,n[48]=g,n[49]=u,n[50]=f,n[51]=c,n[52]=me):me=n[52];let U;n[53]!==pe||n[54]!==me?(U=(0,X.jsxs)(ue,{preventOverscroll:!0,outerClassName:`flex-1 min-h-0`,className:`px-0 pb-2`,children:[pe,me]}),n[53]=pe,n[54]=me,n[55]=U):U=n[55];let W;n[56]!==u||n[57]!==c?(W=!u&&(0,X.jsx)(`div`,{className:`px-3 pt-1 pb-1.5 border-t typography-meta text-muted-foreground`,children:c(`chat.snippetAutocomplete.footer`)}),n[56]=u,n[57]=c,n[58]=W):W=n[58];let G;return n[59]!==F||n[60]!==U||n[61]!==W?(G=(0,X.jsxs)(`div`,{ref:l,className:`absolute z-[100] min-w-0 w-full max-w-[450px] max-h-60 bg-background border-2 border-border/60 rounded-xl shadow-none bottom-full mb-2 left-0 flex flex-col`,style:F,children:[U,W]}),n[59]=F,n[60]=U,n[61]=W,n[62]=G):G=n[62],G});Pe.displayName=`SnippetAutocomplete`;function Fe(e){return e.isMobile}function Ie(e){return e.snippets}function Le(e){return e.loadSnippets}function Re(e){return e.setSnippetDraft}function ze(e){return e.setSelectedSnippet}function Be(e){return e.setSettingsDialogOpen}function Ve(e){return e.setSettingsPage}function He(e,t){return e.source===`project`&&t.source!==`project`?-1:e.source!==`project`&&t.source===`project`?1:e.name.localeCompare(t.name)}function Ue(e){return[e.name,...e.aliases]}function We(e,t){return e.score===t.score?e.item.source===`project`&&t.item.source!==`project`?-1:e.item.source!==`project`&&t.item.source===`project`?1:e.item.name.localeCompare(t.item.name):e.score-t.score}function Ge(e){return e.item}function Ke(e){return e.name}var qe=2,Je=e=>!!e&&typeof e==`object`&&!Array.isArray(e),Ye=e=>{let t=e?.trim().replace(/\\/g,`/`);return t?t.length>1?t.replace(/\/+$/,``):t:null},Xe=e=>Je(e)&&Array.isArray(e.all)&&e.all.every(e=>typeof e==`string`)&&typeof e.current==`string`&&Je(e.branches),Ze=(e,t)=>JSON.stringify([e,t]),Qe=e=>`version`in e&&e.version===qe&&Je(e.entries),$e=e=>{if(!e)return null;try{let t=JSON.parse(e);return Je(t)?t.version===qe&&Je(t.entries)?{version:qe,entries:t.entries}:t:null}catch{return null}},et=(e,t)=>{try{e.setItem(`oc.gitBranchCache`,JSON.stringify(t))}catch{}},tt=(e,t,n)=>{let r=Ye(e);if(!r||!t)return null;let i;try{i=n.getItem(`oc.gitBranchCache`)}catch{return null}let a=$e(i);if(!a)return null;if(Qe(a))return Xe(a.entries[Ze(t,r)])?a.entries[Ze(t,r)]:null;let o={};for(let[e,n]of Object.entries(a)){let r=Ye(e);r&&Xe(n)&&(o[Ze(t,r)]=n)}return et(n,{version:qe,entries:o}),o[Ze(t,r)]??null},nt=(e,t,n,r)=>{let i=Ye(e);if(!i||!t||!Xe(n))return;let a=null;try{a=r.getItem(`oc.gitBranchCache`)}catch{return}let o=$e(a);et(r,{version:qe,entries:{...o&&Qe(o)?o.entries:{},[Ze(t,i)]:n}})},rt=3e4,it=Ye,at=(e,t=n())=>c.git.branches(it(e),t),ot=(e,t=n())=>c.git.remotes(it(e),t),st=async(e,t,n)=>{n.throwIfAborted();let r=d()?.git,i=t?.getGitBranches?await t.getGitBranches(e,{signal:n}):r?await r.getGitBranches(e,{signal:n}):await y(e,{signal:n});return n.throwIfAborted(),i},ct=async(e,t,n)=>{n.throwIfAborted();let r=d()?.git,i=t?.getRemotes?await t.getRemotes(e,{signal:n}):r?await r.getRemotes(e,{signal:n}):await _(e,{signal:n});return n.throwIfAborted(),i},lt=(e,t,i=n(),a=r())=>{let o=it(e),s=t;return{queryKey:at(o,i),queryFn:async({signal:e})=>{if(!o)throw Error(`Git branches require a directory`);let t=await st(o,s,e);return nt(o,i,t,a),t},staleTime:rt,gcTime:1/0,initialData:()=>tt(o,i,a)??void 0,initialDataUpdatedAt:0}},ut=(e,t,r=n())=>{let i=it(e),a=t;return{queryKey:ot(i,r),queryFn:({signal:e})=>{if(!i)throw Error(`Git remotes require a directory`);return ct(i,a,e)},staleTime:rt,gcTime:1/0}},dt=(e,r,i)=>{let a=(0,H.c)(9),o=i===void 0||i,s=I.useSyncExternalStore(t,n,n),c,l,u;a[0]!==e||a[1]!==r||a[2]!==s?(c=it(e),u=S,l=lt(c,r,s),a[0]=e,a[1]=r,a[2]=s,a[3]=c,a[4]=l,a[5]=u):(c=a[3],l=a[4],u=a[5]);let d=o&&!!c,f;return a[6]!==l||a[7]!==d?(f={...l,enabled:d},a[6]=l,a[7]=d,a[8]=f):f=a[8],u(f)},ft=(e,r,i)=>{let a=(0,H.c)(9),o=i===void 0||i,s=I.useSyncExternalStore(t,n,n),c,l,u;a[0]!==e||a[1]!==r||a[2]!==s?(c=it(e),u=S,l=ut(c,r,s),a[0]=e,a[1]=r,a[2]=s,a[3]=c,a[4]=l,a[5]=u):(c=a[3],l=a[4],u=a[5]);let d=o&&!!c,f;return a[6]!==l||a[7]!==d?(f={...l,enabled:d},a[6]=l,a[7]=d,a[8]=f):f=a[8],u(f)},pt=(e,t,r=u,i=n())=>r.fetchQuery(lt(e,t,i)),mt=(e,t,r=u,i=n())=>r.fetchQuery({...lt(e,t,i),staleTime:0}),ht=e=>e instanceof Error?e.name===`AbortError`||e.name===`CancelledError`||e.name===`Error`&&e.message===`CancelledError`:!1,gt=1e4,_t=6e4,vt=5e3,yt=3e4,bt=6e4,xt=25,St=40,Ct=2,wt=15e3,Tt=500,Et=30,Dt=20971520,Ot=new Map,kt=new Map,At=new Map,jt=new Map,Mt=new Map,Nt=(e,t)=>`${t}:${e}`,Pt=e=>kt.get(e)??0,Ft=e=>{let t=Pt(e)+1;return kt.set(e,t),t},It=e=>{let t=(At.get(e)??0)+1;return At.set(e,t),t},Lt=e=>{let t=Ot.get(e);if(t)return t;let n=new Set;return Ot.set(e,n),n},Q=()=>({isGitRepo:null,status:null,branches:null,branchesTransportIdentity:null,log:null,identity:null,diffCache:new Map,indexRevision:0,lastRepoCheckAt:0,lastStatusFetch:0,lastStatusChange:0,lastLogFetch:0,lastBranchesFetch:0,lastIdentityFetch:0,logMaxCount:25,isLoadingStatus:!1,isLoadingLog:!1,isLoadingBranches:!1,isLoadingIdentity:!1}),Rt=(e,t=Et,n=Dt)=>{let r=0;for(let t of e.values())r+=(t.original?.length??0)+(t.modified?.length??0);if(e.size<=t&&r<=n)return e;let i=Array.from(e.entries()).sort((e,t)=>e[1].fetchedAt-t[1].fetchedAt),a=new Map,o=0;for(let e=i.length-1;e>=0;e--){let[r,s]=i[e],c=(s.original?.length??0)+(s.modified?.length??0);if(a.size>=t)break;o+c>n&&a.size>0||(a.set(r,s),o+=c)}return a},zt=(e,t)=>{if(!e&&!t)return!1;if(!e||!t)return!0;let n=new Set([...Object.keys(e),...Object.keys(t)]);for(let r of n){let n=e[r],i=t[r];if(!(!n&&!i)&&(!n||!i||n.insertions!==i.insertions||n.deletions!==i.deletions))return!0}return!1},Bt=(e,t)=>!e&&!t?!1:!e||!t||e.remote!==t.remote||e.branch!==t.branch||e.ahead!==t.ahead||e.behind!==t.behind,Vt=(e,t)=>{if(!e&&!t)return!1;if(!e||!t)return!0;let n=e.files??[],r=t.files??[];if(n.length!==r.length||e.ahead!==t.ahead||e.behind!==t.behind||e.current!==t.current||e.tracking!==t.tracking||e.isClean!==t.isClean||t.upstreamComparison!==void 0&&Bt(e.upstreamComparison,t.upstreamComparison))return!0;let i=new Set(n.map(e=>`${e.path}:${e.index}:${e.working_dir}`));for(let e of r)if(!i.has(`${e.path}:${e.index}:${e.working_dir}`))return!0;return!!(t.diffStats!==void 0&&zt(e.diffStats,t.diffStats))},Ht=(e,t)=>{let n=new Set;if(!t)return n;let r=e?.files??[],i=t.files??[],a=new Map(r.map(e=>[e.path,e])),o=new Map(i.map(e=>[e.path,e])),s=new Set([...a.keys(),...o.keys()]);for(let e of s){let t=a.get(e),r=o.get(e);if(!t||!r){n.add(e);continue}if(t.index!==r.index||t.working_dir!==r.working_dir){n.add(e);continue}}if(t.diffStats!==void 0){let r=e?.diffStats??{},i=t.diffStats??{},a=new Set([...Object.keys(r),...Object.keys(i)]);for(let e of a){let t=r[e],a=i[e];if(!t||!a){n.add(e);continue}(t.insertions!==a.insertions||t.deletions!==a.deletions)&&n.add(e)}}return n},Ut=(e,t)=>{if(!e&&!t)return!1;if(!e||!t)return!0;let n=e.files??[],r=t.files??[],i=e=>{let t=e?.trim()??``;return t===`?`?``:t},a=new Map(n.map(e=>[e.path,i(e.index)])),o=new Map(r.map(e=>[e.path,i(e.index)])),s=new Set([...a.keys(),...o.keys()]);for(let e of s)if((a.get(e)??``)!==(o.get(e)??``))return!0;return!1},Wt=e=>!e||e.trim().length===0,Gt=e=>(e||``).trim()===`U`,Kt=e=>{let t=(e.index||``).trim(),n=(e.working_dir||``).trim();if(Gt(t)||Gt(n))return e;let r=t===`?`||n===`?`?`A`:t||n||` `;return{...e,index:r,working_dir:` `}},qt=e=>{let t=(e.index||``).trim(),n=(e.working_dir||``).trim();if(Gt(t)||Gt(n))return e;let r=n||(t===`A`||t===`?`?`?`:t)||` `;return{...e,index:` `,working_dir:r}},Jt=e=>Wt(e.index)&&Wt(e.working_dir),$=f()(m((e,t)=>({directories:new Map,activeDirectory:null,setActiveDirectory:n=>{let{activeDirectory:r,directories:i}=t();if(r!==n)if(r&&Ft(r),n&&Ft(n),n&&!i.has(n)){let t=new Map(i);t.set(n,Q()),e({activeDirectory:n,directories:t})}else e({activeDirectory:n})},getDirectoryState:e=>t().directories.get(e)??null,fetchStatus:async(n,r,i={})=>{let a=i.mode??`full`,o=Nt(n,a),s=jt.get(o)??(a===`light`?jt.get(Nt(n,`full`)):void 0);if(s)return s;let c=(async()=>{let{silent:a=!1}=i,{directories:o}=t(),s=o.get(n);if(s||=Q(),!a){let r=new Map(t().directories),i=r.get(n)??Q();r.set(n,{...i,isLoadingStatus:!0}),e({directories:r})}let c=!1;try{let a=Date.now(),o=s.isGitRepo!==!0||a-(s.lastRepoCheckAt||0)>_t,l=s.isGitRepo===!0;if(o&&(l=await r.checkIsGitRepository(n)),!l){let r=new Map(t().directories),i=r.get(n)??s;return r.set(n,{...i,isGitRepo:!1,status:null,isLoadingStatus:!1,lastRepoCheckAt:a,lastStatusFetch:a}),e({directories:r}),!1}let u=await r.getGitStatus(n,i.mode?{mode:i.mode}:void 0);if(Vt(s.status,u)){c=!0;let r=new Map(t().directories),i=r.get(n)??Q(),s=Ht(i.status,u),l=Ut(i.status,u),d=new Set((i.status?.files??[]).map(e=>e.path)),f=new Set((u.files??[]).map(e=>e.path)),p=new Map(i.diffCache);for(let e of d)f.has(e)||p.delete(e);for(let e of s)p.delete(e);let m=s.size>0;m&&Ft(n);let h={...u,diffStats:u.diffStats===void 0&&i.status?.diffStats!==void 0?i.status.diffStats:u.diffStats,upstreamComparison:u.upstreamComparison===void 0?i.status?.upstreamComparison:u.upstreamComparison};r.set(n,{...i,isGitRepo:!0,status:h,diffCache:p,indexRevision:l?i.indexRevision+1:i.indexRevision,lastRepoCheckAt:o?a:i.lastRepoCheckAt,lastStatusFetch:Date.now(),lastStatusChange:m?Date.now():i.lastStatusChange}),e({directories:r})}else{let r=new Map(t().directories),i=r.get(n)??Q();r.set(n,{...i,isGitRepo:!0,lastRepoCheckAt:o?a:i.lastRepoCheckAt,lastStatusFetch:Date.now(),lastStatusChange:i.lastStatusChange}),e({directories:r})}}catch(e){console.error(`Failed to fetch git status:`,e)}finally{if(!a){let r=new Map(t().directories),i=r.get(n)??Q();r.set(n,{...i,isLoadingStatus:!1}),e({directories:r})}}return c})();jt.set(o,c);try{return await c}finally{jt.get(o)===c&&jt.delete(o)}},moveStatusPathsOptimistically:(n,r,i)=>{let a=new Set(r.map(e=>e.trim()).filter(Boolean));if(a.size===0)return null;let{directories:o}=t(),s=o.get(n),c=s?.status??null;if(!s||!c)return c;let l=!1,u=[];for(let e of c.files){if(!a.has(e.path)){u.push(e);continue}let t=i===`stage`?Kt(e):qt(e);t!==e&&(l=!0),Jt(t)?l=!0:u.push(t)}if(!l)return c;let d=new Map(o);return d.set(n,{...s,status:{...c,files:u,isClean:u.length===0},indexRevision:s.indexRevision+1,lastStatusChange:Date.now()}),e({directories:d}),c},restoreStatus:(n,r)=>{let{directories:i}=t(),a=i.get(n);if(!a)return;let o=new Map(i);o.set(n,{...a,status:r,indexRevision:a.indexRevision+1,lastStatusChange:Date.now()}),e({directories:o})},bumpIndexRevision:n=>{let{directories:r}=t(),i=r.get(n);if(!i)return;let a=new Map(r);a.set(n,{...i,indexRevision:i.indexRevision+1}),e({directories:a})},fetchBranches:async(r,i,a={})=>{let o=n(),s=It(r);{let n=new Map(t().directories),i=n.get(r)??Q();n.set(r,{...i,isLoadingBranches:!0}),e({directories:n})}try{let c=a.force?await mt(r,i,void 0,o):await pt(r,i,void 0,o);if(s!==At.get(r)||o!==n())return;let l=new Map(t().directories),u=l.get(r)??Q();l.set(r,{...u,branches:c,branchesTransportIdentity:o,isLoadingBranches:!1,lastBranchesFetch:Date.now()}),e({directories:l})}catch(i){if(ht(i)||console.error(`Failed to fetch git branches:`,i),s!==At.get(r)||o!==n())return;let a=new Map(t().directories),c=a.get(r)??Q();a.set(r,{...c,isLoadingBranches:!1}),e({directories:a})}},fetchLog:async(n,r,i)=>{let{directories:a}=t(),o=a.get(n),s=i??o?.logMaxCount??25;{let r=new Map(t().directories),i=r.get(n)??Q();r.set(n,{...i,isLoadingLog:!0}),e({directories:r})}try{let i=await r.getGitLog(n,{maxCount:s}),a=new Map(t().directories),o=a.get(n)??Q();a.set(n,{...o,log:i,isLoadingLog:!1,lastLogFetch:Date.now(),logMaxCount:s}),e({directories:a})}catch(r){console.error(`Failed to fetch git log:`,r);let i=new Map(t().directories),a=i.get(n)??Q();i.set(n,{...a,isLoadingLog:!1}),e({directories:i})}},fetchIdentity:async(n,r)=>{{let r=new Map(t().directories),i=r.get(n)??Q();r.set(n,{...i,isLoadingIdentity:!0}),e({directories:r})}try{let i=await r.getCurrentGitIdentity(n),a=new Map(t().directories),o=a.get(n)??Q();a.set(n,{...o,identity:i,isLoadingIdentity:!1,lastIdentityFetch:Date.now()}),e({directories:a})}catch(r){console.error(`Failed to fetch git identity:`,r);let i=new Map(t().directories),a=i.get(n)??Q();i.set(n,{...a,isLoadingIdentity:!1}),e({directories:i})}},fetchAll:async(n,r,i={})=>{let{directories:a}=t(),o=a.get(n);if(!o){o=Q();let t=new Map(a);t.set(n,o),e({directories:t})}let{force:s=!1,silentIfCached:c=!1}=i,l=Date.now();await t().fetchStatus(n,r,{silent:c&&!!o?.status});let u=t().directories.get(n);if(!u?.isGitRepo)return;await t().fetchBranches(n,r,{force:s});let d=l-(u.lastLogFetch||0);(s||d>gt||!u.log)&&await t().fetchLog(n,r),await t().fetchIdentity(n,r)},getDiff:(e,n)=>t().directories.get(e)?.diffCache.get(n)??null,setDiff:(n,r,i)=>{let a=new Map(t().directories),o=a.get(n)??Q(),s=new Map(o.diffCache);s.set(r,{...i,fetchedAt:Date.now()});let c=Rt(s);a.set(n,{...o,diffCache:c}),e({directories:a})},clearDiffCache:n=>{Ft(n);let r=new Map(t().directories),i=r.get(n);i&&(r.set(n,{...i,diffCache:new Map}),e({directories:r}))},fetchAllDiffs:async(e,n)=>{let r=t().directories.get(e);if(!r?.status?.files||r.status.files.length===0)return;let i=r.status.files.map(e=>e.path).slice(0,xt);await t().prefetchDiffs(e,n,i,{maxFiles:xt})},prefetchDiffs:async(n,r,i,a={})=>{let o=t().directories.get(n);if(!o?.status?.files||o.status.files.length===0||i.length===0)return;let{maxFiles:s=St}=a,c=new Set(o.status.files.map(e=>e.path)),l=o.status.diffStats,u=Lt(n),d=[],f=new Set;for(let e of i){if(!e||f.has(e)||(f.add(e),!c.has(e))||o.diffCache.has(e)||u.has(e))continue;let t=l?.[e];t&&t.insertions+t.deletions>Tt||d.push(e)}let p=d.slice(0,Math.max(1,s));if(p.length===0)return;let m=Pt(n);if(typeof document<`u`&&document.hidden)return;p.forEach(e=>u.add(e));let h=0,g=[],_=()=>{let e=h;return h+=1,e<p.length?p[e]:null},v=async e=>{let t=r.getGitFileDiff(n,{path:e}),i=new Promise((e,t)=>{setTimeout(()=>t(Error(`Timed out after ${wt}ms`)),wt)}),a=await Promise.race([t,i]);return{path:e,diff:{original:a.original??``,modified:a.modified??``,isBinary:a.isBinary}}},y=async()=>{for(;;){if(m!==Pt(n))return;let e=_();if(!e)return;try{g.push(await v(e))}catch{}finally{u.delete(e)}}},b=Math.min(Ct,p.length);if(await Promise.allSettled(Array.from({length:b},()=>y())),p.forEach(e=>u.delete(e)),m!==Pt(n))return;let x=new Map(t().directories),S=x.get(n);if(!S)return;let C=new Map(S.diffCache),ee=Date.now();g.forEach(e=>{!e.diff.isBinary&&e.diff.original===``&&e.diff.modified===``||C.set(e.path,{...e.diff,fetchedAt:ee})});let te=Rt(C);x.set(n,{...S,diffCache:te}),e({directories:x})},setLogMaxCount:(n,r)=>{let i=new Map(t().directories),a=i.get(n)??Q();i.set(n,{...a,logMaxCount:r}),e({directories:i})},ensureStatus:async(e,n)=>{let r=t().directories.get(e),i=Date.now();r?.status&&i-r.lastStatusFetch<vt||await t().fetchStatus(e,n,{silent:!!r?.status})},ensureAll:(e,n)=>{let r=Mt.get(e);if(r)return r;let i=(async()=>{let r=t().directories.get(e),i=Date.now();(!r?.status||r.status.diffStats===void 0||i-(r?.lastStatusFetch??0)>=vt)&&await t().fetchStatus(e,n,{silent:!!r?.status});let a=t().directories.get(e);if(!a?.isGitRepo)return;let o=[];(!a.branches||i-a.lastBranchesFetch>=yt)&&o.push(t().fetchBranches(e,n)),(!a.log||i-a.lastLogFetch>=gt)&&o.push(t().fetchLog(e,n)),(!a.identity||i-a.lastIdentityFetch>=bt)&&o.push(t().fetchIdentity(e,n)),o.length>0&&await Promise.all(o)})();return Mt.set(e,i),i.finally(()=>{Mt.get(e)===i&&Mt.delete(e)}),i},refresh:async(e,n={})=>{let{activeDirectory:r}=t();r&&await t().fetchAll(r,e,n)}}),{name:`git-store`})),Yt=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.status??null:null,t[0]=e,t[1]=n),$(n)},Xt=e=>{let r=(0,H.c)(3),i=I.useSyncExternalStore(t,n,n),a;return r[0]!==e||r[1]!==i?(a=t=>{if(!e)return null;let n=t.directories.get(e);return n?.branchesTransportIdentity===i?n.branches:null},r[0]=e,r[1]=i,r[2]=a):a=r[2],$(a)},Zt=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.log??null:null,t[0]=e,t[1]=n),$(n)},Qt=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.isGitRepo??null:null,t[0]=e,t[1]=n),$(n)},$t=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.status?.current?.trim()??null:null,t[0]=e,t[1]=n),$(n)},en={current:new Map},tn=()=>$(sn),nn=e=>{let t=(0,H.c)(3),n;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=new Map,t[0]=n):n=t[0];let r=I.useRef(n),i;return t[1]===e?i=t[2]:(i=t=>{let n=r.current,i=n.size===e.length;if(i)for(let r of e){let e=t.directories.get(r),a=n.get(r);if(!a||(e?.isGitRepo??null)!==a.isGitRepo||(e?.status?.current??null)!==a.branch){i=!1;break}}if(i)return n;let a=new Map;for(let n of e){let e=t.directories.get(n);a.set(n,{isGitRepo:e?.isGitRepo??null,branch:e?.status?.current??null})}return r.current=a,a},t[1]=e,t[2]=i),$(i)},rn=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.isLoadingStatus??!1:!1,t[0]=e,t[1]=n),$(n)},an=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.isLoadingLog??!1:!1,t[0]=e,t[1]=n),$(n)},on=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.isLoadingBranches??!1:!1,t[0]=e,t[1]=n),$(n)};function sn(e){let t=en.current,n=t.size===e.directories.size;if(n){for(let[r,i]of e.directories)if(t.get(r)!==(i.status?.current??null)){n=!1;break}}if(n)return t;let r=new Map;for(let[t,n]of e.directories)r.set(t,n.status?.current??null);return en.current=r,r}var cn=e=>{let t=String(e||``).trim().replace(/^remotes\//,``);if(!t)return null;let n=t.indexOf(`/`);return n<=0||n>=t.length-1?null:{remote:t.slice(0,n),branch:t.slice(n+1)}},ln=e=>String(e||``).trim().replace(/^refs\/heads\//,``).replace(/^heads\//,``).replace(/^remotes\//,``),un=e=>e.branchName?ln(e.branchName):e.mode===`existing`?ln(e.existingBranch||e.preferredName||``):ln(e.preferredName||``),dn=async e=>{let t=await P(e);try{let n=cn((await j(e)).branches?.[t]?.tracking||null);if(n?.remote)return n.remote}catch{}try{let t=cn((await M(e)).tracking);if(t?.remote)return t.remote}catch{}return null},fn=async(e,t)=>{let n=await dn(e),r=ln(t);return!n||!r?null:{setUpstream:!0,upstreamRemote:n,upstreamBranch:r}},pn=async(e,t,n)=>{let r=un(t),i=n?.resolvedRootTrackingRemote,a=i===void 0?await fn(e,r):i&&ln(r)?{setUpstream:!0,upstreamRemote:i,upstreamBranch:ln(r)}:null;return a?{...t,setUpstream:t.setUpstream??a.setUpstream,upstreamRemote:t.upstreamRemote||a.upstreamRemote,upstreamBranch:t.upstreamBranch||a.upstreamBranch}:t},mn=async(e,t,n)=>{let r=await pn(e.path,t,n);return F(e,r)},hn=`oc:lastWorktreeSourceBranch`,gn=({mode:e,sourceBranch:t,linkedPr:n,selectedBranch:r})=>e===`existing-branch`?r||null:n?null:t||null,_n=({branches:e,savedSourceBranch:t,rootBranch:n})=>t&&e.includes(t)&&t?{sourceBranch:t,shouldClearSavedSourceBranch:!1}:{sourceBranch:n&&e.includes(n)?n:e.includes(`main`)?`main`:e.includes(`master`)?`master`:e[0]??``,shouldClearSavedSourceBranch:!!t},vn=(e,t,n)=>{if(!e)return e;let r=t.length>0&&!/\s$/.test(t)&&!/^\s/.test(e)&&!/[([{]$/.test(t),i=n.length>0&&!/\s$/.test(e)&&!/^\s/.test(n)&&!/^[\])}.,;:!?]/.test(n);return`${r?` `:``}${e}${i?` `:``}`},yn=(e,t,n)=>{let r=vn(e,t,n);return`${t.length===0&&!/^\s/.test(r)?` `:``}${r}${n.length===0&&!/\s$/.test(r)?` `:``}`},bn=(e,t,n,r)=>{let i=e.slice(0,t),a=e.slice(n),o=yn(r,i,a),s=Math.max(0,o.indexOf(r)),c=i.length+s;return{text:`${i}${o}${a}`,caret:i.length+o.length,start:c,end:c+r.length}},xn=(e,t)=>{let n=e=>`${e.kind}:${e.value}:${e.range.start}:${e.range.end}`;return new Set(e.map(n)).has(n(t))?[...e]:[...e,t]},Sn=(e,t)=>t<e.length&&e[t]===` `?t+1:t;export{ve as A,dt as C,we as D,Me as E,pe as M,fe as N,Se as O,mt as S,Pe as T,Zt as _,hn as a,$ as b,mn as c,tn as d,$t as f,rn as g,an as h,yn as i,me as j,Z as k,dn as l,on as m,xn as n,_n as o,Xt as p,bn as r,gn as s,Sn as t,pn as u,nn as v,ft as w,Qt as x,Yt as y};
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{A as t,E as n,b as r,t as i,y as a}from"./useUIStore-NfqK-HA7.js";import{$t as o,D as s,d as c,k as l,u,xn as d}from"./persistence-vZ7H8WKh.js";import{a as f,i as p,r as m}from"./vendor-zustand-B4dlGEM2.js";import{nt as h,rt as g}from"./vendor-base-ui-CnHfUmDN.js";import{B as _,Ct as v,M as y,Mt as b}from"./platform-CTaznShj.js";import{n as x}from"./vendor-react-DLPElpoQ.js";import{s as S}from"./vendor-tanstack-react-query-D7pys_c9.js";import{n as C}from"./vendor-reactuses-core-DDoDDyM9.js";import{n as ee}from"./clipboard-DhOMUCwT.js";import{Co as te,_ as ne,b as re,ct as ie,en as ae,hr as oe,ia as se,l as w,ot as T,so as ce,st as E,un as D,wo as O}from"./useMobileNavigationStore-BNnnW08z.js";import{c as le,t as k}from"./utils-C2P0wcWO.js";import{n as A}from"./Icon-D-X70irR.js";import{g as j,v as M}from"./gitApi-BktvSPdR.js";import{A as ue,M as N,p as P,s as F}from"./projectMeta-Wxow1DQz.js";var I=e(g(),1),L=e=>{if(!e)return``;let t=e.replace(/\\/g,`/`),n=t.startsWith(`//`),r=t.replace(/\/+/g,`/`);n&&!r.startsWith(`//`)&&(r=`/${r}`);let i=r===`/`,a=/^[A-Za-z]:\/$/.test(r);return!i&&!a&&(r=r.replace(/\/+$/,``)),r},R=e=>/^[A-Za-z]:\//.test(e)?e.toLowerCase():e,z=(e,t)=>{let n=L(t),r=L(e);if(!n||!r)return!1;let i=R(n),a=R(r);return a===i||a.startsWith(`${i}/`)},de=e=>{if(!e||typeof e!=`object`)return{};let t=e,n={};for(let[e,r]of Object.entries(t)){let t=L(e);if(!t||!r||typeof r!=`object`)continue;let i=r,a=Array.isArray(i.openPaths)?Array.from(new Set(i.openPaths.filter(e=>typeof e==`string`).map(e=>L(e)).filter(e=>z(e,t)))):[],o=Array.isArray(i.expandedPaths)?Array.from(new Set(i.expandedPaths.filter(e=>typeof e==`string`).map(e=>L(e)).filter(e=>z(e,t)))):[],s=typeof i.selectedPath==`string`?L(i.selectedPath):null,c=s&&z(s,t)?s:a[0]??null,l=typeof i.touchedAt==`number`&&Number.isFinite(i.touchedAt)?i.touchedAt:Date.now(),u=n[t];if(u){let e=Array.from(new Set([...u.openPaths,...a])),r=Array.from(new Set([...u.expandedPaths,...o]));n[t]={openPaths:e,selectedPath:u.selectedPath??c??e[0]??null,expandedPaths:r,touchedAt:Math.max(u.touchedAt,l)};continue}n[t]={openPaths:a,selectedPath:c,expandedPaths:o,touchedAt:l}}return n},B=(e,t)=>{let n=Object.entries(e);if(n.length<=t)return e;n.sort((e,t)=>(t[1]?.touchedAt??0)-(e[1]?.touchedAt??0));let r={};for(let[e,i]of n.slice(0,t))r[e]=i;return r},V=e=>e?{...e,touchedAt:Date.now()}:{openPaths:[],selectedPath:null,expandedPaths:[],touchedAt:Date.now()},fe=f()(m(p((e,t)=>({byRoot:{},addOpenPath:(t,n,r)=>{let i=L((t||``).trim()),a=L((n||``).trim());!i||!a||!r?.allowOutsideRoot&&!z(a,i)||e(e=>{let t=e.byRoot[i],n=V(t),r=n.openPaths.includes(a),o=r?n.openPaths:[...n.openPaths,a],s=n.selectedPath??a;return t&&r&&t.selectedPath===s?e:{byRoot:B({...e.byRoot,[i]:{...n,openPaths:o,selectedPath:s}},20)}})},removeOpenPath:(t,n)=>{let r=L((t||``).trim()),i=L((n||``).trim());!r||!i||e(e=>{let t=e.byRoot[r];if(!t)return e;let n=R(i),a=e=>R(e)===n,o=t.selectedPath?a(t.selectedPath):!1;if(!t.openPaths.some(a)&&!o)return e;let s=t.openPaths.filter(e=>!a(e)),c=o?s[0]??null:t.selectedPath;return{byRoot:B({...e.byRoot,[r]:{...t,openPaths:s,selectedPath:c,touchedAt:Date.now()}},20)}})},removeOpenPathsByPrefix:(t,n)=>{let r=L((t||``).trim()),i=L((n||``).trim());!r||!i||e(e=>{let t=e.byRoot[r];if(!t)return e;let n=R(i),a=n.endsWith(`/`)?n:`${n}/`,o=e=>{let t=R(e);return t===n||t.startsWith(a)},s=t.openPaths.filter(e=>!o(e));if(s.length===t.openPaths.length)return e;let c=t.selectedPath&&o(t.selectedPath)?s[0]??null:t.selectedPath;return{byRoot:B({...e.byRoot,[r]:{...t,openPaths:s,selectedPath:c,touchedAt:Date.now()}},20)}})},removeExpandedPathsByPrefix:(t,n)=>{let r=L((t||``).trim()),i=L((n||``).trim());!r||!i||e(e=>{let t=e.byRoot[r];if(!t)return e;let n=R(i),a=n.endsWith(`/`)?n:`${n}/`,o=t.expandedPaths.filter(e=>{let t=R(e);return t!==n&&!t.startsWith(a)});return o.length===t.expandedPaths.length?e:{byRoot:B({...e.byRoot,[r]:{...t,expandedPaths:o,touchedAt:Date.now()}},20)}})},setSelectedPath:(t,n,r)=>{let i=L((t||``).trim()),a=n?L(n.trim()):null;!i||a&&!r?.allowOutsideRoot&&!z(a,i)||e(e=>{let t=e.byRoot[i],n=V(t),r=a&&!n.openPaths.includes(a)?[...n.openPaths,a]:n.openPaths;return t&&t.selectedPath===a&&r===t.openPaths?e:{byRoot:B({...e.byRoot,[i]:{...n,openPaths:r,selectedPath:a}},20)}})},ensureSelectedPath:e=>{let n=L((e||``).trim());if(!n)return;let r=t().byRoot[n];if(!r||r.selectedPath)return;let i=r.openPaths[0]??null;i&&t().setSelectedPath(n,i)},toggleExpandedPath:(t,n)=>{let r=L((t||``).trim()),i=L((n||``).trim());!r||!i||!z(i,r)||e(e=>{let t=e.byRoot[r],n=V(t),a=n.expandedPaths.includes(i)?n.expandedPaths.filter(e=>e!==i):[...n.expandedPaths,i];return t&&t.expandedPaths===a&&t.selectedPath===n.selectedPath&&t.openPaths===n.openPaths?e:{byRoot:B({...e.byRoot,[r]:{...n,expandedPaths:a}},20)}})},expandPath:(t,n)=>{let r=L((t||``).trim()),i=L((n||``).trim());!r||!i||!z(i,r)||e(e=>{let t=e.byRoot[r],n=V(t);return n.expandedPaths.includes(i)&&t?e:{byRoot:B({...e.byRoot,[r]:{...n,expandedPaths:[...n.expandedPaths,i]}},20)}})},expandPaths:(t,n)=>{let r=L((t||``).trim());if(!r||!n||n.length===0)return;let i=n.map(e=>L((e||``).trim())).filter(e=>e&&z(e,r));i.length!==0&&e(e=>{let t=e.byRoot[r],n=V(t),a=new Set(n.expandedPaths),o=i.filter(e=>!a.has(e));return o.length===0?e:{byRoot:B({...e.byRoot,[r]:{...n,expandedPaths:[...n.expandedPaths,...o]}},20)}})}}),{name:`files-view-tabs-store`,version:2,storage:a(),migrate:e=>{if(!e||typeof e!=`object`)return{byRoot:{}};let t=e.byRoot;return{byRoot:de(t)}},partialize:e=>({byRoot:de(e.byRoot)})}),{name:`files-view-tabs-store`})),H=x(),pe=(e,t)=>{let n=(0,H.c)(4),r=t===void 0?200:t,[i,a]=I.useState(e),o,s;return n[0]!==r||n[1]!==e?(o=()=>{let t=window.setTimeout(()=>{a(e)},r);return()=>{window.clearTimeout(t)}},s=[e,r],n[0]=r,n[1]=e,n[2]=o,n[3]=s):(o=n[2],s=n[3]),I.useEffect(o,s),i},me=()=>{let e=(0,H.c)(17),t=w(U),n=D(),r;e[0]===t?r=e[1]:(r=e=>t?e.getAttachment(t):void 0,e[0]=t,e[1]=r);let i=re(r),a=w(W),o=w(G),s=O(K),c=O(he),l=v(ge);if(t){let r;e[2]===i?r=e[3]:(r=ne(i),e[2]=i,e[3]=r);let o=r;if(o)return o;let s;e[4]!==t||e[5]!==a?(s=a.get(t),e[4]=t,e[5]=a,e[6]=s):s=e[6];let c=s;if(c?.path)return c.path;let l;if(e[7]!==t||e[8]!==n){let r;e[10]===t?r=e[11]:(r=e=>e.id===t,e[10]=t,e[11]=r),l=n.find(r),e[7]=t,e[8]=n,e[9]=l}else l=e[9];let u=l;if(u?.directory)return u.directory}if(o?.open&&(o.bootstrapPendingDirectory||o.directoryOverride))return(o.bootstrapPendingDirectory||o.directoryOverride)??void 0;if(s){let t;if(e[12]!==s||e[13]!==c){let n;e[15]===s?n=e[16]:(n=e=>e.id===s,e[15]=s,e[16]=n),t=c.find(n),e[12]=s,e[13]=c,e[14]=t}else t=e[14];let n=t;if(n?.path)return n.path}return l??void 0};function U(e){return e.currentSessionId}function W(e){return e.worktreeMetadata}function G(e){return e.newSessionDraft}function K(e){return e.activeProjectId}function he(e){return e.projects}function ge(e){return e.currentDirectory}var _e=.4,q=8,J=e=>{let t=e.gap??q,n=Math.max(0,e.popupBottom-e.boundaryTop-t),r=e.viewportHeight*_e,i=Math.floor(Math.min(n,r));return n>=120?Math.min(n,Math.max(120,i)):i},Y=(e,t=0)=>{let n=e.closest(`main`);if(!n)return null;let r=(e.closest(`.mobile-chat-screen__content`)?.parentElement??n.parentElement?.closest(`main`)??n).querySelector(`:scope > .oc-mobile-detail-navigation`)?.getBoundingClientRect().bottom,i=n.getBoundingClientRect().top;return Math.max(r===void 0?i:Math.max(r,i),t)},ve=(e,t)=>{let n=(0,H.c)(3),[r,i]=I.useState(void 0),a;return n[0]!==e||n[1]!==t?(a=()=>{if(!t)return;let n=()=>{let t=e.current;if(!t)return;let n=window.visualViewport,r=Y(t,n?.offsetTop??0);if(r===null)return;let a=n?.height??window.innerHeight,o=J({popupBottom:t.getBoundingClientRect().bottom,boundaryTop:r,viewportHeight:a});i(e=>e===o?e:o)};return n(),window.addEventListener(`resize`,n),window.addEventListener(`oc:keyboard-settled`,n),window.visualViewport?.addEventListener(`resize`,n),window.visualViewport?.addEventListener(`scroll`,n),()=>{window.removeEventListener(`resize`,n),window.removeEventListener(`oc:keyboard-settled`,n),window.visualViewport?.removeEventListener(`resize`,n),window.visualViewport?.removeEventListener(`scroll`,n)}},n[0]=e,n[1]=t,n[2]=a):a=n[2],I.useLayoutEffect(a),t?r:void 0},ye=()=>{let e=null,t=!1,n=!1;return{pointerDown:(n,r)=>{e={x:n,y:r},t=!1},pointerMove:(n,r)=>{e&&Math.hypot(n-e.x,r-e.y)>6&&(t=!0)},pointerCancel:()=>{e=null,t=!1},pointerUp:r=>{if(!e)return!1;let i=!t;return e=null,t=!1,i?(n=!0,r(),!0):(n=!0,!1)},click:e=>n?(n=!1,!1):(e(),!0)}},X=h(),Z=I.forwardRef(({searchQuery:e,onFileSelect:t,onAgentSelect:n,onSessionSelect:r,onClose:a,style:o},c)=>{let{t:u}=ee(),d=me()??``,f=w(e=>e.currentSessionId),p=oe(e=>e.activeSessions),m=O(e=>e.activeProjectId),h=O(e=>e.projects),g=I.useMemo(()=>h.find(e=>e.id===m)?.path??null,[m,h]),_=I.useMemo(()=>{let e=g||d;return e?e.replace(/\\/g,`/`).replace(/\/+$/,``):null},[g,d]),v=fe(e=>_?e.byRoot[_]:void 0),y=se(e=>e.getVisibleAgents),x=b(e=>e.searchFiles),S=pe(e,180),te=l(),ne=s(),[re,ie]=I.useState([]),[ae,ce]=I.useState([]),[D,j]=I.useState(!1),[M,N]=I.useState(0),P=I.useRef(0),[F,L]=I.useState(360),[R,z]=I.useState({}),[de,B]=I.useState({}),V=I.useRef([]),H=I.useRef([]),U=I.useRef([]),W=I.useRef(null),G=I.useRef(null);G.current||=ye();let K=i(e=>e.isMobile),he=ve(W,K),ge=(e??``).trim(),_e=I.useMemo(()=>{if(!_||!v)return[];let e=[v.selectedPath,...v.openPaths.slice().reverse()].filter(e=>typeof e==`string`&&e.length>0),t=new Set,n=ge.toLowerCase();return e.filter(e=>{if(t.has(e))return!1;t.add(e);let r=e.startsWith(`${_}/`)?e.slice(_.length+1):e;return!n||r.toLowerCase().includes(n)}).slice(0,6).map(e=>{let t=e.replace(/\\/g,`/`),n=t.split(`/`).filter(Boolean).pop()||t;return{name:n,path:t,relativePath:t.startsWith(`${_}/`)?t.slice(_.length+1):t,extension:n.includes(`.`)?n.split(`.`).pop()?.toLowerCase():void 0}})},[ge,_,v]),q=I.useMemo(()=>ge.length>0?ae:ae.slice(0,2),[ae,ge.length]),J=I.useMemo(()=>r?T({sessions:p,currentSessionId:f,searchQuery:ge}):[],[p,f,ge,r]),Y=_e,Z=re;I.useEffect(()=>{let e=e=>{let t=e.target;!t||!W.current||W.current.contains(t)||a()};return document.addEventListener(`pointerdown`,e,!0),()=>{document.removeEventListener(`pointerdown`,e,!0)}},[a]),I.useEffect(()=>{if(!d){ie([]);return}let e=(S??``).trim().replace(/^\.\//,``).replace(/^\/+/,``).toLowerCase();if(!e){ie([]);return}let t=!1;j(!0);let n={includeHidden:te,respectGitignore:!ne};return Promise.all([x(d,e,80,{...n,type:`file`}),x(d,e,40,{...n,type:`directory`})]).then(([n,r])=>{if(t)return;let i=new Set(_e.map(e=>e.path));ie(E({files:n,directories:r,query:e,excludePaths:i,limit:20}))}).catch(()=>{t||ie([])}).finally(()=>{t||j(!1)}),()=>{t=!0}},[d,S,_e,x,te,ne]),I.useEffect(()=>{let t=y(),n=(e??``).trim().toLowerCase(),r=t.filter(e=>e.mode&&e.mode!==`primary`).filter(e=>!n||`${e.name} ${e.description??``}`.toLowerCase().includes(n)).map(e=>({name:e.name,description:e.description,mode:e.mode})).sort((e,t)=>e.name.localeCompare(t.name));ce(r)},[y,e]),I.useEffect(()=>{N(0),z({}),B({})},[Z,Y.length,q.length,J.length]),I.useEffect(()=>{P.current=M},[M]),I.useEffect(()=>{V.current[M]?.scrollIntoView({block:`nearest`})},[M]),I.useEffect(()=>{let e=null,t=()=>{e!==null&&cancelAnimationFrame(e),e=requestAnimationFrame(()=>{let e={},t={};H.current.forEach((n,r)=>{if(!n)return;let i=U.current[r]?.offsetWidth??n.scrollWidth,a=Math.max(0,i-n.clientWidth),o=a>8;if(e[r]=o,o){let e=Math.max(.6,a/110);t[r]=e}}),z(e),B(t)})};return t(),window.addEventListener(`resize`,t),()=>{e!==null&&cancelAnimationFrame(e),window.removeEventListener(`resize`,t)}},[Z,Y]),I.useEffect(()=>{let e=H.current[M];if(!e)return;let t=()=>{let t=e.clientWidth;t>0&&L(t)};if(t(),typeof ResizeObserver>`u`)return;let n=new ResizeObserver(t);return n.observe(e),()=>{n.disconnect()}},[M]);let be=C(e=>{t(e)}),xe=C(e=>{n?.(e)}),Se=C(e=>{r?.(e)}),Ce=(e,t)=>({onMouseDown:e=>e.preventDefault(),onPointerDown:e=>{e.pointerType===`touch`&&G.current?.pointerDown(e.clientX,e.clientY)},onPointerMove:e=>{e.pointerType===`touch`&&G.current?.pointerMove(e.clientX,e.clientY)},onPointerUp:e=>{e.pointerType===`touch`&&(G.current?.pointerUp(t)??!1)&&(e.preventDefault(),e.stopPropagation())},onPointerCancel:()=>G.current?.pointerCancel(),onClick:()=>{G.current?.click(t)},onMouseMove:()=>N(e)});I.useImperativeHandle(c,()=>({handleKeyDown:e=>{if(e===`Escape`){a();return}let t=q.length+J.length+Y.length+Z.length;if(t!==0){if(e===`ArrowDown`){N(e=>(e+1)%t);return}if(e===`ArrowUp`){N(e=>(e-1+t)%t);return}if(e===`Enter`||e===`Tab`){let e=(P.current%t+t)%t;if(e<q.length){let t=q[e];t&&xe(t.name);return}let n=e-q.length;if(n<J.length){let e=J[n];e&&Se(e);return}let r=n-J.length,i=r<Y.length?Y[r]:Z[r-Y.length];i&&be(i)}}}}),[Z,Y,q,J,a,be,xe,Se]);let we=e=>{if(e.isDirectory)return(0,X.jsx)(A,{name:`folder-3-fill`,className:`h-3.5 w-3.5 text-current`});switch(e.extension?.toLowerCase()){case`ts`:case`tsx`:case`js`:case`jsx`:return(0,X.jsx)(A,{name:`code`,className:`h-3.5 w-3.5 text-current`});case`json`:return(0,X.jsx)(A,{name:`code`,className:`h-3.5 w-3.5 text-current`});case`md`:case`mdx`:return(0,X.jsx)(A,{name:`file`,className:`h-3.5 w-3.5 text-current`});case`png`:case`jpg`:case`jpeg`:case`gif`:case`svg`:return(0,X.jsx)(A,{name:`file-image`,className:`h-3.5 w-3.5 text-current`});default:return(0,X.jsx)(A,{name:`file-pdf`,className:`h-3.5 w-3.5 text-current`})}};return(0,X.jsxs)(`div`,{ref:W,className:`absolute z-[100] min-w-0 w-full max-w-[640px] max-h-64 bg-background border-2 border-border/60 rounded-xl shadow-none bottom-full mb-2 left-0 flex flex-col`,style:he===void 0?o:{...o,maxHeight:he},children:[(0,X.jsx)(ue,{preventOverscroll:!0,outerClassName:`flex-1 min-h-0`,className:`px-0`,children:(0,X.jsxs)(`div`,{className:`pb-2`,children:[q.length>0&&(0,X.jsx)(`div`,{className:`px-3 pb-1 pt-2 typography-meta font-medium text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.groups.agents`)}),q.map((e,t)=>(0,X.jsx)(`div`,{ref:e=>{V.current[t]=e},className:k(`flex items-start gap-2 px-3 py-1.5 cursor-pointer typography-ui-label rounded-lg`,K&&`min-h-11`,M===t&&`bg-interactive-selection text-interactive-selection-foreground`),...Ce(t,()=>xe(e.name)),children:(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:`font-semibold truncate`,children:[`@`,e.name]}),e.description&&!K?(0,X.jsx)(`div`,{className:`typography-meta text-muted-foreground truncate`,children:e.description}):null]})},`agent-${e.name}`)),q.length===2&&ge.length===0&&ae.length>2&&(0,X.jsx)(`div`,{className:`px-3 py-1 typography-meta text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.searchMoreAgents`)}),J.length>0&&(0,X.jsx)(`div`,{className:`px-3 pb-1 pt-2 typography-meta font-medium text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.groups.sessions`)}),J.map((e,t)=>{let n=q.length+t;return(0,X.jsxs)(`div`,{ref:e=>{V.current[n]=e},className:k(`flex items-center gap-2 px-3 py-1.5 cursor-pointer typography-ui-label rounded-lg`,K&&`min-h-11`,M===n&&`bg-interactive-selection text-interactive-selection-foreground`),...Ce(n,()=>Se(e)),children:[(0,X.jsx)(A,{name:`chat-thread`,className:`h-4 w-4 flex-shrink-0 text-[var(--primary-base)]`}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,title:e.title||u(`chat.fileMentionAutocomplete.untitledSession`),children:e.title||u(`chat.fileMentionAutocomplete.untitledSession`)}),K?null:(0,X.jsx)(`span`,{className:`flex-shrink-0 typography-meta text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.sessionType`)})]},`session-${e.id}`)}),Y.length>0&&(0,X.jsx)(`div`,{className:`px-3 pb-1 pt-2 typography-meta font-medium text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.groups.recentFiles`)}),Y.map((e,t)=>{let n=q.length+J.length+t,r=e.relativePath||e.name,i=le(r,{maxLength:60}),a=M===n,o=R[n]??!1,s=de[n]??2.6;return(0,X.jsxs)(`div`,{ref:e=>{V.current[n]=e},className:k(`flex items-center gap-2 px-3 py-1.5 cursor-pointer typography-ui-label rounded-lg`,K&&`min-h-11`,a&&`bg-interactive-selection text-interactive-selection-foreground`),...Ce(n,()=>be(e)),children:[we(e),(0,X.jsxs)(`span`,{ref:e=>{H.current[n]=e},className:`relative flex-1 min-w-0 overflow-hidden file-mention-marquee-container`,style:a?{"--file-mention-marquee-width":`${F}px`,"--file-mention-marquee-duration":`${s}s`}:void 0,"aria-label":r,children:[(0,X.jsx)(`span`,{ref:e=>{U.current[n]=e},className:`absolute invisible whitespace-nowrap pointer-events-none`,"aria-hidden":!0,children:r}),o&&a?(0,X.jsx)(`span`,{className:`inline-block whitespace-nowrap file-mention-marquee`,children:r}):(0,X.jsx)(`span`,{className:`block truncate`,children:i})]})]},`recent-${e.path}`)}),Z.length>0&&(0,X.jsx)(`div`,{className:`px-3 pb-1 pt-2 typography-meta font-medium text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.groups.files`)}),Z.map((e,t)=>{let n=q.length+J.length+Y.length+t,r=e.relativePath||e.name,i=le(r,{maxLength:60}),a=M===n,o=R[n]??!1,s=de[n]??2.6;return(0,X.jsxs)(`div`,{ref:e=>{V.current[n]=e},className:k(`flex items-center gap-2 px-3 py-1.5 cursor-pointer typography-ui-label rounded-lg`,K&&`min-h-11`,a&&`bg-interactive-selection text-interactive-selection-foreground`),...Ce(n,()=>be(e)),children:[we(e),(0,X.jsxs)(`span`,{ref:e=>{H.current[n]=e},className:`relative flex-1 min-w-0 overflow-hidden file-mention-marquee-container`,style:a?{"--file-mention-marquee-width":`${F}px`,"--file-mention-marquee-duration":`${s}s`}:void 0,"aria-label":r,children:[(0,X.jsx)(`span`,{ref:e=>{U.current[n]=e},className:`absolute invisible whitespace-nowrap pointer-events-none`,"aria-hidden":!0,children:r}),o&&a?(0,X.jsx)(`span`,{className:`inline-block whitespace-nowrap file-mention-marquee`,children:r}):(0,X.jsx)(`span`,{className:`block truncate`,children:i})]})]},e.path)}),D&&Z.length===0?(0,X.jsx)(`div`,{className:`flex items-center justify-center py-3`,children:(0,X.jsx)(A,{name:`refresh`,className:`h-4 w-4 animate-spin text-muted-foreground`})}):null,!D&&Z.length===0&&Y.length===0&&q.length===0&&J.length===0&&(0,X.jsx)(`div`,{className:`px-3 py-2 typography-ui-label text-muted-foreground`,children:u(`chat.fileMentionAutocomplete.empty`)})]})}),!K&&(0,X.jsx)(`div`,{className:`px-3 pt-1 pb-1.5 border-t typography-meta text-muted-foreground`,children:u(`chat.autocomplete.keyboardHint`)})]})}),be=new Set([`new`,`fork`,`compact`,`undo`,`redo`,`model`,`goal`]),xe=(e,t)=>{if(!t||e.isSkill)return!1;let n=e.name?.trim().toLowerCase();return!!(n&&be.has(n))},Se=(e,t)=>!e||t({name:e}),Ce=` `,we=(e,t)=>{let n=Math.max(0,Math.min(t,e.length)),r=n;for(;r>0&&!/\s/.test(e[r-1]);)--r;return r>=2&&e[r-1]===Ce&&e[r-2]===`/`&&(r-=2),e[r]===`/`?{start:r,end:n}:null},Te=`text-[10px] leading-none uppercase font-bold tracking-tight px-1.5 py-1 rounded border flex-shrink-0`,Ee=k(Te,`bg-[color-mix(in_srgb,var(--primary-base)_12%,transparent)] text-[color-mix(in_srgb,var(--primary-base)_70%,transparent)] border-[color-mix(in_srgb,var(--primary-base)_24%,transparent)]`),De=k(Te,`bg-[color-mix(in_srgb,var(--status-success)_12%,transparent)] text-[color-mix(in_srgb,var(--status-success)_70%,transparent)] border-[color-mix(in_srgb,var(--status-success)_24%,transparent)]`),Oe=k(Te,`bg-[color-mix(in_srgb,var(--status-info)_12%,transparent)] text-[color-mix(in_srgb,var(--status-info)_70%,transparent)] border-[color-mix(in_srgb,var(--status-info)_24%,transparent)]`),ke=k(Te,`bg-[var(--surface-muted)] text-muted-foreground border-[var(--interactive-border)]/60`),Ae=(e,t)=>{let n=t.trim();if(!n)return[...e].sort((e,t)=>e.isBuiltIn===t.isBuiltIn?e.name.localeCompare(t.name):e.isBuiltIn?-1:1);let r=ie(e,n,e=>[e.name,e.description??``]);return r.sort((e,t)=>e.score===t.score?e.item.isBuiltIn===t.item.isBuiltIn?e.item.name.localeCompare(t.item.name):e.item.isBuiltIn?-1:1:e.score-t.score),r.map(e=>e.item)},je=(e,t)=>{let n=!!e.sessionID;return{hasSession:n,canStartSessionCommand:n||e.hasNewDraft,canUseReviewHandoffFlow:n&&!t&&!o()}},Me=I.forwardRef(({searchQuery:e,onCommandSelect:t,onClose:n,directory:r,style:a,commandPolicy:o,commandContext:s},c)=>{let{t:l}=ee(),u=i(e=>e.isMobile),d=w(e=>e.currentSessionId),f=w(e=>!!e.newSessionDraft?.open),p=w(I.useCallback(e=>d?e.getDirectoryForSession(d):void 0,[d])),m=ae(d??``,p??void 0),h=I.useMemo(()=>s??{sessionID:d??null,hasMessages:m.length>0,hasNewDraft:f},[s,d,m.length,f]),{hasSession:g,canStartSessionCommand:_,canUseReviewHandoffFlow:v}=I.useMemo(()=>je(h,u),[h,u]),y=h.hasMessages,[b,x]=I.useState([]),[S,C]=I.useState(!1),ne=te({directory:r}),re=I.useMemo(()=>ne.data??[],[ne.data]),ie=ne.isFetching,oe=ce({directory:r}),se=I.useMemo(()=>oe.data??[],[oe.data]),[T,E]=I.useState(0),D=I.useRef(0),O=I.useRef(!1),le=I.useRef([]),j=I.useRef(null),M=ve(j,u),N=I.useRef(!1),P=I.useRef(null),F=I.useRef(!1);I.useEffect(()=>{let e=e=>{let t=e.target;!t||!j.current||j.current.contains(t)||n()};return document.addEventListener(`pointerdown`,e,!0),()=>{document.removeEventListener(`pointerdown`,e,!0)}},[n]),I.useEffect(()=>{(async()=>{C(ie);try{let t=re.map((e,t)=>({id:`opencode:${e.scope??`global`}:${e.name}:${e.agent??``}:${e.model??``}:${t}`,name:e.name,source:`opencode`,description:e.description,agent:e.agent??void 0,model:e.model??void 0,isBuiltIn:e.isBuiltIn,isSkill:e.source===`skill`,scope:e.scope,reference:e.reference})),n=se.map((e,t)=>({id:`skill:${e.scope}:${e.source??`opencode`}:${e.name}:${t}`,name:e.name,source:`skill`,description:e.description,isSkill:!0,scope:e.scope})),r=[{id:`openchamber:new`,name:`new`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.newDescription`),isBuiltIn:!0},...g&&!y?[{id:`openchamber:init`,name:`init`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.initDescription`),isBuiltIn:!0}]:[],...g?[{id:`openchamber:undo`,name:`undo`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.undoDescription`),isBuiltIn:!0},{id:`openchamber:redo`,name:`redo`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.redoDescription`),isBuiltIn:!0},{id:`openchamber:fork`,name:`fork`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.forkDescription`),isBuiltIn:!0},{id:`openchamber:timeline`,name:`timeline`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.timelineDescription`),isBuiltIn:!0}]:[],{id:`openchamber:model`,name:`model`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.modelDescription`),isBuiltIn:!0},{id:`openchamber:compact`,name:`compact`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.compactDescription`),isBuiltIn:!0},...g?[{id:`openchamber:summary`,name:`summary`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.summaryDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:workspace-review`,name:`workspace-review`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.workspaceReviewDescription`),isOpenChamber:!0}]:[],...v?[{id:`openchamber:handoff-review`,name:`handoff-review`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.handoffReviewDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:plan-feature`,name:`plan-feature`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.featurePlanDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:craft-goal`,name:`craft-goal`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.craftGoalDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:goal`,name:`goal`,source:`openchamber`,description:l(`chat.goal.button.armAria`),isBuiltIn:!0}]:[],..._?[{id:`openchamber:catch-up`,name:`catch-up`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.catchUpDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:debug`,name:`debug`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.debugDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:weigh`,name:`weigh`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.weighDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:explore`,name:`explore`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.exploreDescription`),isOpenChamber:!0}]:[],...t,...n],i=!y,a=r.filter(e=>(i||e.name!==`init`)&&(o?.(e)??!0));x(Ae(a,e))}catch{let t=!y,n=[{id:`openchamber:new`,name:`new`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.newDescription`),isBuiltIn:!0},...g&&!y?[{id:`openchamber:init`,name:`init`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.initDescription`),isBuiltIn:!0}]:[],...g?[{id:`openchamber:undo`,name:`undo`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.undoDescription`),isBuiltIn:!0},{id:`openchamber:redo`,name:`redo`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.redoDescription`),isBuiltIn:!0},{id:`openchamber:fork`,name:`fork`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.forkDescription`),isBuiltIn:!0},{id:`openchamber:timeline`,name:`timeline`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.timelineDescription`),isBuiltIn:!0}]:[],{id:`openchamber:model`,name:`model`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.modelDescription`),isBuiltIn:!0},{id:`openchamber:compact`,name:`compact`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.compactDescription`),isBuiltIn:!0},...g?[{id:`openchamber:summary`,name:`summary`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.summaryDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:workspace-review`,name:`workspace-review`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.workspaceReviewDescription`),isOpenChamber:!0}]:[],...v?[{id:`openchamber:handoff-review`,name:`handoff-review`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.handoffReviewDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:plan-feature`,name:`plan-feature`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.featurePlanDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:craft-goal`,name:`craft-goal`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.craftGoalDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:goal`,name:`goal`,source:`openchamber`,description:l(`chat.goal.button.armAria`),isBuiltIn:!0}]:[],..._?[{id:`openchamber:catch-up`,name:`catch-up`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.catchUpDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:debug`,name:`debug`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.debugDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:weigh`,name:`weigh`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.weighDescription`),isOpenChamber:!0}]:[],..._?[{id:`openchamber:explore`,name:`explore`,source:`openchamber`,description:l(`chat.commandAutocomplete.command.exploreDescription`),isOpenChamber:!0}]:[]].filter(e=>(t||e.name!==`init`)&&(o?.(e)??!0));x(Ae(n,e))}finally{C(!1)}})()},[e,y,g,_,v,re,ie,se,l,o]),I.useEffect(()=>{E(0)},[b]),I.useEffect(()=>{D.current=T},[T]),I.useEffect(()=>{le.current[T]?.scrollIntoView({block:`nearest`})},[T]),I.useImperativeHandle(c,()=>({handleKeyDown:e=>{let r=b.length;if(e===`Escape`){n();return}if(r!==0){if(e===`ArrowDown`){O.current=!0,E(e=>(e+1)%r);return}if(e===`ArrowUp`){O.current=!0,E(e=>(e-1+r)%r);return}if(e===`Enter`||e===`Tab`){let n=(D.current%r+r)%r,i=b[n];i&&t(i,xe(i,e===`Enter`))}}}}),[b,n,t]);let L=e=>{switch(e.name){case`new`:return(0,X.jsx)(A,{name:`add`,className:`h-3.5 w-3.5`});case`init`:return(0,X.jsx)(A,{name:`file`,className:`h-3.5 w-3.5 text-green-500`});case`undo`:return(0,X.jsx)(A,{name:`arrow-go-back`,className:`h-3.5 w-3.5 text-orange-500`});case`redo`:return(0,X.jsx)(A,{name:`arrow-go-forward`,className:`h-3.5 w-3.5 text-orange-500`});case`timeline`:return(0,X.jsx)(A,{name:`time`,className:`h-3.5 w-3.5`});case`compact`:return(0,X.jsx)(A,{name:`scissors`,className:`h-3.5 w-3.5 text-purple-500`});case`goal`:return(0,X.jsx)(A,{name:`target`,className:`h-3.5 w-3.5`});case`review`:return(0,X.jsx)(A,{name:`search-eye`,className:`h-3.5 w-3.5 text-blue-500`});case`test`:case`build`:case`run`:return(0,X.jsx)(A,{name:`terminal-box`,className:`h-3.5 w-3.5 text-cyan-500`});default:return e.isBuiltIn?(0,X.jsx)(A,{name:`flashlight`,className:`h-3.5 w-3.5 text-yellow-500`}):(0,X.jsx)(A,{name:`command`,className:`h-3.5 w-3.5 text-muted-foreground`})}};return(0,X.jsxs)(`div`,{ref:j,className:`absolute z-[100] min-w-0 w-full max-w-[450px] max-h-64 bg-background border-2 border-border/60 rounded-xl shadow-none bottom-full mb-2 left-0 flex flex-col`,style:M===void 0?a:{...a,maxHeight:M},children:[(0,X.jsx)(ue,{preventOverscroll:!0,outerClassName:`flex-1 min-h-0`,className:`px-0 pb-2`,children:S?(0,X.jsx)(`div`,{className:`flex items-center justify-center py-4`,children:(0,X.jsx)(A,{name:`refresh`,className:`h-4 w-4 animate-spin text-muted-foreground`})}):(0,X.jsxs)(`div`,{children:[b.map((e,n)=>{let r=e.isBuiltIn,i=e.isOpenChamber;return(0,X.jsxs)(`div`,{ref:e=>{le.current[n]=e},className:k(`flex gap-2 px-3 py-2 cursor-pointer rounded-lg`,u?`items-center`:`items-start`,n===T&&`bg-interactive-selection`),onMouseDown:e=>e.preventDefault(),onPointerDown:e=>{e.pointerType===`touch`&&(P.current={x:e.clientX,y:e.clientY},F.current=!1)},onPointerMove:e=>{if(e.pointerType!==`touch`||!P.current)return;let t=e.clientX-P.current.x,n=e.clientY-P.current.y;Math.hypot(t,n)>6&&(F.current=!0)},onPointerUp:n=>{if(n.pointerType!==`touch`)return;let r=F.current;P.current=null,F.current=!1,!r&&(n.preventDefault(),n.stopPropagation(),N.current=!0,t(e,xe(e,u)))},onPointerCancel:()=>{P.current=null,F.current=!1},onClick:()=>{if(N.current){N.current=!1;return}t(e,xe(e,u))},onMouseMove:()=>{O.current=!1,E(n)},children:[(0,X.jsx)(`div`,{className:k(!u&&`mt-0.5`),children:L(e)}),(0,X.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsxs)(`span`,{className:`typography-ui-label font-medium`,children:[`/`,e.name]}),e.isSkill?(0,X.jsx)(`span`,{className:Ee,children:l(`chat.commandAutocomplete.badge.skill`)}):(0,X.jsx)(`span`,{className:Ee,children:l(`chat.commandAutocomplete.badge.command`)}),i?(0,X.jsx)(`span`,{className:ke,children:`OpenChamber`}):r?(0,X.jsx)(`span`,{className:ke,children:l(`chat.commandAutocomplete.badge.system`)}):e.scope?(0,X.jsx)(`span`,{className:e.scope===`project`?Oe:De,children:e.scope}):null,e.agent&&(0,X.jsx)(`span`,{className:ke,children:e.agent})]}),e.description&&!u&&(0,X.jsx)(`div`,{className:`typography-meta text-muted-foreground mt-0.5 truncate`,children:e.description})]})]},e.id)}),b.length===0&&(0,X.jsx)(`div`,{className:`px-3 py-2 typography-ui-label text-muted-foreground`,children:l(`chat.commandAutocomplete.empty`)})]})}),!u&&(0,X.jsx)(`div`,{className:`px-3 pt-1 pb-1.5 border-t typography-meta text-muted-foreground`,children:l(`chat.autocomplete.keyboardHint`)})]})});Me.displayName=`CommandAutocomplete`;function Ne(e){return(e.description||e.content).replace(/\s+/g,` `).trim().slice(0,120)}var Pe=I.forwardRef((e,t)=>{let n=(0,H.c)(63),{searchQuery:r,onSnippetSelect:a,onClose:o,style:s}=e,{t:c}=ee(),l=I.useRef(null),u=i(Fe),d=ve(l,u),[f,p]=I.useState(0),m=I.useRef(0),h;n[0]===Symbol.for(`react.memo_cache_sentinel`)?(h=[],n[0]=h):h=n[0];let[g,_]=I.useState(h),v;n[1]===Symbol.for(`react.memo_cache_sentinel`)?(v=[],n[1]=v):v=n[1];let y=I.useRef(v),b=N(Ie),x=N(Le),S=N(Re),C=N(ze),te=i(Be),ne=i(Ve),re,ae;n[2]===x?(re=n[3],ae=n[4]):(re=()=>{x()},ae=[x],n[2]=x,n[3]=re,n[4]=ae),I.useEffect(re,ae);let oe,se;n[5]!==r||n[6]!==b?(oe=()=>{let e=r.trim();if(!e.length){let e=[...b].sort(He);_(e),p(+!!e.length);return}let t=ie(b,e,Ue);t.sort(We);let n=t.map(Ge);_(n),p(+!!n.length)},se=[r,b],n[5]=r,n[6]=b,n[7]=oe,n[8]=se):(oe=n[7],se=n[8]),I.useEffect(oe,se);let w,T;n[9]===f?(w=n[10],T=n[11]):(w=()=>{m.current=f,y.current[f]?.scrollIntoView({block:`nearest`})},T=[f],n[9]=f,n[10]=w,n[11]=T),I.useEffect(w,T);let ce,E;n[12]===o?(ce=n[13],E=n[14]):(E=()=>{let e=e=>{let t=e.target;t&&l.current&&!l.current.contains(t)&&o()};return document.addEventListener(`pointerdown`,e,!0),()=>document.removeEventListener(`pointerdown`,e,!0)},ce=[o],n[12]=o,n[13]=ce,n[14]=E),I.useEffect(E,ce);let D;n[15]!==a||n[16]!==r?(D=e=>{let t=r.trim(),n=e.aliases.includes(t)?t:e.name;a(e,n)},n[15]=a,n[16]=r,n[17]=D):D=n[17];let O=D,le;n[18]!==o||n[19]!==C||n[20]!==te||n[21]!==ne||n[22]!==S||n[23]!==b?(le=()=>{let e=new Set(b.map(Ke)),t=`new-snippet`,n=1;for(;e.has(t);)t=`new-snippet-${n++}`;S({name:t,scope:`global`}),C(t),ne(`snippets`),te(!0),o()},n[18]=o,n[19]=C,n[20]=te,n[21]=ne,n[22]=S,n[23]=b,n[24]=le):le=n[24];let j=le,M,P;n[25]!==O||n[26]!==g||n[27]!==o||n[28]!==j?(M=()=>({handleKeyDown:e=>{if(e===`Escape`){o();return}let t=g.length+1;if(e===`ArrowDown`){p(e=>(e+1)%t);return}if(e===`ArrowUp`){p(e=>(e-1+t)%t);return}if(e===`Enter`||e===`Tab`){if(m.current===0){j();return}let e=g[m.current-1];e&&O(e)}}}),P=[O,g,o,j],n[25]=O,n[26]=g,n[27]=o,n[28]=j,n[29]=M,n[30]=P):(M=n[29],P=n[30]),I.useImperativeHandle(t,M,P);let F;n[31]!==d||n[32]!==s?(F=d===void 0?s:{...s,maxHeight:d},n[31]=d,n[32]=s,n[33]=F):F=n[33];let L;n[34]===Symbol.for(`react.memo_cache_sentinel`)?(L=e=>{y.current[0]=e},n[34]=L):L=n[34];let R=f===0&&`bg-interactive-selection`,z;n[35]===R?z=n[36]:(z=k(`flex items-center gap-2 px-3 py-1.5 cursor-pointer rounded-lg typography-ui-label`,R),n[35]=R,n[36]=z);let de,B;n[37]===Symbol.for(`react.memo_cache_sentinel`)?(de=()=>p(0),B=(0,X.jsx)(A,{name:`add`,className:`h-3.5 w-3.5 text-muted-foreground`}),n[37]=de,n[38]=B):(de=n[37],B=n[38]);let V;n[39]===c?V=n[40]:(V=c(`chat.snippetAutocomplete.action.addNew`),n[39]=c,n[40]=V);let fe;n[41]===V?fe=n[42]:(fe=(0,X.jsx)(`span`,{className:`font-medium text-foreground`,children:V}),n[41]=V,n[42]=fe);let pe;n[43]!==j||n[44]!==z||n[45]!==fe?(pe=(0,X.jsxs)(`div`,{ref:L,className:z,onClick:j,onMouseMove:de,children:[B,fe]}),n[43]=j,n[44]=z,n[45]=fe,n[46]=pe):pe=n[46];let me;n[47]!==O||n[48]!==g||n[49]!==u||n[50]!==f||n[51]!==c?(me=g.length?g.map((e,t)=>(0,X.jsx)(`div`,{ref:e=>{y.current[t+1]=e},className:k(`flex gap-2 px-3 py-1.5 cursor-pointer rounded-lg typography-ui-label`,u?`items-center`:`items-start`,t+1===f&&`bg-interactive-selection`),onClick:()=>O(e),onMouseMove:()=>p(t+1),children:(0,X.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,X.jsxs)(`span`,{className:`font-semibold truncate`,children:[`#`,e.name]}),(0,X.jsx)(`span`,{className:`text-[10px] leading-none uppercase font-bold tracking-tight px-1.5 py-1 rounded border flex-shrink-0 bg-[var(--surface-muted)] text-muted-foreground border-[var(--interactive-border)]/60`,children:c(`snippets.source.${e.source}`)})]}),!u&&(0,X.jsx)(`div`,{className:`typography-meta text-muted-foreground mt-0.5 truncate`,children:Ne(e)})]})},`${e.source}:${e.filePath}`)):(0,X.jsx)(`div`,{className:`px-3 py-2 typography-ui-label text-muted-foreground`,children:c(`chat.snippetAutocomplete.empty`)}),n[47]=O,n[48]=g,n[49]=u,n[50]=f,n[51]=c,n[52]=me):me=n[52];let U;n[53]!==pe||n[54]!==me?(U=(0,X.jsxs)(ue,{preventOverscroll:!0,outerClassName:`flex-1 min-h-0`,className:`px-0 pb-2`,children:[pe,me]}),n[53]=pe,n[54]=me,n[55]=U):U=n[55];let W;n[56]!==u||n[57]!==c?(W=!u&&(0,X.jsx)(`div`,{className:`px-3 pt-1 pb-1.5 border-t typography-meta text-muted-foreground`,children:c(`chat.snippetAutocomplete.footer`)}),n[56]=u,n[57]=c,n[58]=W):W=n[58];let G;return n[59]!==F||n[60]!==U||n[61]!==W?(G=(0,X.jsxs)(`div`,{ref:l,className:`absolute z-[100] min-w-0 w-full max-w-[450px] max-h-60 bg-background border-2 border-border/60 rounded-xl shadow-none bottom-full mb-2 left-0 flex flex-col`,style:F,children:[U,W]}),n[59]=F,n[60]=U,n[61]=W,n[62]=G):G=n[62],G});Pe.displayName=`SnippetAutocomplete`;function Fe(e){return e.isMobile}function Ie(e){return e.snippets}function Le(e){return e.loadSnippets}function Re(e){return e.setSnippetDraft}function ze(e){return e.setSelectedSnippet}function Be(e){return e.setSettingsDialogOpen}function Ve(e){return e.setSettingsPage}function He(e,t){return e.source===`project`&&t.source!==`project`?-1:e.source!==`project`&&t.source===`project`?1:e.name.localeCompare(t.name)}function Ue(e){return[e.name,...e.aliases]}function We(e,t){return e.score===t.score?e.item.source===`project`&&t.item.source!==`project`?-1:e.item.source!==`project`&&t.item.source===`project`?1:e.item.name.localeCompare(t.item.name):e.score-t.score}function Ge(e){return e.item}function Ke(e){return e.name}var qe=2,Je=e=>!!e&&typeof e==`object`&&!Array.isArray(e),Ye=e=>{let t=e?.trim().replace(/\\/g,`/`);return t?t.length>1?t.replace(/\/+$/,``):t:null},Xe=e=>Je(e)&&Array.isArray(e.all)&&e.all.every(e=>typeof e==`string`)&&typeof e.current==`string`&&Je(e.branches),Ze=(e,t)=>JSON.stringify([e,t]),Qe=e=>`version`in e&&e.version===qe&&Je(e.entries),$e=e=>{if(!e)return null;try{let t=JSON.parse(e);return Je(t)?t.version===qe&&Je(t.entries)?{version:qe,entries:t.entries}:t:null}catch{return null}},et=(e,t)=>{try{e.setItem(`oc.gitBranchCache`,JSON.stringify(t))}catch{}},tt=(e,t,n)=>{let r=Ye(e);if(!r||!t)return null;let i;try{i=n.getItem(`oc.gitBranchCache`)}catch{return null}let a=$e(i);if(!a)return null;if(Qe(a))return Xe(a.entries[Ze(t,r)])?a.entries[Ze(t,r)]:null;let o={};for(let[e,n]of Object.entries(a)){let r=Ye(e);r&&Xe(n)&&(o[Ze(t,r)]=n)}return et(n,{version:qe,entries:o}),o[Ze(t,r)]??null},nt=(e,t,n,r)=>{let i=Ye(e);if(!i||!t||!Xe(n))return;let a=null;try{a=r.getItem(`oc.gitBranchCache`)}catch{return}let o=$e(a);et(r,{version:qe,entries:{...o&&Qe(o)?o.entries:{},[Ze(t,i)]:n}})},rt=3e4,it=Ye,at=(e,t=n())=>c.git.branches(it(e),t),ot=(e,t=n())=>c.git.remotes(it(e),t),st=async(e,t,n)=>{n.throwIfAborted();let r=d()?.git,i=t?.getGitBranches?await t.getGitBranches(e,{signal:n}):r?await r.getGitBranches(e,{signal:n}):await y(e,{signal:n});return n.throwIfAborted(),i},ct=async(e,t,n)=>{n.throwIfAborted();let r=d()?.git,i=t?.getRemotes?await t.getRemotes(e,{signal:n}):r?await r.getRemotes(e,{signal:n}):await _(e,{signal:n});return n.throwIfAborted(),i},lt=(e,t,i=n(),a=r())=>{let o=it(e),s=t;return{queryKey:at(o,i),queryFn:async({signal:e})=>{if(!o)throw Error(`Git branches require a directory`);let t=await st(o,s,e);return nt(o,i,t,a),t},staleTime:rt,gcTime:1/0,initialData:()=>tt(o,i,a)??void 0,initialDataUpdatedAt:0}},ut=(e,t,r=n())=>{let i=it(e),a=t;return{queryKey:ot(i,r),queryFn:({signal:e})=>{if(!i)throw Error(`Git remotes require a directory`);return ct(i,a,e)},staleTime:rt,gcTime:1/0}},dt=(e,r,i)=>{let a=(0,H.c)(9),o=i===void 0||i,s=I.useSyncExternalStore(t,n,n),c,l,u;a[0]!==e||a[1]!==r||a[2]!==s?(c=it(e),u=S,l=lt(c,r,s),a[0]=e,a[1]=r,a[2]=s,a[3]=c,a[4]=l,a[5]=u):(c=a[3],l=a[4],u=a[5]);let d=o&&!!c,f;return a[6]!==l||a[7]!==d?(f={...l,enabled:d},a[6]=l,a[7]=d,a[8]=f):f=a[8],u(f)},ft=(e,r,i)=>{let a=(0,H.c)(9),o=i===void 0||i,s=I.useSyncExternalStore(t,n,n),c,l,u;a[0]!==e||a[1]!==r||a[2]!==s?(c=it(e),u=S,l=ut(c,r,s),a[0]=e,a[1]=r,a[2]=s,a[3]=c,a[4]=l,a[5]=u):(c=a[3],l=a[4],u=a[5]);let d=o&&!!c,f;return a[6]!==l||a[7]!==d?(f={...l,enabled:d},a[6]=l,a[7]=d,a[8]=f):f=a[8],u(f)},pt=(e,t,r=u,i=n())=>r.fetchQuery(lt(e,t,i)),mt=(e,t,r=u,i=n())=>r.fetchQuery({...lt(e,t,i),staleTime:0}),ht=e=>e instanceof Error?e.name===`AbortError`||e.name===`CancelledError`||e.name===`Error`&&e.message===`CancelledError`:!1,gt=1e4,_t=6e4,vt=5e3,yt=3e4,bt=6e4,xt=25,St=40,Ct=2,wt=15e3,Tt=500,Et=30,Dt=20971520,Ot=new Map,kt=new Map,At=new Map,jt=new Map,Mt=new Map,Nt=(e,t)=>`${t}:${e}`,Pt=e=>kt.get(e)??0,Ft=e=>{let t=Pt(e)+1;return kt.set(e,t),t},It=e=>{let t=(At.get(e)??0)+1;return At.set(e,t),t},Lt=e=>{let t=Ot.get(e);if(t)return t;let n=new Set;return Ot.set(e,n),n},Q=()=>({isGitRepo:null,status:null,branches:null,branchesTransportIdentity:null,log:null,identity:null,diffCache:new Map,indexRevision:0,lastRepoCheckAt:0,lastStatusFetch:0,lastStatusChange:0,lastLogFetch:0,lastBranchesFetch:0,lastIdentityFetch:0,logMaxCount:25,isLoadingStatus:!1,isLoadingLog:!1,isLoadingBranches:!1,isLoadingIdentity:!1}),Rt=(e,t=Et,n=Dt)=>{let r=0;for(let t of e.values())r+=(t.original?.length??0)+(t.modified?.length??0);if(e.size<=t&&r<=n)return e;let i=Array.from(e.entries()).sort((e,t)=>e[1].fetchedAt-t[1].fetchedAt),a=new Map,o=0;for(let e=i.length-1;e>=0;e--){let[r,s]=i[e],c=(s.original?.length??0)+(s.modified?.length??0);if(a.size>=t)break;o+c>n&&a.size>0||(a.set(r,s),o+=c)}return a},zt=(e,t)=>{if(!e&&!t)return!1;if(!e||!t)return!0;let n=new Set([...Object.keys(e),...Object.keys(t)]);for(let r of n){let n=e[r],i=t[r];if(!(!n&&!i)&&(!n||!i||n.insertions!==i.insertions||n.deletions!==i.deletions))return!0}return!1},Bt=(e,t)=>!e&&!t?!1:!e||!t||e.remote!==t.remote||e.branch!==t.branch||e.ahead!==t.ahead||e.behind!==t.behind,Vt=(e,t)=>{if(!e&&!t)return!1;if(!e||!t)return!0;let n=e.files??[],r=t.files??[];if(n.length!==r.length||e.ahead!==t.ahead||e.behind!==t.behind||e.current!==t.current||e.tracking!==t.tracking||e.isClean!==t.isClean||t.upstreamComparison!==void 0&&Bt(e.upstreamComparison,t.upstreamComparison))return!0;let i=new Set(n.map(e=>`${e.path}:${e.index}:${e.working_dir}`));for(let e of r)if(!i.has(`${e.path}:${e.index}:${e.working_dir}`))return!0;return!!(t.diffStats!==void 0&&zt(e.diffStats,t.diffStats))},Ht=(e,t)=>{let n=new Set;if(!t)return n;let r=e?.files??[],i=t.files??[],a=new Map(r.map(e=>[e.path,e])),o=new Map(i.map(e=>[e.path,e])),s=new Set([...a.keys(),...o.keys()]);for(let e of s){let t=a.get(e),r=o.get(e);if(!t||!r){n.add(e);continue}if(t.index!==r.index||t.working_dir!==r.working_dir){n.add(e);continue}}if(t.diffStats!==void 0){let r=e?.diffStats??{},i=t.diffStats??{},a=new Set([...Object.keys(r),...Object.keys(i)]);for(let e of a){let t=r[e],a=i[e];if(!t||!a){n.add(e);continue}(t.insertions!==a.insertions||t.deletions!==a.deletions)&&n.add(e)}}return n},Ut=(e,t)=>{if(!e&&!t)return!1;if(!e||!t)return!0;let n=e.files??[],r=t.files??[],i=e=>{let t=e?.trim()??``;return t===`?`?``:t},a=new Map(n.map(e=>[e.path,i(e.index)])),o=new Map(r.map(e=>[e.path,i(e.index)])),s=new Set([...a.keys(),...o.keys()]);for(let e of s)if((a.get(e)??``)!==(o.get(e)??``))return!0;return!1},Wt=e=>!e||e.trim().length===0,Gt=e=>(e||``).trim()===`U`,Kt=e=>{let t=(e.index||``).trim(),n=(e.working_dir||``).trim();if(Gt(t)||Gt(n))return e;let r=t===`?`||n===`?`?`A`:t||n||` `;return{...e,index:r,working_dir:` `}},qt=e=>{let t=(e.index||``).trim(),n=(e.working_dir||``).trim();if(Gt(t)||Gt(n))return e;let r=n||(t===`A`||t===`?`?`?`:t)||` `;return{...e,index:` `,working_dir:r}},Jt=e=>Wt(e.index)&&Wt(e.working_dir),$=f()(m((e,t)=>({directories:new Map,activeDirectory:null,setActiveDirectory:n=>{let{activeDirectory:r,directories:i}=t();if(r!==n)if(r&&Ft(r),n&&Ft(n),n&&!i.has(n)){let t=new Map(i);t.set(n,Q()),e({activeDirectory:n,directories:t})}else e({activeDirectory:n})},getDirectoryState:e=>t().directories.get(e)??null,fetchStatus:async(n,r,i={})=>{let a=i.mode??`full`,o=Nt(n,a),s=jt.get(o)??(a===`light`?jt.get(Nt(n,`full`)):void 0);if(s)return s;let c=(async()=>{let{silent:a=!1}=i,{directories:o}=t(),s=o.get(n);if(s||=Q(),!a){let r=new Map(t().directories),i=r.get(n)??Q();r.set(n,{...i,isLoadingStatus:!0}),e({directories:r})}let c=!1;try{let a=Date.now(),o=s.isGitRepo!==!0||a-(s.lastRepoCheckAt||0)>_t,l=s.isGitRepo===!0;if(o&&(l=await r.checkIsGitRepository(n)),!l){let r=new Map(t().directories),i=r.get(n)??s;return r.set(n,{...i,isGitRepo:!1,status:null,isLoadingStatus:!1,lastRepoCheckAt:a,lastStatusFetch:a}),e({directories:r}),!1}let u=await r.getGitStatus(n,i.mode?{mode:i.mode}:void 0);if(Vt(s.status,u)){c=!0;let r=new Map(t().directories),i=r.get(n)??Q(),s=Ht(i.status,u),l=Ut(i.status,u),d=new Set((i.status?.files??[]).map(e=>e.path)),f=new Set((u.files??[]).map(e=>e.path)),p=new Map(i.diffCache);for(let e of d)f.has(e)||p.delete(e);for(let e of s)p.delete(e);let m=s.size>0;m&&Ft(n);let h={...u,diffStats:u.diffStats===void 0&&i.status?.diffStats!==void 0?i.status.diffStats:u.diffStats,upstreamComparison:u.upstreamComparison===void 0?i.status?.upstreamComparison:u.upstreamComparison};r.set(n,{...i,isGitRepo:!0,status:h,diffCache:p,indexRevision:l?i.indexRevision+1:i.indexRevision,lastRepoCheckAt:o?a:i.lastRepoCheckAt,lastStatusFetch:Date.now(),lastStatusChange:m?Date.now():i.lastStatusChange}),e({directories:r})}else{let r=new Map(t().directories),i=r.get(n)??Q();r.set(n,{...i,isGitRepo:!0,lastRepoCheckAt:o?a:i.lastRepoCheckAt,lastStatusFetch:Date.now(),lastStatusChange:i.lastStatusChange}),e({directories:r})}}catch(e){console.error(`Failed to fetch git status:`,e)}finally{if(!a){let r=new Map(t().directories),i=r.get(n)??Q();r.set(n,{...i,isLoadingStatus:!1}),e({directories:r})}}return c})();jt.set(o,c);try{return await c}finally{jt.get(o)===c&&jt.delete(o)}},moveStatusPathsOptimistically:(n,r,i)=>{let a=new Set(r.map(e=>e.trim()).filter(Boolean));if(a.size===0)return null;let{directories:o}=t(),s=o.get(n),c=s?.status??null;if(!s||!c)return c;let l=!1,u=[];for(let e of c.files){if(!a.has(e.path)){u.push(e);continue}let t=i===`stage`?Kt(e):qt(e);t!==e&&(l=!0),Jt(t)?l=!0:u.push(t)}if(!l)return c;let d=new Map(o);return d.set(n,{...s,status:{...c,files:u,isClean:u.length===0},indexRevision:s.indexRevision+1,lastStatusChange:Date.now()}),e({directories:d}),c},restoreStatus:(n,r)=>{let{directories:i}=t(),a=i.get(n);if(!a)return;let o=new Map(i);o.set(n,{...a,status:r,indexRevision:a.indexRevision+1,lastStatusChange:Date.now()}),e({directories:o})},bumpIndexRevision:n=>{let{directories:r}=t(),i=r.get(n);if(!i)return;let a=new Map(r);a.set(n,{...i,indexRevision:i.indexRevision+1}),e({directories:a})},fetchBranches:async(r,i,a={})=>{let o=n(),s=It(r);{let n=new Map(t().directories),i=n.get(r)??Q();n.set(r,{...i,isLoadingBranches:!0}),e({directories:n})}try{let c=a.force?await mt(r,i,void 0,o):await pt(r,i,void 0,o);if(s!==At.get(r)||o!==n())return;let l=new Map(t().directories),u=l.get(r)??Q();l.set(r,{...u,branches:c,branchesTransportIdentity:o,isLoadingBranches:!1,lastBranchesFetch:Date.now()}),e({directories:l})}catch(i){if(ht(i)||console.error(`Failed to fetch git branches:`,i),s!==At.get(r)||o!==n())return;let a=new Map(t().directories),c=a.get(r)??Q();a.set(r,{...c,isLoadingBranches:!1}),e({directories:a})}},fetchLog:async(n,r,i)=>{let{directories:a}=t(),o=a.get(n),s=i??o?.logMaxCount??25;{let r=new Map(t().directories),i=r.get(n)??Q();r.set(n,{...i,isLoadingLog:!0}),e({directories:r})}try{let i=await r.getGitLog(n,{maxCount:s}),a=new Map(t().directories),o=a.get(n)??Q();a.set(n,{...o,log:i,isLoadingLog:!1,lastLogFetch:Date.now(),logMaxCount:s}),e({directories:a})}catch(r){console.error(`Failed to fetch git log:`,r);let i=new Map(t().directories),a=i.get(n)??Q();i.set(n,{...a,isLoadingLog:!1}),e({directories:i})}},fetchIdentity:async(n,r)=>{{let r=new Map(t().directories),i=r.get(n)??Q();r.set(n,{...i,isLoadingIdentity:!0}),e({directories:r})}try{let i=await r.getCurrentGitIdentity(n),a=new Map(t().directories),o=a.get(n)??Q();a.set(n,{...o,identity:i,isLoadingIdentity:!1,lastIdentityFetch:Date.now()}),e({directories:a})}catch(r){console.error(`Failed to fetch git identity:`,r);let i=new Map(t().directories),a=i.get(n)??Q();i.set(n,{...a,isLoadingIdentity:!1}),e({directories:i})}},fetchAll:async(n,r,i={})=>{let{directories:a}=t(),o=a.get(n);if(!o){o=Q();let t=new Map(a);t.set(n,o),e({directories:t})}let{force:s=!1,silentIfCached:c=!1}=i,l=Date.now();await t().fetchStatus(n,r,{silent:c&&!!o?.status});let u=t().directories.get(n);if(!u?.isGitRepo)return;await t().fetchBranches(n,r,{force:s});let d=l-(u.lastLogFetch||0);(s||d>gt||!u.log)&&await t().fetchLog(n,r),await t().fetchIdentity(n,r)},getDiff:(e,n)=>t().directories.get(e)?.diffCache.get(n)??null,setDiff:(n,r,i)=>{let a=new Map(t().directories),o=a.get(n)??Q(),s=new Map(o.diffCache);s.set(r,{...i,fetchedAt:Date.now()});let c=Rt(s);a.set(n,{...o,diffCache:c}),e({directories:a})},clearDiffCache:n=>{Ft(n);let r=new Map(t().directories),i=r.get(n);i&&(r.set(n,{...i,diffCache:new Map}),e({directories:r}))},fetchAllDiffs:async(e,n)=>{let r=t().directories.get(e);if(!r?.status?.files||r.status.files.length===0)return;let i=r.status.files.map(e=>e.path).slice(0,xt);await t().prefetchDiffs(e,n,i,{maxFiles:xt})},prefetchDiffs:async(n,r,i,a={})=>{let o=t().directories.get(n);if(!o?.status?.files||o.status.files.length===0||i.length===0)return;let{maxFiles:s=St}=a,c=new Set(o.status.files.map(e=>e.path)),l=o.status.diffStats,u=Lt(n),d=[],f=new Set;for(let e of i){if(!e||f.has(e)||(f.add(e),!c.has(e))||o.diffCache.has(e)||u.has(e))continue;let t=l?.[e];t&&t.insertions+t.deletions>Tt||d.push(e)}let p=d.slice(0,Math.max(1,s));if(p.length===0)return;let m=Pt(n);if(typeof document<`u`&&document.hidden)return;p.forEach(e=>u.add(e));let h=0,g=[],_=()=>{let e=h;return h+=1,e<p.length?p[e]:null},v=async e=>{let t=r.getGitFileDiff(n,{path:e}),i=new Promise((e,t)=>{setTimeout(()=>t(Error(`Timed out after ${wt}ms`)),wt)}),a=await Promise.race([t,i]);return{path:e,diff:{original:a.original??``,modified:a.modified??``,isBinary:a.isBinary}}},y=async()=>{for(;;){if(m!==Pt(n))return;let e=_();if(!e)return;try{g.push(await v(e))}catch{}finally{u.delete(e)}}},b=Math.min(Ct,p.length);if(await Promise.allSettled(Array.from({length:b},()=>y())),p.forEach(e=>u.delete(e)),m!==Pt(n))return;let x=new Map(t().directories),S=x.get(n);if(!S)return;let C=new Map(S.diffCache),ee=Date.now();g.forEach(e=>{!e.diff.isBinary&&e.diff.original===``&&e.diff.modified===``||C.set(e.path,{...e.diff,fetchedAt:ee})});let te=Rt(C);x.set(n,{...S,diffCache:te}),e({directories:x})},setLogMaxCount:(n,r)=>{let i=new Map(t().directories),a=i.get(n)??Q();i.set(n,{...a,logMaxCount:r}),e({directories:i})},ensureStatus:async(e,n)=>{let r=t().directories.get(e),i=Date.now();r?.status&&i-r.lastStatusFetch<vt||await t().fetchStatus(e,n,{silent:!!r?.status})},ensureAll:(e,n)=>{let r=Mt.get(e);if(r)return r;let i=(async()=>{let r=t().directories.get(e),i=Date.now();(!r?.status||r.status.diffStats===void 0||i-(r?.lastStatusFetch??0)>=vt)&&await t().fetchStatus(e,n,{silent:!!r?.status});let a=t().directories.get(e);if(!a?.isGitRepo)return;let o=[];(!a.branches||i-a.lastBranchesFetch>=yt)&&o.push(t().fetchBranches(e,n)),(!a.log||i-a.lastLogFetch>=gt)&&o.push(t().fetchLog(e,n)),(!a.identity||i-a.lastIdentityFetch>=bt)&&o.push(t().fetchIdentity(e,n)),o.length>0&&await Promise.all(o)})();return Mt.set(e,i),i.finally(()=>{Mt.get(e)===i&&Mt.delete(e)}),i},refresh:async(e,n={})=>{let{activeDirectory:r}=t();r&&await t().fetchAll(r,e,n)}}),{name:`git-store`})),Yt=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.status??null:null,t[0]=e,t[1]=n),$(n)},Xt=e=>{let r=(0,H.c)(3),i=I.useSyncExternalStore(t,n,n),a;return r[0]!==e||r[1]!==i?(a=t=>{if(!e)return null;let n=t.directories.get(e);return n?.branchesTransportIdentity===i?n.branches:null},r[0]=e,r[1]=i,r[2]=a):a=r[2],$(a)},Zt=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.log??null:null,t[0]=e,t[1]=n),$(n)},Qt=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.isGitRepo??null:null,t[0]=e,t[1]=n),$(n)},$t=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.status?.current?.trim()??null:null,t[0]=e,t[1]=n),$(n)},en={current:new Map},tn=()=>$(sn),nn=e=>{let t=(0,H.c)(3),n;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(n=new Map,t[0]=n):n=t[0];let r=I.useRef(n),i;return t[1]===e?i=t[2]:(i=t=>{let n=r.current,i=n.size===e.length;if(i)for(let r of e){let e=t.directories.get(r),a=n.get(r);if(!a||(e?.isGitRepo??null)!==a.isGitRepo||(e?.status?.current??null)!==a.branch){i=!1;break}}if(i)return n;let a=new Map;for(let n of e){let e=t.directories.get(n);a.set(n,{isGitRepo:e?.isGitRepo??null,branch:e?.status?.current??null})}return r.current=a,a},t[1]=e,t[2]=i),$(i)},rn=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.isLoadingStatus??!1:!1,t[0]=e,t[1]=n),$(n)},an=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.isLoadingLog??!1:!1,t[0]=e,t[1]=n),$(n)},on=e=>{let t=(0,H.c)(2),n;return t[0]===e?n=t[1]:(n=t=>e?t.directories.get(e)?.isLoadingBranches??!1:!1,t[0]=e,t[1]=n),$(n)};function sn(e){let t=en.current,n=t.size===e.directories.size;if(n){for(let[r,i]of e.directories)if(t.get(r)!==(i.status?.current??null)){n=!1;break}}if(n)return t;let r=new Map;for(let[t,n]of e.directories)r.set(t,n.status?.current??null);return en.current=r,r}var cn=e=>{let t=String(e||``).trim().replace(/^remotes\//,``);if(!t)return null;let n=t.indexOf(`/`);return n<=0||n>=t.length-1?null:{remote:t.slice(0,n),branch:t.slice(n+1)}},ln=e=>String(e||``).trim().replace(/^refs\/heads\//,``).replace(/^heads\//,``).replace(/^remotes\//,``),un=e=>e.branchName?ln(e.branchName):e.mode===`existing`?ln(e.existingBranch||e.preferredName||``):ln(e.preferredName||``),dn=async e=>{let t=await P(e);try{let n=cn((await j(e)).branches?.[t]?.tracking||null);if(n?.remote)return n.remote}catch{}try{let t=cn((await M(e)).tracking);if(t?.remote)return t.remote}catch{}return null},fn=async(e,t)=>{let n=await dn(e),r=ln(t);return!n||!r?null:{setUpstream:!0,upstreamRemote:n,upstreamBranch:r}},pn=async(e,t,n)=>{let r=un(t),i=n?.resolvedRootTrackingRemote,a=i===void 0?await fn(e,r):i&&ln(r)?{setUpstream:!0,upstreamRemote:i,upstreamBranch:ln(r)}:null;return a?{...t,setUpstream:t.setUpstream??a.setUpstream,upstreamRemote:t.upstreamRemote||a.upstreamRemote,upstreamBranch:t.upstreamBranch||a.upstreamBranch}:t},mn=async(e,t,n)=>{let r=await pn(e.path,t,n);return F(e,r)},hn=`oc:lastWorktreeSourceBranch`,gn=({mode:e,sourceBranch:t,linkedPr:n,selectedBranch:r})=>e===`existing-branch`?r||null:n?null:t||null,_n=({branches:e,savedSourceBranch:t,rootBranch:n})=>t&&e.includes(t)&&t?{sourceBranch:t,shouldClearSavedSourceBranch:!1}:{sourceBranch:n&&e.includes(n)?n:e.includes(`main`)?`main`:e.includes(`master`)?`master`:e[0]??``,shouldClearSavedSourceBranch:!!t},vn=(e,t,n)=>{if(!e)return e;let r=t.length>0&&!/\s$/.test(t)&&!/^\s/.test(e)&&!/[([{]$/.test(t),i=n.length>0&&!/\s$/.test(e)&&!/^\s/.test(n)&&!/^[\])}.,;:!?]/.test(n);return`${r?` `:``}${e}${i?` `:``}`},yn=(e,t,n)=>{let r=vn(e,t,n);return`${t.length===0&&!/^\s/.test(r)?` `:``}${r}${n.length===0&&!/\s$/.test(r)?` `:``}`},bn=(e,t,n,r)=>{let i=e.slice(0,t),a=e.slice(n),o=yn(r,i,a),s=Math.max(0,o.indexOf(r)),c=i.length+s;return{text:`${i}${o}${a}`,caret:i.length+o.length,start:c,end:c+r.length}},xn=(e,t)=>{let n=e=>`${e.kind}:${e.value}:${e.range.start}:${e.range.end}`;return new Set(e.map(n)).has(n(t))?[...e]:[...e,t]},Sn=(e,t)=>t<e.length&&e[t]===` `?t+1:t;export{ve as A,dt as C,we as D,Me as E,pe as M,fe as N,Se as O,mt as S,Pe as T,Zt as _,hn as a,$ as b,mn as c,tn as d,$t as f,rn as g,an as h,yn as i,me as j,Z as k,dn as l,on as m,xn as n,_n as o,Xt as p,bn as r,gn as s,Sn as t,pn as u,nn as v,ft as w,Qt as x,Yt as y};
|