@loicngr/kobo 1.11.28 → 1.11.29
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/CHANGELOG.md +4 -0
- package/dist/server/routes/workspaces.js +16 -6
- package/dist/server/services/comparison-stats-service.js +43 -0
- package/package.json +1 -1
- package/src/client/dist/pwa/assets/{ActivityFeed-LDzg5XPx.js → ActivityFeed-Dm-h5c8M.js} +1 -1
- package/src/client/dist/pwa/assets/{ChangelogPage-CjiWI9Qa.js → ChangelogPage-tLjrU4kh.js} +1 -1
- package/src/client/dist/pwa/assets/{ClosePopup-CK6wvsMy.js → ClosePopup-CekolbY5.js} +1 -1
- package/src/client/dist/pwa/assets/ComparisonPanel-CsdFl1JL.js +2 -0
- package/src/client/dist/pwa/assets/ComparisonPanel-x1iuICgd.css +1 -0
- package/src/client/dist/pwa/assets/{CreatePage-DHBa7ZL5.js → CreatePage-B1iRRP_d.js} +1 -1
- package/src/client/dist/pwa/assets/{DashboardPage-Xev4suQ7.js → DashboardPage-CNTYrE-N.js} +1 -1
- package/src/client/dist/pwa/assets/{DiffViewer-D0BQ5Dip.js → DiffViewer-CxXPJSsu.js} +3 -3
- package/src/client/dist/pwa/assets/{DocumentsPanel-7hMCYUTd.js → DocumentsPanel-Du7qG8uv.js} +1 -1
- package/src/client/dist/pwa/assets/{DrawerToggleButton-BASeszPg.js → DrawerToggleButton-D0i0wUjb.js} +1 -1
- package/src/client/dist/pwa/assets/{GitPanel-D-rwHnFn.js → GitPanel-tuTj7lhu.js} +3 -3
- package/src/client/dist/pwa/assets/{HealthPage-BKXqP1li.js → HealthPage-DL_RBg9X.js} +1 -1
- package/src/client/dist/pwa/assets/{MainLayout-DnPtpWgP.js → MainLayout-CuPokl9k.js} +2 -2
- package/src/client/dist/pwa/assets/{QBtnDropdown-52YHuBbx.js → QBtnDropdown-VaaGdcMX.js} +1 -1
- package/src/client/dist/pwa/assets/{SchedulePanel-C7NK1hIK.js → SchedulePanel-CyWvfNkF.js} +1 -1
- package/src/client/dist/pwa/assets/{SearchPage-Cm8chltA.js → SearchPage-c_MuOKwZ.js} +1 -1
- package/src/client/dist/pwa/assets/{SettingsPage-B4xs1RUl.js → SettingsPage-QkPo7j0B.js} +1 -1
- package/src/client/dist/pwa/assets/{TerminalPanel-CSPk8QtK.js → TerminalPanel-Io_WshA3.js} +1 -1
- package/src/client/dist/pwa/assets/{TouchPan-CpO61wPy.js → TouchPan-DO0Y0lcH.js} +1 -1
- package/src/client/dist/pwa/assets/{WorkspaceAttentionLabels-DZrbJ0vD.js → WorkspaceAttentionLabels-NqQsltOl.js} +1 -1
- package/src/client/dist/pwa/assets/{WorkspacePage-D0-FkRVJ.js → WorkspacePage-Ct8QYOU_.js} +3 -3
- package/src/client/dist/pwa/assets/{build-path-tree-DH4SSsEz.js → build-path-tree-CmeIBsJq.js} +1 -1
- package/src/client/dist/pwa/assets/{de-Bf_OsgDw.js → de-DUTfyzTm.js} +1 -1
- package/src/client/dist/pwa/assets/{documents-CDZqd_g5.js → documents-DuT_pUBs.js} +1 -1
- package/src/client/dist/pwa/assets/{editor.api-CMsYdZTX.js → editor.api-B7h7KULV.js} +1 -1
- package/src/client/dist/pwa/assets/{efforts-Db4w0alg.js → efforts-CFRBNt5s.js} +1 -1
- package/src/client/dist/pwa/assets/{engineFeatures-BjtQR0vB.js → engineFeatures-DmG1z2N2.js} +1 -1
- package/src/client/dist/pwa/assets/{es-1ib0e9jm.js → es-ft4_w4dQ.js} +1 -1
- package/src/client/dist/pwa/assets/{expand-template-DY8ntqUb.js → expand-template-DXzAXadA.js} +1 -1
- package/src/client/dist/pwa/assets/{format-C-9jMgWb.js → format-klpA_BIb.js} +1 -1
- package/src/client/dist/pwa/assets/{fr-nj0BrM3X.js → fr-SGSKyQ_T.js} +1 -1
- package/src/client/dist/pwa/assets/{freemarker2-KxB1BtrL.js → freemarker2-AB32EM-g.js} +1 -1
- package/src/client/dist/pwa/assets/{handlebars-7TByd_Zc.js → handlebars-C87HpXgr.js} +1 -1
- package/src/client/dist/pwa/assets/{html-BoVZ_gre.js → html-fZ2Q-EN9.js} +1 -1
- package/src/client/dist/pwa/assets/{i18n-BubYp85n.js → i18n-jUVcMUna.js} +1 -1
- package/src/client/dist/pwa/assets/{index-Ck1_qrff.js → index-BgV6UXly.js} +3 -3
- package/src/client/dist/pwa/assets/{it-B9MEgvg1.js → it-C5q5LNGX.js} +1 -1
- package/src/client/dist/pwa/assets/{javascript-BLL8vPQy.js → javascript-DaRn-B3h.js} +1 -1
- package/src/client/dist/pwa/assets/{layout-CFuk4mdG.js → layout-DdQC-2Sz.js} +1 -1
- package/src/client/dist/pwa/assets/{liquid-DzcT-R6k.js → liquid-BxIQD86X.js} +1 -1
- package/src/client/dist/pwa/assets/{mdx-Bguo999w.js → mdx-BB8ir9N_.js} +1 -1
- package/src/client/dist/pwa/assets/{monaco-contributions-CM7FH-iZ.js → monaco-contributions-B0YHWDBM.js} +1 -1
- package/src/client/dist/pwa/assets/{monaco.contribution-Dkq0qtWA.js → monaco.contribution-Nxc5lpNj.js} +2 -2
- package/src/client/dist/pwa/assets/{network-auth-C0moem8_.js → network-auth-0EqcSNjT.js} +1 -1
- package/src/client/dist/pwa/assets/{notify-theme-C7mNmzKx.js → notify-theme-CJQIBqdX.js} +1 -1
- package/src/client/dist/pwa/assets/{pending-diff-open-BaQ_SNEF.js → pending-diff-open-BTLtsmQt.js} +1 -1
- package/src/client/dist/pwa/assets/{permissionModes-CJZsT9Fl.js → permissionModes-BR2CNlno.js} +1 -1
- package/src/client/dist/pwa/assets/{project-color-54JZHVy2.js → project-color-CZmTicBX.js} +1 -1
- package/src/client/dist/pwa/assets/{python-D5RQNiPF.js → python-BdCzK6Il.js} +1 -1
- package/src/client/dist/pwa/assets/{razor-CVwoDJol.js → razor-ClnzXrTz.js} +1 -1
- package/src/client/dist/pwa/assets/{render-chat-markdown-NAmPVIQp.js → render-chat-markdown-CzR8e-Uh.js} +1 -1
- package/src/client/dist/pwa/assets/{typescript-qdgwClKe.js → typescript-Dk26pRlO.js} +1 -1
- package/src/client/dist/pwa/assets/{use-onboarding-DbYF8ZX_.js → use-onboarding-BwDLVLlc.js} +1 -1
- package/src/client/dist/pwa/assets/{use-quasar-B4eIgSfZ.js → use-quasar-B2sgdABh.js} +1 -1
- package/src/client/dist/pwa/assets/{xml-DNSfQSlk.js → xml-DdBTQmk2.js} +1 -1
- package/src/client/dist/pwa/assets/{yaml-6gnX2NnP.js → yaml-DTv5uGmK.js} +1 -1
- package/src/client/dist/pwa/index.html +1 -1
- package/src/client/dist/pwa/sw.js +1 -1
- package/src/client/dist/pwa/assets/ComparisonPanel-C0hI2D1O.css +0 -1
- package/src/client/dist/pwa/assets/ComparisonPanel-D6eEciwQ.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var e={"model.tooltip":`Modelo usado por el agente en este workspace`,"reasoning.tooltip":`Nivel de razonamiento usado por el agente en este workspace`,"thinking.label":`Razonamiento`,"thinking.noDetails":`El agente está razonando…`,"common.save":`Guardar`,"common.confirm":`Confirmar`,"common.cancel":`Cancelar`,"common.open":`Abrir`,"common.retry":`Reintentar`,"common.delete":`Eliminar`,"common.close":`Cerrar`,"workspace.deleteTitle":`Eliminar workspace`,"workspace.deleteTypeName":`Escriba {name} para confirmar. Esto elimina el worktree y todo el historial.`,"workspace.deleteFailed":`No se pudo eliminar el workspace.`,"workspace.archiveFailed":`No se pudo archivar el workspace.`,"tasks.updateFailed":`No se pudo actualizar la tarea.`,"dashboard.tooltip":`Panel`,"dashboard.title":`Panel`,"dashboard.count":`{n} workspace | {n} workspaces`,"dashboard.empty":`Ningún workspace activo.`,"dashboard.workspace":`Workspace`,"dashboard.status":`Estado`,"dashboard.attention":`Atención`,"dashboard.pr":`PR`,"dashboard.diff":`Diff`,"dashboard.activity":`Actividad`,"dashboard.prOpen":`abierta`,"reliability.title":`Fiabilidad de los modelos`,"reliability.subtitle":`Cómo terminó realmente cada motor y modelo en este equipo.`,"reliability.empty":`Todavía no hay ninguna sesión finalizada.`,"reliability.loadFailed":`No se pudieron cargar las cifras de fiabilidad.`,"reliability.engine":`Motor`,"reliability.model":`Modelo`,"reliability.sessions":`Sesiones`,"reliability.completed":`Completadas`,"reliability.watchdog":`Watchdog`,"reliability.killed":`Detenidas`,"reliability.errors":`Errores`,"reliability.unknown":`Desconocido`,"reliability.median":`Mediana`,"reliability.durationSeconds":`{s}s`,"reliability.durationMinutes":`{m}min {s}s`,"reliability.durationHours":`{h}h {m}min`,"update.available":`Hay una versión más reciente de Kōbō: {version}`,"update.how":`Cómo actualizar`,"common.dismiss":`Descartar`,"common.details":`Detalles`,"common.ok":`OK`,"whatsNew.title":`Novedades`,"common.loading":`Cargando...`,"common.search":`Buscar...`,"common.refresh":`Actualizar`,"common.copy":`Copiar`,"common.copied":`Copiado al portapapeles`,"common.copyFailed":`Error al copiar`,"common.add":`Añadir`,"folderPicker.title":`Elegir una carpeta`,"folderPicker.parent":`Carpeta superior`,"folderPicker.empty":`Sin subcarpetas`,"folderPicker.select":`Elegir esta carpeta`,"common.start":`Iniciar`,"common.stop":`Detener`,"common.archive":`Archivar`,"common.unarchive":`Desarchivar`,"common.selectWorkspace":`Selecciona un workspace`,"common.noResults":`Sin resultados para "{query}"`,"common.send":`enviar`,"common.newLine":`nueva línea`,"common.history":`historial`,"common.justNow":`ahora mismo`,"common.minutesAgo":`hace {count}m`,"common.hoursAgo":`hace {count}h`,"common.daysAgo":`hace {count}d`,"model.auto":`Auto`,"model.fable51":`Fable 5.1`,"model.mythos5":`Mythos 5 (Glasswing)`,"model.fable51Description":`El modelo más capaz - reemplaza a Fable 5, contexto 1M, adaptive thinking`,"model.mythos5Description":`Fable 5.1 sin clasificadores de seguridad — acceso limitado (Project Glasswing)`,"model.opus":`Opus 4.6`,"model.sonnet":`Sonnet 4.6`,"model.opus5":`Opus 5`,"model.opus48":`Opus 4.8`,"model.opus47Classic":`Opus 4.7 (Classic)`,"model.opus471m":`Opus 4.7 (1M)`,"model.opusClassic":`Opus 4.6 (Classic)`,"model.opus1m":`Opus 4.6 (1M)`,"model.sonnet5":`Sonnet 5`,"model.sonnetClassic":`Sonnet 4.6 (Classic)`,"model.sonnet1m":`Sonnet 4.6 (1M)`,"model.haiku":`Haiku 4.5`,"model.autoDescription":`Claude elige el modelo óptimo`,"model.opus5Description":`Para código agéntico complejo y trabajo empresarial, contexto 1M`,"model.opus48Description":`Opus más capaz — coding agéntico long-horizon, contexto 1M por defecto, esfuerzo high por defecto`,"model.opus47ClassicDescription":`Último Opus, el más capaz`,"model.opus471mDescription":`Último Opus, contexto 1M`,"model.opusClassicDescription":`El más potente`,"model.opus1mDescription":`El más potente, contexto 1M`,"model.sonnet5Description":`La mejor combinación de velocidad e inteligencia, contexto 1M`,"model.sonnetClassicDescription":`Equilibrado`,"model.sonnet1mDescription":`Equilibrado, contexto 1M`,"model.haikuDescription":`El más rápido`,"model.gpt56sol":`GPT-5.6 Sol`,"model.gpt56solDescription":`El modelo de codificación agéntica más avanzado (requiere autenticación ChatGPT)`,"model.gpt56terra":`GPT-5.6 Terra`,"model.gpt56terraDescription":`Modelo de codificación agéntica equilibrado para el día a día (requiere autenticación ChatGPT)`,"model.gpt56luna":`GPT-5.6 Luna`,"model.gpt56lunaDescription":`Modelo de codificación agéntica rápido y económico (requiere autenticación ChatGPT)`,"model.gpt55":`GPT-5.5`,"model.gpt55Description":`Recomendado para código complejo (requiere autenticación ChatGPT)`,"model.gpt54":`GPT-5.4`,"model.gpt54Description":`Alternativa por defecto — razonamiento sólido, compatible con clave API`,"model.gpt54mini":`GPT-5.4 mini`,"model.gpt54miniDescription":`Rápido y eficiente — ideal para tareas reactivas y subagentes`,"model.gpt52":`GPT-5.2`,"model.gpt52Description":`Optimizado para trabajo profesional y agentes de larga duración`,"model.gpt53codex":`GPT-5.3 Codex`,"model.gpt53codexDescription":`Modelo especializado en código para ingeniería de software compleja`,"reasoning.auto":`auto`,"reasoning.minimal":`minimal`,"reasoning.none":`ninguno`,"reasoning.low":`low`,"reasoning.medium":`medium`,"reasoning.high":`high`,"reasoning.xhigh":`xhigh`,"reasoning.max":`max`,"reasoning.autoDescription":`Deja que el motor decida`,"reasoning.minimalDescription":`Razonamiento más rápido y superficial`,"reasoning.noneDescription":`Sin razonamiento adicional`,"reasoning.lowDescription":`Más rápido, menos profundidad`,"reasoning.mediumDescription":`Equilibrado`,"reasoning.highDescription":`Más profundidad`,"reasoning.xhighDescription":`Profundidad extendida, tareas largas`,"reasoning.maxDescription":`Profundidad máxima`,"agentPermissionMode.label":`Modo de permisos`,"agentPermissionMode.plan":`Plan`,"agentPermissionMode.bypass":`Bypass`,"agentPermissionMode.strict":`Aceptar ediciones`,"agentPermissionMode.interactive":`Interactivo`,"agentPermissionMode.tooltip":`Cómo gestiona el agente los permisos de las herramientas. Plan: solo lectura, sin escrituras. Bypass: omitir todas las preguntas. Estricto: auto-aceptar ediciones de archivos, respetar allow/deny para el resto. Interactivo: preguntar al usuario antes de cada herramienta mediante el panel de permisos.`,"agentPermissionMode.autoLoopOverride":`El auto-loop fuerza un modo distinto a Plan — Plan bloquea las herramientas MCP y las ediciones que el bucle necesita. Elige Bypass, Estricto o Interactivo.`,"agentPermissionMode.autoLoopLocked":`Bloqueado en Bypass mientras el auto-loop está activo — cualquier otro modo detendría el bucle en las preguntas de permiso. AskUserQuestion sigue funcionando.`,"workspaceList.title":`Workspaces`,"workspaceList.a11y.groupToggle":`Grupo {group}, {count} workspaces`,"workspaceList.a11y.list":`Workspaces`,"workspaceList.a11y.card":`{name}, {status}`,"workspaceList.needsAttention":`Requiere atención`,"workspaceList.running":`En ejecución`,"workspaceList.idle":`Inactivo`,"workspaceList.archived":`Archivados`,"workspaceList.archivedToast":`«{name}» archivado`,"workspaceList.archivedUndo":`Deshacer`,"workspaceList.unarchiveFailed":`No se pudo desarchivar este workspace`,"workspaceList.noWorkspaces":`Aún no hay workspaces`,"workspaceList.loadFailed":`No se pudieron cargar tus workspaces`,"workspaceList.loadFailedHint":`Es un fallo de conexión, no una cuenta vacía.`,"workspaceList.footer":`{count} workspace | {count} workspaces`,"workspaceList.footerRunning":`{count} en ejecución`,"workspaceList.deleteDialog.title":`¿Eliminar workspace?`,"workspaceList.deleteDialog.deleteLocal":`Eliminar rama local`,"workspaceList.deleteDialog.deleteRemote":`Eliminar rama remota`,"workspaceList.deleteDialog.warning":`Advertencia: esta acción es irreversible en el remoto.`,"workspaceList.deleteArchivedDialog.tooltip":`Eliminar todos los workspaces archivados`,"workspaceList.deleteArchivedDialog.title":`¿Eliminar todos los workspaces archivados?`,"workspaceList.deleteArchivedDialog.message":`Esto eliminará permanentemente los {count} workspaces archivados. Esta acción no se puede deshacer.`,"workspaceList.deleteArchivedDialog.typeCount":`Escribe {count} para confirmar`,"workspacePage.selectWorkspace":`Selecciona un workspace para comenzar`,"workspacePage.commandPalettePlaceholder":`Buscar comandos…`,"workspacePage.commandPaletteEmpty":`No hay comandos coincidentes`,"workspacePage.commandFocusChat":`Enfocar la entrada del chat`,"workspacePage.commandSearchHistory":`Buscar en el historial del workspace`,"workspacePage.commandTogglePanel":`Mostrar u ocultar el panel lateral`,"workspacePage.commandStartAgent":`Iniciar agente`,"workspacePage.commandStopAgent":`Detener agente`,"workspacePage.commandOpenSettings":`Abrir los ajustes`,"workspacePage.commandOpenCreate":`Crear un workspace`,"workspacePage.commandOpenSearch":`Búsqueda global`,"workspacePage.commandOpenHealth":`Página de salud`,"workspacePage.commandOpenChangelog":`Registro de cambios`,"workspacePage.commandGroupWorkspaces":`Ir a un workspace`,"workspacePage.commandPaletteHint":`Paleta de comandos`,"workspacePage.session":`Sesión #{n}`,"workspacePage.newSession":`+ Nueva sesión`,"workspacePage.renameSession":`Renombrar`,"workspacePage.renameSessionTitle":`Renombrar sesión`,"workspacePage.sessionNameLabel":`Nombre de sesión`,"workspacePage.sessionEndedNotice":`Esta sesión ha terminado. Crea una nueva sesión para continuar.`,"workspacePage.renameFailed":`Error al renombrar`,"workspacePage.copySessionId":`Copiar ID de sesión`,"workspacePage.deleteSession":`Eliminar sesión`,"workspacePage.deleteSessionTitle":`¿Eliminar sesión?`,"workspacePage.deleteSessionConfirm":`Esto elimina permanentemente esta sesión y su historial de conversación.`,"workspacePage.deleteSessionFailed":`No se pudo eliminar la sesión`,"workspacePage.noEngineSessionId":`Todavía no hay ID de sesión — el agente aún no ha iniciado esta sesión`,"workspacePage.createSessionFailed":`Error al crear la sesión`,"workspacePage.startFailed":`Error al iniciar`,"workspacePage.stopFailed":`Error al detener`,"workspacePage.interrupt":`Interrumpir`,"workspacePage.interrupted":`Agente interrumpido — esperando tu próximo mensaje`,"workspacePage.lastAgentEvent":`Último evento {when}`,"workspacePage.agentStopping":`Deteniendo…`,"workspacePage.agentNotRunning":`Ningún agente en ejecución — el estado está obsoleto`,"workspacePage.archivedBanner":`Workspace archivado — solo lectura`,"workspacePage.worktreePurgedBanner":`Worktree eliminado — historial conservado, restauración no disponible en esta versión`,"workspacePage.worktreePurgedTooltip":"La carpeta del worktree fue eliminada del disco para recuperar espacio. El historial de mensajes, sesiones y metadatos de la PR siguen consultables aquí, pero el directorio de trabajo ya no existe localmente. Una futura versión de Kōbō podrá reconstruir el worktree desde la PR mergeada — por ahora, recréalo manualmente con `gh pr checkout` o `git worktree add`.","workspacePage.pendingInitialPromptBanner":`Hay un prompt inicial pendiente — el agente nunca lo recibió (el script de setup falló o el workspace nunca se inició). Haz clic en Iniciar para enviarlo ahora.`,"workspacePage.unarchived":`Workspace desarchivado`,"workspacePage.unarchiveFailed":`Error al desarchivar`,"workspacePage.interruptFailed":`Error al interrumpir`,"workspacePage.interruptHint":`Interrumpir el turno actual sin terminar la sesión.`,"workspacePage.interruptTooltip":`Interrupción suave (como Escape) — detiene la herramienta actual pero mantiene la sesión activa`,"workspacePage.pendingNextRun":`Se aplicará en el próximo inicio`,"workspacePage.activeSessionModel":`En uso: {model}`,"workspacePage.activeSessionModelTooltip":`Modelo utilizado actualmente por la sesión seleccionada`,"workspacePage.switchEngine":`Cambiar motor`,"workspacePage.switchEngineHint":`Continuar este workspace con otro motor de agente`,"workspacePage.moreActions":`Más acciones`,"workspacePage.switchEngineTitle":`Cambiar motor de agente`,"workspacePage.switchEngineWarning":`El agente actual se detendrá y se iniciará una sesión nueva en el mismo worktree.`,"workspacePage.engineLabel":`Motor`,"workspacePage.engineClaude":`Claude Code`,"workspacePage.engineCodex":`Codex`,"workspacePage.engineHandoff":`Traspaso para el nuevo motor`,"workspacePage.engineHandoffHint":`Revisa o edita el contexto que se enviará al nuevo agente.`,"workspacePage.confirmSwitchEngine":`Cambiar motor`,"workspacePage.switchEngineFailed":`No se pudo cambiar el motor`,"whip.dispatchFailed":`No se pudo enviar el mensaje del látigo`,"whip.phrase1":`¡Más rápido, tocard!`,"whip.phrase2":`¡Acelera el ritmo, tocard!`,"whip.phrase3":`¡Vuelve al trabajo, tocard!`,"whip.phrase4":`¡Demuéstrame velocidad, tocard!`,"whip.phrase5":`¡Menos pensar y más hacer, tocard!`,"search.title":`Búsqueda`,"search.tooltip":`Buscar en el historial de agentes`,"search.placeholder":`Buscar en todos los mensajes de agentes…`,"search.includeArchived":`Incluir workspaces archivados`,"search.loading":`Buscando…`,"search.noResults":`Sin resultados`,"search.error":`Búsqueda fallida: {message}`,"search.resultCount":`{n} resultado(s)`,"search.eventType.userMessage":`Tú`,"search.eventType.agentOutput":`Agente`,"activityFeed.empty":`Aún no hay actividad`,"activityFeed.emptyHint":`Inicia un workspace para ver la salida del agente aquí`,"activityFeed.initialPrompt":`Prompt inicial`,"activityFeed.you":`Tú`,"activityFeed.agent":`Agente`,"activityFeed.question":`Pregunta`,"activityFeed.goToPrevious":`Ir al mensaje anterior`,"activityFeed.scrollToBottom":`Ir al final`,"activityFeed.sendAnswers":`Enviar respuestas`,"agentBusy.banner":`El agente está ocupado`,"agentBusy.subagentsRunning":`1 sub-agente en ejecución | {n} sub-agentes en ejecución`,"agentBusy.viewSubagents":`Ver sub-agentes`,"agentBusy.pendingMessage":`Esperando — el agente está ocupado`,"terminal.title":`Terminal`,"terminal.open":`Abrir terminal`,"terminal.close":`Cerrar terminal`,"terminal.noWorkspace":`Seleccione un espacio de trabajo`,"terminal.noWorktree":`Worktree aún no creado`,"terminal.error":`Error del terminal`,"terminal.exited":`Terminal cerrado`,"terminal.disconnected":`Conexión perdida`,"terminal.reconnecting":`Reconectando… (intento {attempt} de {max})`,"terminal.reconnect":`Reconectar`,"chatInput.placeholder":`Mensaje... (/ para skills)`,"chatInput.fileSearchHint":`buscar un archivo`,"chatInput.skills":`Skills`,"chatInput.attachImage":`Adjuntar imagen`,"chatInput.queueBanner":`Mensaje en cola — se enviará cuando el agente termine`,"chatInput.forceQueue":`Forzar envío`,"chatInput.searchHistory":`buscar`,"chatInput.commandPalette":`comandos`,"chatInput.shortcuts":`Atajos de teclado`,"chatInput.cancelQueue":`Cancelar cola`,"chatInput.autoLoopBanner":`Auto-loop activo — deténlo para enviar un mensaje`,"chatInput.awaitingUserBanner":`El agente espera tu respuesta arriba — responde mediante el panel de la pregunta`,"chatInput.autoLoopStop":`Detener`,"koboCommand.checkProgressDesc":`Verificar el progreso de las tareas y criterios de aceptación`,"chatInput.uploading":`Subiendo...`,"voice.title":`Transcripción de voz`,"voice.enabled":`Activar transcripción de voz local`,"voice.pttKey":`Tecla push-to-talk`,"voice.pttAlt":`Alt`,"voice.pttCtrlSpace":`Ctrl+Espacio`,"voice.language":`Idioma (auto o código)`,"voice.model":`Modelo activo`,"voice.commandPath":`Ruta del binario Whisper (opcional)`,"voice.ffmpegPath":`Ruta del binario ffmpeg (opcional)`,"voice.temperature":`Temperatura`,"voice.temperatureHint":`Más bajo = más determinista; más alto = más flexible pero potencialmente menos estable.`,"voice.initialPrompt":`Prompt inicial (opcional)`,"voice.initialPromptHint":`Contexto opcional para ayudar a Whisper con nombres, siglas o vocabulario técnico.`,"voice.translateToEnglish":`Traducir al inglés`,"voice.translateToEnglishHint":`Si se activa, el audio no inglés se traduce al inglés en lugar de transcribirse tal cual.`,"voice.suppressNst":`Suprimir tokens no vocales`,"voice.suppressNstHint":`Intenta reducir artefactos no vocales en la transcripción.`,"voice.installLink":`Instalar whisper.cpp`,"voice.installGuideTitle":`Guía de instalación`,"voice.installGuideIntro":`Instala whisper.cpp y ffmpeg, luego configura las rutas de binarios abajo si hace falta.`,"voice.installGuideUbuntuTitle":`Ubuntu / Debian`,"voice.installGuideWindowsTitle":`Windows`,"voice.installGuideBinaryPathHint":`Después del build con CMake, el binario de Whisper suele estar en: whisper.cpp/build/bin/whisper-cli`,"voice.installGuideSettingsHint":`Después, configura “Ruta del binario Whisper” y “Ruta del binario ffmpeg” en esta sección (o déjalo vacío si están en PATH).`,"voice.noneModel":`Sin modelo activo`,"voice.notInstalled":`no instalado`,"voice.download":`Descargar`,"voice.delete":`Eliminar`,"voice.holdToTalk":`Mantén pulsado para hablar`,"voice.recording":`Grabando...`,"voice.transcribing":`Transcribiendo...`,"voice.notSupported":`La grabación de voz no es compatible con este navegador`,"voice.errorMicPermission":`Permiso de micrófono denegado`,"voice.errorTranscription":`Falló la transcripción de voz`,"voice.downloadFailed":`Falló la descarga del modelo`,"voice.deleteFailed":`Falló la eliminación del modelo`,"voice.errorDisabled":`La transcripción de voz está desactivada en ajustes`,"voice.errorModelMissing":`No hay un modelo de voz activo configurado`,"voice.errorModelNotInstalled":`El modelo de voz activo no está instalado`,"voice.errorAudioInvalid":`La captura de audio es inválida o vacía`,"voice.errorLanguageInvalid":`La configuración del idioma de voz es inválida`,"voice.errorRuntimeMissing":`El runtime de Whisper no está instalado o no está en el PATH`,"voice.maxDurationReached":`Se alcanzó la duración máxima de grabación`,"voice.runtimeReady":`Runtime listo: {command}`,"voice.runtimeMissing":`Falta runtime: {command}`,"voice.ffmpegReady":`ffmpeg listo`,"voice.ffmpegMissing":`falta ffmpeg`,"voice.sectionRuntime":`Estado del runtime`,"voice.sectionActivation":`Activación`,"voice.sectionModels":`Modelos Whisper`,"voice.sectionAdvanced":`Opciones avanzadas`,"voice.sectionBehavior":`Comportamiento de la transcripción`,"voice.sectionBinaries":`Rutas de los binarios`,"voice.downloadModels":`Descargar un modelo`,"voice.cancelFailed":`No se pudo cancelar la descarga`,"createPage.title":`Crear un workspace`,"createPage.subtitle":`Describe la misión, elige un proyecto y configura el agente.`,"createPage.sectionMission":`Misión`,"createPage.sectionMissionHint":`Proporciona al agente un objetivo claro y el contexto necesario.`,"createPage.workspaceNameLabel":`Nombre del workspace`,"createPage.descriptionLabel":`Descripción de la misión`,"createPage.sources":`Fuentes opcionales`,"createPage.sectionGit":`Proyecto Git`,"createPage.sectionGitHint":`Elige el repositorio, la rama de origen y el modo de worktree.`,"createPage.worktreeMode":`Modo de worktree`,"createPage.worktreeNew":`Nuevo worktree aislado`,"createPage.worktreeExisting":`Reutilizar un worktree existente`,"createPage.projectLabel":`Proyecto`,"createPage.sourceBranch":`Rama de origen`,"createPage.workingBranchPreview":`Vista previa de la rama de trabajo`,"createPage.branchNamePending":`nombre-del-workspace`,"createPage.sectionAgent":`Agente`,"createPage.sectionAgentHint":`Revisa los ajustes de ejecución o activa la automatización.`,"createPage.configureAgent":`Configurar el agente`,"createPage.advancedOptions":`Opciones avanzadas`,"createPage.keyboardHint":`Pulsa Ctrl/Cmd + Enter para crear el workspace.`,"createPage.createWorkspace":`Crear workspace`,"createPage.compareEngines":`Comparar dos motores`,"createPage.engineA":`Motor A`,"createPage.engineB":`Motor B`,"createPage.compareBrainstormLocked":`Modo comparación: cada motor hace el brainstorming con el modelo y el esfuerzo definidos en su bloque de arriba.`,"createPage.compareEnginesHint":`Crea dos workspaces a partir de esta tarea, uno por motor, en worktrees hermanos. Luego se pueden comparar sus diffs en paralelo.`,"createPage.compareNeedsNewWorktree":`Comparar dos motores requiere dos worktrees nuevos. Desactiva primero «usar un worktree existente».`,"createPage.compareNeedsSecondEngine":`Elige un segundo motor, distinto del primero, para la comparación.`,"comparison.title":`Comparación de motores`,"comparison.hint":`La misma tarea, ejecutada por cada motor en su propio worktree.`,"comparison.engine":`Motor`,"comparison.status":`Estado`,"comparison.commits":`Commits`,"comparison.files":`Archivos`,"comparison.diff":`Diff`,"comparison.open":`Abrir`,"comparison.current":`Este`,"comparison.archived":`archivado`,"comparison.incomplete":`Solo existe un workspace de esta comparación. El otro nunca se creó, o se ha eliminado.`,"createPage.comparisonPartial":`Solo se crearon {count} de {total} workspaces. El que existe se puede usar por sí solo; elimínalo si prefieres empezar de nuevo.`,"createPage.notionEnabled":`Notion activado`,"createPage.importNotion":`Importar desde Notion`,"createPage.notionPlaceholder":`https://www.notion.so/workspace/Page-title-abc123...`,"createPage.notionValidation":`La URL debe empezar por https://www.notion.so/ o https://app.notion.com/`,"createPage.notionAutoExtract":`Las subtareas y criterios de aceptación se extraerán automáticamente.`,"createPage.notionPanelChoiceLabel":`Esta URL apunta a una subpágina (?p=). ¿Sobre cuál quieres trabajar?`,"createPage.notionPanelOption":`Subpágina (panel)`,"createPage.notionPanelOptionDesc":`La página que estabas viendo — recomendado`,"createPage.notionParentOption":`Página principal`,"createPage.notionParentOptionDesc":`La épica / base de datos a la que pertenece`,"createPage.importSentry":`Importar Sentry`,"createPage.sentryEnabled":`Sentry activado`,"createPage.sentryPlaceholder":`https://tu-org.sentry.io/issues/123456`,"createPage.sentryValidation":`La URL debe apuntar a una issue de Sentry (/issues/<id>)`,"createPage.sentryAutoExtract":`La issue de Sentry se importará automáticamente`,"createPage.sentryExtractHint":`Kobo extraerá la issue y la escribirá en .ai/thoughts/`,"createPage.importPr":`Importar desde una PR`,"createPage.importPrRequiresProject":`Elige primero un proyecto`,"createPage.importPrNotSupported":`El forge de este proyecto no admite listar pull requests`,"createPage.lockedToPr":`Bloqueado a la PR #{number}`,"createPage.prReadyToCreate":`PR #{number} importada — el workspace puede crearse.`,"createPage.unlockPrCheckout":`Desbloquear`,"createPage.workspaceName":`Nombre del workspace (por defecto el título de la página Notion)`,"createPage.workspaceNamePlaceholder":`Nombre del workspace...`,"createPage.instructions":`Instrucciones adicionales (opcional)...`,"createPage.instructionsPlaceholder":`Describe la tarea...`,"createPage.tasks":`Tareas ({count})`,"createPage.addTask":`Añadir una tarea...`,"createPage.acceptanceCriteria":`Criterios de aceptación ({count})`,"createPage.addCriterion":`Añadir un criterio...`,"createPage.projectPath":`Introduce la ruta del proyecto`,"createPage.branchType":`Tipo de rama`,"createPage.branch":`Rama`,"createPage.noBranches":`No se encontraron ramas`,"createPage.enterPath":`Introduce la ruta del proyecto`,"createPage.skipSetupScript":`Omitir script de setup`,"createPage.worktreePickerLabel":`Worktree existente`,"createPage.noOrphanWorktrees":`No hay worktrees huérfanos en este proyecto`,"createPage.pickWorktreeRequired":`Selecciona un worktree para adjuntar`,"createPage.notionExtractHint":`Las subtareas y criterios de aceptación se extraerán de la página Notion.`,"createPage.errorCreating":`Error al crear el workspace.`,"createPage.branchAdjusted":"La rama ya existía — se creó `{branch}` en su lugar. La carpeta worktree correspondiente usa el mismo sufijo.","createPage.localSourceFallback":`Workspace creado desde la rama local (origin inalcanzable) — la base puede estar desactualizada.`,"createPage.validationNotionUrl":`Introduce una URL de Notion válida (https://www.notion.so/... o https://app.notion.com/...).`,"createPage.validationDescription":`Describe la tarea.`,"createPage.validationName":`Indica un nombre para el workspace.`,"createPage.validationPath":`Introduce la ruta del proyecto.`,"createPage.validationBranch":`Selecciona una rama.`,"createPage.validationFocusHint":`El campo a corregir está resaltado abajo.`,"createPage.progress.validate":`Validando la solicitud…`,"createPage.progress.fetch-source-branch":`Obteniendo la rama de origen desde origin…`,"createPage.progress.inspect-worktree":`Inspeccionando el worktree existente…`,"createPage.progress.extract-notion":`Extrayendo la página de Notion…`,"createPage.progress.extract-sentry":`Extrayendo la incidencia de Sentry…`,"createPage.progress.create-record":`Creando el workspace…`,"createPage.progress.create-tasks":`Creando tareas y criterios de aceptación…`,"createPage.progress.create-worktree":`Creando el worktree de git…`,"createPage.progress.write-conventions":`Escribiendo las convenciones de git…`,"createPage.progress.write-context-files":`Escribiendo los archivos de contexto…`,"createPage.progress.build-prompt":`Construyendo el prompt inicial…`,"createPage.progress.setup-script":`Ejecutando tu script de instalación…`,"createPage.progress.start-agent":`Iniciando el agente…`,"createPage.progress.rollback":`Deshaciendo la creación fallida…`,"createPage.progress.done":`Listo`,"createPage.progress.step":`Paso {index} de {total}`,"createPage.errorAtStep":`La creación falló en el paso «{step}»: {message}`,"createPage.override.title":`Dos de tus opciones fueron sustituidas`,"createPage.override.setup-script-forced":`Script de instalación omitido: volver a ejecutarlo en un worktree que ya preparaste podría destruir su contenido.`,"createPage.override.permission-mode-downgraded":`Modo de permisos cambiado de Plan a Bypass: un bucle autónomo no puede ejecutarse en Plan, que bloquea herramientas y ediciones.`,"settings.title":`Ajustes`,"settings.language":`Idioma`,"settings.projectColor":`Color`,"settings.projectColorClear":`Borrar`,"settings.projectColorDefault":`Por defecto (gris)`,"settings.workspaceListSection":`Lista de workspaces`,"settings.flattenWorkspaceList":`Lista plana de workspaces`,"settings.flattenWorkspaceListHint":`Muestra todos los workspaces en una lista plana con una etiqueta de proyecto, en lugar de agruparlos por proyecto.`,"settings.skillSuite.section":`Suite de skills`,"settings.skillSuite.superpowers":`Superpowers`,"settings.skillSuite.gstack":`gstack`,"settings.skillSuite.custom":`Personalizado`,"settings.skillSuite.superpowersHint":`Workflow opinado TDD / brainstorm / plan (github.com/obra/superpowers).`,"settings.skillSuite.gstackHint":`Suite de Garry Tan — /review, /ship, /qa, /office-hours, etc. (github.com/garrytan/gstack).`,"settings.skillSuite.superpowersGstack":`Superpowers + gstack`,"settings.skillSuite.superpowersGstackHint":`Ambas suites se combinan — superpowers para la metodología (brainstorm / TDD / planes / revisión a nivel de principios), gstack para flujos concretos (/review, /qa, /browse, /design-review, /investigate).`,"settings.skillSuite.ecc":`ECC`,"settings.skillSuite.eccHint":`Framework de agentes de affaan-m — agents, skills, rules y hooks para planificar, probar, implementar, revisar y memorizar (github.com/affaan-m/ECC).`,"settings.skillSuite.allThree":`Superpowers + gstack + ECC`,"settings.skillSuite.allThreeHint":`Las tres suites se combinan — superpowers para la metodología, gstack para flujos concretos, ECC para pases de revisión/implementación multiagente estructurados.`,"settings.skillSuite.customHint":`Compón los cinco prompts a continuación con los templates que elijas y edítalos libremente.`,"settings.skillSuite.reloadDefaults":`Restaurar predeterminados`,"settings.skillSuite.reloadDefaultsConfirm":`¿Reemplazar los cinco prompts personalizados con los valores agnósticos predeterminados?`,"settings.skillSuite.customPrompts":`Prompts personalizados`,"settings.skillSuite.agnostic":`Base agnóstica`,"settings.skillSuite.importPrompt":`Importar un template`,"settings.skillSuite.imported":`Template importado. Ahora puedes editarlo.`,"settings.skillSuite.importFailed":`No se pudo importar el template`,"settings.skillSuite.reviewTemplate":`Template de revisión`,"settings.skillSuite.autoLoopReviewGate":`Compuerta de revisión auto-loop`,"settings.skillSuite.autoLoopGroomingIntro":`Intro de grooming auto-loop`,"settings.skillSuite.qaTemplate":`Template QA`,"settings.skillSuite.brainstormingInstruction":`Instrucción de la fase de brainstorming`,"settings.global":`Global`,"settings.projects":`Proyectos`,"settings.globalSettings":`Ajustes globales`,"settings.defaultModel":`Modelo por defecto`,"settings.defaultModelClaude":`Modelo por defecto (Claude Code)`,"settings.defaultModelCodex":`Modelo por defecto (OpenAI Codex)`,"settings.agentPermissions":`Permisos del agente`,"settings.skipPermissions":`Omitir solicitudes de permisos (--dangerously-skip-permissions)`,"settings.skipPermissionsWarning":`Advertencia: desactivar esto hará que todos los permisos de herramientas (Write, Edit, Bash...) se denieguen automáticamente en modo headless. El agente solo podrá leer.`,"settings.notifications":`Notificaciones`,"settings.browserNotifications":`Notificación del navegador cuando el agente termina`,"settings.audioNotifications":`Notificación sonora cuando el agente termina`,"settings.enableBrowserNotifications":`Activar las notificaciones del navegador`,"settings.testBrowserNotification":`Probar la notificación`,"settings.browserNotificationGranted":`Notificaciones del navegador permitidas`,"settings.browserNotificationDenied":`Notificaciones del navegador bloqueadas`,"settings.browserNotificationAsk":`Se requiere permiso del navegador`,"settings.browserNotificationUnsupported":`Notificaciones del navegador no disponibles`,"settings.browserNotificationPermissionNeeded":`Permite las notificaciones del navegador para enviar una prueba.`,"settings.browserNotificationTestTitle":`Prueba de notificación de Kōbō`,"settings.browserNotificationTestBody":`Las notificaciones del navegador funcionan.`,"settings.enableAudio":`Activar el audio`,"settings.notificationSound":`Sonido de notificación`,"settings.notificationSoundHint":`Se reproduce cuando el agente termina o solicita permiso.`,"settings.questionSound":`Sonido de preguntas`,"settings.questionSoundHint":`Se reproduce solo cuando el agente te hace una pregunta.`,"settings.workspaceCreatedSound":`Sonido de creación del espacio de trabajo`,"settings.workspaceCreatedSoundHint":`Se reproduce después de crear un espacio de trabajo.`,"settings.notificationSoundPreview":`Escuchar`,"settings.notificationVolume":`Volumen`,"settings.notificationSoundHey":`Hey`,"settings.agentErrorSound":`Errores del agente`,"settings.agentErrorSoundHint":`Se reproduce para cuotas, límites de tasa y errores del agente.`,"settings.notificationSoundBasic":`Notificación básica`,"settings.notificationSoundWorkspaceCreated":`Warcraft III — Trabajo`,"settings.notificationSoundTravailTermine":`Trabajo terminado`,"settings.notificationSoundFaaah":`Faaah`,"settings.notificationSoundCaVaPeter":`Va a explotar`,"settings.notificationSoundDryFart":`Dry fart`,"settings.notificationSoundForShure":`For shure`,"settings.prSoundSection":`PR / MR y CI`,"settings.soundGeneral":`Sonido general`,"settings.soundNone":`Sin sonido`,"settings.prCiFailedSound":`CI fallida`,"settings.prCiRecoveredSound":`CI recuperada`,"settings.prChangesRequestedSound":`Cambios solicitados`,"settings.prApprovedSound":`PR aprobada`,"settings.prMergeConflictSound":`Conflicto de merge`,"settings.prReadyToMergeSound":`Lista para merge`,"settings.prMergedSound":`PR fusionada`,"settings.prCiFailedSoundHint":`Se reproduce cuando la CI pasa a estado fallido.`,"settings.prCiRecoveredSoundHint":`Se reproduce cuando la CI se recupera de un fallo.`,"settings.prChangesRequestedSoundHint":`Se reproduce cuando una revisión solicita cambios.`,"settings.prApprovedSoundHint":`Se reproduce cuando se aprueba la pull request.`,"settings.prMergeConflictSoundHint":`Se reproduce cuando se detecta un conflicto de merge.`,"settings.prReadyToMergeSoundHint":`Se reproduce cuando la pull request está lista para merge.`,"settings.prMergedSoundHint":`Se reproduce cuando se fusiona la pull request.`,"settings.notificationSoundSeptiemeCompagnie03":`7ème compagnie 03`,"settings.notificationSoundAllerFtg":`Aller FTG`,"settings.notificationSoundArreteDeMentir":`Arrête de mentir`,"settings.notificationSoundArretezLesMessages":`Arrêtez d'envoyer les messages`,"settings.notificationSoundBahAlorsOnEstNul":`Bah alors, on est nul`,"settings.notificationSoundGtaVDeath":`GTA V — Death`,"settings.notificationSoundNanTuDegages":`Nan, tu dégages`,"settings.notificationSoundNanWallahPardon":`Nan, wallah, pardon`,"settings.notificationSoundOuaisCestGreg":`Ouais, c'est Greg`,"settings.notificationSoundPasCaZinedine":`Pas ça, Zinedine`,"settings.notificationSoundTaGueule":`Ta gueule`,"settings.notificationSoundTuVasLaFermer":`Tu vas la fermer`,"settings.notificationSoundYaaa":`Yaaa`,"settings.notificationSoundMaisLaisseMoiDormirZebi":`Mais laisse-moi dormir zebi`,"settings.defaultPermissionMode":`Modo de permisos por defecto`,"settings.defaultPermissionModeClaude":`Modo de permisos por defecto (Claude Code)`,"settings.defaultPermissionModeCodex":`Modo de permisos por defecto (OpenAI Codex)`,"settings.defaultPermissionModeHint":`Modo aplicado al crear un workspace. Plan = solo lectura, Bypass = sin avisos, Estricto = auto-aceptar ediciones con allow-list, Interactivo = preguntar antes de cada herramienta.`,"settings.activityFeed":`Feed de actividad`,"settings.showThinkingBlocks":`Mostrar bloques de razonamiento de los agentes`,"settings.whipSettings":`Látigo`,"settings.whipSettingsHint":`Configura el atajo y el volumen opcionales del látigo.`,"settings.whipEnabled":`Activar el látigo`,"settings.whipEnabledHint":`Muestra el látigo interactivo en los workspaces activos compatibles.`,"settings.whipVolume":`Volumen del látigo`,"settings.whipVolumeMasterAudioDisabled":`El audio principal está desactivado. Activa las notificaciones de audio para ajustar el volumen del látigo; el valor guardado se conserva.`,"whip.overlayLabel":`Látigo interactivo`,"whip.overlayInstructions":`Mueve el puntero para controlar el látigo. Pulsa Intro o Espacio para hacerlo chasquear. Pulsa Escape para cerrar.`,"settings.whipShortcut":`Atajo del látigo`,"settings.whipShortcutHint":`Haz clic y luego pulsa el atajo que quieras usar.`,"settings.whipShortcutRecording":`Pulsa un atajo…`,"settings.whipShortcutButtonLabel":`Atajo del látigo: {shortcut}`,"settings.whipShortcutRecordingLabel":`Grabando el atajo del látigo. Pulsa un atajo…`,"settings.whipShortcutReset":`Restablecer atajo`,"settings.whipShortcutReserved":`Este atajo está reservado por el navegador.`,"settings.testIntegration":`Probar conexión`,"pwa.offline":`No tienes conexión. El chat y los agentes necesitan el servidor Kōbō.`,"pwa.reconnecting":`Reconectando al servidor Kōbō…`,"pwa.installReady":`Instala Kōbō como aplicación.`,"pwa.install":`Instalar`,"pwa.ignore":`Ignorar`,"pwa.updateReady":`Hay una actualización de Kōbō disponible.`,"pwa.reload":`Recargar`,"chat.searchWorkspaceHistory":`Buscar en el historial del workspace`,"chat.historySearch.user":`Tú`,"chat.historySearch.agent":`Agente`,"chat.openInGitDiff":`Abrir en el diff de Git`,"timeline.title":`Cronología de sesiones`,"timeline.export":`Exportar diagnóstico`,"timeline.unnamed":`Sesión de agente`,"timeline.tools":`{count} herramientas`,"timeline.errors":`{count} errores`,"settings.verboseMessages":`Mostrar mensajes detallados del sistema (task_progress, task_started)`,"settings.availableVariables":`Variables disponibles en las plantillas de prompt`,"settings.prPromptTemplate":`Plantilla de prompt PR`,"settings.prPromptPlaceholder":`Instrucciones para el agente al crear PRs en GitHub...`,"settings.prPromptHint":`Usa las variables listadas arriba (sintaxis de dobles llaves).`,"settings.reviewPromptTemplate":`Plantilla de prompt de revisión`,"settings.reviewPromptPlaceholder":`Instrucciones para el agente al revisar los cambios de la rama...`,"settings.ciFixPromptTemplate":`Plantilla de prompt «Reparar CI»`,"settings.ciFixPromptHint":`Se envía al agente cuando un workspace tiene la CI fallando. Variables (sintaxis con dobles llaves): pr_url, pr_number, pr_title, branch_name, source_branch, workspace_name, workspace_id, project_name, failed_jobs, ci_run_url.`,"settings.ciFixPromptPlaceholder":`Pedir al agente que diagnostique y arregle los jobs de CI que fallan...`,"settings.finalizationPromptTemplate":`Prompt de finalización del auto-loop`,"settings.finalizationPromptHint":`Prompt por defecto para la última iteración del auto-loop (controles de calidad finales). Se usa cuando un proyecto deja vacío su propio prompt de finalización.`,"settings.finalizationPromptPlaceholder":`Run final quality checks before closing the workspace...`,"settings.notionInitialPrompt":`Prompt inicial de Notion`,"settings.notionInitialPrompt.help":`Se añade al prompt de creación del workspace cuando el workspace tiene un ticket de Notion. Variables: {variables}.`,"settings.notionInitialPrompt.project":`Prompt inicial de Notion (anulación)`,"settings.sentryInitialPrompt":`Prompt inicial de Sentry`,"settings.sentryInitialPrompt.help":`Se añade al prompt de creación del workspace cuando el workspace tiene una issue de Sentry. Variables: {variables}.`,"settings.sentryInitialPrompt.project":`Prompt inicial de Sentry (anulación)`,"settings.initialPrompt.inheritHint":`Dejar en blanco para heredar. Escribe un carácter en blanco para desactivar la inyección a este nivel.`,"settings.resetToDefault":`Restablecer`,"settings.resetFailed":`No se pudo cargar el valor por defecto`,"settings.sentryIntegration":`Integración Sentry`,"settings.var.prNumber":`Número de PR (ej: 42)`,"settings.var.prUrl":`URL completa de la PR creada`,"settings.var.branchName":`Nombre de la rama de trabajo`,"settings.var.sourceBranch":`Rama fuente a la que apunta la PR`,"settings.var.workspaceName":`Nombre del workspace`,"settings.var.projectName":`Último segmento de la ruta del proyecto`,"settings.var.notionUrl":`URL de Notion si está definida, vacía en caso contrario`,"settings.var.commits":`Lista de commits entre source y head`,"settings.var.diffStats":`Resumen shortstat de Git (archivos, inserciones, eliminaciones)`,"settings.var.tasks":`Tareas regulares como lista de verificación`,"settings.var.acceptanceCriteria":`Criterios de aceptación como lista de verificación`,"settings.gitConventions":`Convenciones Git (global)`,"settings.gitConventionsPlaceholder":`# Convenciones Git...`,"settings.gitConventionsHint":`Estas convenciones se escriben en .ai/.git-conventions.md en cada nuevo workspace y deben ser seguidas por el agente antes de cualquier operación Git. Se anulan con convenciones por proyecto si están definidas.`,"settings.setupScript":`Script de setup`,"settings.cleanupScript":`Script de limpieza`,"settings.archiveScript":`Script de archivado`,"settings.archiveScriptHint":`Script de shell ejecutado en el servidor en el worktree cuando se archiva un workspace. Dejar vacío para desactivar.`,"settings.archiveScriptPlaceholder":`p. ej. limpiar contenedores, liberar espacio en disco…`,"settings.hook.sessionEndedTitle":`Hook: sesión finalizada`,"settings.hook.sessionEndedHint":`Se ejecuta cuando termina una sesión del agente, sea cual sea el motivo. Lee KOBO_SESSION_END_REASON (completed / error / killed / watchdog), KOBO_SESSION_STOP_CAUSE, KOBO_AUTOLOOP_ACTIVE, KOBO_SESSION_ID y KOBO_SESSION_EXIT_CODE. Vacío = desactivado.`,"settings.hook.sessionEndedPlaceholder":`p. ej. npm test, o avisar a un canal de chat…`,"settings.hook.prMergedTitle":`Hook: PR fusionada`,"settings.hook.prMergedHint":`Se ejecuta cuando se detecta una PR fusionada, antes de archivar o purgar el workspace: el worktree sigue en disco. Lee KOBO_PR_NUMBER y KOBO_PR_URL. Vacío = desactivado.`,"settings.hook.prMergedPlaceholder":`p. ej. lanzar un despliegue, etiquetar una release…`,"settings.hook.autoLoopDisabledTitle":`Hook: auto-loop detenido`,"settings.hook.autoLoopDisabledHint":`Se ejecuta cada vez que se desactiva el auto-loop, por Kōbō o por ti. Lee KOBO_AUTOLOOP_REASON (completed / stall / error / user-action / awaiting-clarification) y KOBO_TASKS_PENDING. Vacío = desactivado.`,"settings.hook.autoLoopDisabledPlaceholder":`p. ej. enviar un aviso cuando el bucle se atasca…`,"settings.changeSourceBranchScript":`Script para cambiar la rama de origen`,"settings.changeSourceBranchScript.help":`Reemplaza el cherry-pick integrado cuando no está vacío. El script gestiona git, base de la PR, force-push y conflictos; Kōbō solo rechaza si el agente está corriendo y actualiza los metadatos de la rama de origen en exit 0.`,"settings.changeSourceBranchScript.envHelp":`KOBO_NEW_BASE — nueva rama de origen elegida en el diálogo
|
|
1
|
+
var e={"model.tooltip":`Modelo usado por el agente en este workspace`,"reasoning.tooltip":`Nivel de razonamiento usado por el agente en este workspace`,"thinking.label":`Razonamiento`,"thinking.noDetails":`El agente está razonando…`,"common.save":`Guardar`,"common.confirm":`Confirmar`,"common.cancel":`Cancelar`,"common.open":`Abrir`,"common.retry":`Reintentar`,"common.delete":`Eliminar`,"common.close":`Cerrar`,"workspace.deleteTitle":`Eliminar workspace`,"workspace.deleteTypeName":`Escriba {name} para confirmar. Esto elimina el worktree y todo el historial.`,"workspace.deleteFailed":`No se pudo eliminar el workspace.`,"workspace.archiveFailed":`No se pudo archivar el workspace.`,"tasks.updateFailed":`No se pudo actualizar la tarea.`,"dashboard.tooltip":`Panel`,"dashboard.title":`Panel`,"dashboard.count":`{n} workspace | {n} workspaces`,"dashboard.empty":`Ningún workspace activo.`,"dashboard.workspace":`Workspace`,"dashboard.status":`Estado`,"dashboard.attention":`Atención`,"dashboard.pr":`PR`,"dashboard.diff":`Diff`,"dashboard.activity":`Actividad`,"dashboard.prOpen":`abierta`,"reliability.title":`Fiabilidad de los modelos`,"reliability.subtitle":`Cómo terminó realmente cada motor y modelo en este equipo.`,"reliability.empty":`Todavía no hay ninguna sesión finalizada.`,"reliability.loadFailed":`No se pudieron cargar las cifras de fiabilidad.`,"reliability.engine":`Motor`,"reliability.model":`Modelo`,"reliability.sessions":`Sesiones`,"reliability.completed":`Completadas`,"reliability.watchdog":`Watchdog`,"reliability.killed":`Detenidas`,"reliability.errors":`Errores`,"reliability.unknown":`Desconocido`,"reliability.median":`Mediana`,"reliability.durationSeconds":`{s}s`,"reliability.durationMinutes":`{m}min {s}s`,"reliability.durationHours":`{h}h {m}min`,"update.available":`Hay una versión más reciente de Kōbō: {version}`,"update.how":`Cómo actualizar`,"common.dismiss":`Descartar`,"common.details":`Detalles`,"common.ok":`OK`,"whatsNew.title":`Novedades`,"common.loading":`Cargando...`,"common.search":`Buscar...`,"common.refresh":`Actualizar`,"common.copy":`Copiar`,"common.copied":`Copiado al portapapeles`,"common.copyFailed":`Error al copiar`,"common.add":`Añadir`,"folderPicker.title":`Elegir una carpeta`,"folderPicker.parent":`Carpeta superior`,"folderPicker.empty":`Sin subcarpetas`,"folderPicker.select":`Elegir esta carpeta`,"common.start":`Iniciar`,"common.stop":`Detener`,"common.archive":`Archivar`,"common.unarchive":`Desarchivar`,"common.selectWorkspace":`Selecciona un workspace`,"common.noResults":`Sin resultados para "{query}"`,"common.send":`enviar`,"common.newLine":`nueva línea`,"common.history":`historial`,"common.justNow":`ahora mismo`,"common.minutesAgo":`hace {count}m`,"common.hoursAgo":`hace {count}h`,"common.daysAgo":`hace {count}d`,"model.auto":`Auto`,"model.fable51":`Fable 5.1`,"model.mythos5":`Mythos 5 (Glasswing)`,"model.fable51Description":`El modelo más capaz - reemplaza a Fable 5, contexto 1M, adaptive thinking`,"model.mythos5Description":`Fable 5.1 sin clasificadores de seguridad — acceso limitado (Project Glasswing)`,"model.opus":`Opus 4.6`,"model.sonnet":`Sonnet 4.6`,"model.opus5":`Opus 5`,"model.opus48":`Opus 4.8`,"model.opus47Classic":`Opus 4.7 (Classic)`,"model.opus471m":`Opus 4.7 (1M)`,"model.opusClassic":`Opus 4.6 (Classic)`,"model.opus1m":`Opus 4.6 (1M)`,"model.sonnet5":`Sonnet 5`,"model.sonnetClassic":`Sonnet 4.6 (Classic)`,"model.sonnet1m":`Sonnet 4.6 (1M)`,"model.haiku":`Haiku 4.5`,"model.autoDescription":`Claude elige el modelo óptimo`,"model.opus5Description":`Para código agéntico complejo y trabajo empresarial, contexto 1M`,"model.opus48Description":`Opus más capaz — coding agéntico long-horizon, contexto 1M por defecto, esfuerzo high por defecto`,"model.opus47ClassicDescription":`Último Opus, el más capaz`,"model.opus471mDescription":`Último Opus, contexto 1M`,"model.opusClassicDescription":`El más potente`,"model.opus1mDescription":`El más potente, contexto 1M`,"model.sonnet5Description":`La mejor combinación de velocidad e inteligencia, contexto 1M`,"model.sonnetClassicDescription":`Equilibrado`,"model.sonnet1mDescription":`Equilibrado, contexto 1M`,"model.haikuDescription":`El más rápido`,"model.gpt56sol":`GPT-5.6 Sol`,"model.gpt56solDescription":`El modelo de codificación agéntica más avanzado (requiere autenticación ChatGPT)`,"model.gpt56terra":`GPT-5.6 Terra`,"model.gpt56terraDescription":`Modelo de codificación agéntica equilibrado para el día a día (requiere autenticación ChatGPT)`,"model.gpt56luna":`GPT-5.6 Luna`,"model.gpt56lunaDescription":`Modelo de codificación agéntica rápido y económico (requiere autenticación ChatGPT)`,"model.gpt55":`GPT-5.5`,"model.gpt55Description":`Recomendado para código complejo (requiere autenticación ChatGPT)`,"model.gpt54":`GPT-5.4`,"model.gpt54Description":`Alternativa por defecto — razonamiento sólido, compatible con clave API`,"model.gpt54mini":`GPT-5.4 mini`,"model.gpt54miniDescription":`Rápido y eficiente — ideal para tareas reactivas y subagentes`,"model.gpt52":`GPT-5.2`,"model.gpt52Description":`Optimizado para trabajo profesional y agentes de larga duración`,"model.gpt53codex":`GPT-5.3 Codex`,"model.gpt53codexDescription":`Modelo especializado en código para ingeniería de software compleja`,"reasoning.auto":`auto`,"reasoning.minimal":`minimal`,"reasoning.none":`ninguno`,"reasoning.low":`low`,"reasoning.medium":`medium`,"reasoning.high":`high`,"reasoning.xhigh":`xhigh`,"reasoning.max":`max`,"reasoning.autoDescription":`Deja que el motor decida`,"reasoning.minimalDescription":`Razonamiento más rápido y superficial`,"reasoning.noneDescription":`Sin razonamiento adicional`,"reasoning.lowDescription":`Más rápido, menos profundidad`,"reasoning.mediumDescription":`Equilibrado`,"reasoning.highDescription":`Más profundidad`,"reasoning.xhighDescription":`Profundidad extendida, tareas largas`,"reasoning.maxDescription":`Profundidad máxima`,"agentPermissionMode.label":`Modo de permisos`,"agentPermissionMode.plan":`Plan`,"agentPermissionMode.bypass":`Bypass`,"agentPermissionMode.strict":`Aceptar ediciones`,"agentPermissionMode.interactive":`Interactivo`,"agentPermissionMode.tooltip":`Cómo gestiona el agente los permisos de las herramientas. Plan: solo lectura, sin escrituras. Bypass: omitir todas las preguntas. Estricto: auto-aceptar ediciones de archivos, respetar allow/deny para el resto. Interactivo: preguntar al usuario antes de cada herramienta mediante el panel de permisos.`,"agentPermissionMode.autoLoopOverride":`El auto-loop fuerza un modo distinto a Plan — Plan bloquea las herramientas MCP y las ediciones que el bucle necesita. Elige Bypass, Estricto o Interactivo.`,"agentPermissionMode.autoLoopLocked":`Bloqueado en Bypass mientras el auto-loop está activo — cualquier otro modo detendría el bucle en las preguntas de permiso. AskUserQuestion sigue funcionando.`,"workspaceList.title":`Workspaces`,"workspaceList.a11y.groupToggle":`Grupo {group}, {count} workspaces`,"workspaceList.a11y.list":`Workspaces`,"workspaceList.a11y.card":`{name}, {status}`,"workspaceList.needsAttention":`Requiere atención`,"workspaceList.running":`En ejecución`,"workspaceList.idle":`Inactivo`,"workspaceList.archived":`Archivados`,"workspaceList.archivedToast":`«{name}» archivado`,"workspaceList.archivedUndo":`Deshacer`,"workspaceList.unarchiveFailed":`No se pudo desarchivar este workspace`,"workspaceList.noWorkspaces":`Aún no hay workspaces`,"workspaceList.loadFailed":`No se pudieron cargar tus workspaces`,"workspaceList.loadFailedHint":`Es un fallo de conexión, no una cuenta vacía.`,"workspaceList.footer":`{count} workspace | {count} workspaces`,"workspaceList.footerRunning":`{count} en ejecución`,"workspaceList.deleteDialog.title":`¿Eliminar workspace?`,"workspaceList.deleteDialog.deleteLocal":`Eliminar rama local`,"workspaceList.deleteDialog.deleteRemote":`Eliminar rama remota`,"workspaceList.deleteDialog.warning":`Advertencia: esta acción es irreversible en el remoto.`,"workspaceList.deleteArchivedDialog.tooltip":`Eliminar todos los workspaces archivados`,"workspaceList.deleteArchivedDialog.title":`¿Eliminar todos los workspaces archivados?`,"workspaceList.deleteArchivedDialog.message":`Esto eliminará permanentemente los {count} workspaces archivados. Esta acción no se puede deshacer.`,"workspaceList.deleteArchivedDialog.typeCount":`Escribe {count} para confirmar`,"workspacePage.selectWorkspace":`Selecciona un workspace para comenzar`,"workspacePage.commandPalettePlaceholder":`Buscar comandos…`,"workspacePage.commandPaletteEmpty":`No hay comandos coincidentes`,"workspacePage.commandFocusChat":`Enfocar la entrada del chat`,"workspacePage.commandSearchHistory":`Buscar en el historial del workspace`,"workspacePage.commandTogglePanel":`Mostrar u ocultar el panel lateral`,"workspacePage.commandStartAgent":`Iniciar agente`,"workspacePage.commandStopAgent":`Detener agente`,"workspacePage.commandOpenSettings":`Abrir los ajustes`,"workspacePage.commandOpenCreate":`Crear un workspace`,"workspacePage.commandOpenSearch":`Búsqueda global`,"workspacePage.commandOpenHealth":`Página de salud`,"workspacePage.commandOpenChangelog":`Registro de cambios`,"workspacePage.commandGroupWorkspaces":`Ir a un workspace`,"workspacePage.commandPaletteHint":`Paleta de comandos`,"workspacePage.session":`Sesión #{n}`,"workspacePage.newSession":`+ Nueva sesión`,"workspacePage.renameSession":`Renombrar`,"workspacePage.renameSessionTitle":`Renombrar sesión`,"workspacePage.sessionNameLabel":`Nombre de sesión`,"workspacePage.sessionEndedNotice":`Esta sesión ha terminado. Crea una nueva sesión para continuar.`,"workspacePage.renameFailed":`Error al renombrar`,"workspacePage.copySessionId":`Copiar ID de sesión`,"workspacePage.deleteSession":`Eliminar sesión`,"workspacePage.deleteSessionTitle":`¿Eliminar sesión?`,"workspacePage.deleteSessionConfirm":`Esto elimina permanentemente esta sesión y su historial de conversación.`,"workspacePage.deleteSessionFailed":`No se pudo eliminar la sesión`,"workspacePage.noEngineSessionId":`Todavía no hay ID de sesión — el agente aún no ha iniciado esta sesión`,"workspacePage.createSessionFailed":`Error al crear la sesión`,"workspacePage.startFailed":`Error al iniciar`,"workspacePage.stopFailed":`Error al detener`,"workspacePage.interrupt":`Interrumpir`,"workspacePage.interrupted":`Agente interrumpido — esperando tu próximo mensaje`,"workspacePage.lastAgentEvent":`Último evento {when}`,"workspacePage.agentStopping":`Deteniendo…`,"workspacePage.agentNotRunning":`Ningún agente en ejecución — el estado está obsoleto`,"workspacePage.archivedBanner":`Workspace archivado — solo lectura`,"workspacePage.worktreePurgedBanner":`Worktree eliminado — historial conservado, restauración no disponible en esta versión`,"workspacePage.worktreePurgedTooltip":"La carpeta del worktree fue eliminada del disco para recuperar espacio. El historial de mensajes, sesiones y metadatos de la PR siguen consultables aquí, pero el directorio de trabajo ya no existe localmente. Una futura versión de Kōbō podrá reconstruir el worktree desde la PR mergeada — por ahora, recréalo manualmente con `gh pr checkout` o `git worktree add`.","workspacePage.pendingInitialPromptBanner":`Hay un prompt inicial pendiente — el agente nunca lo recibió (el script de setup falló o el workspace nunca se inició). Haz clic en Iniciar para enviarlo ahora.`,"workspacePage.unarchived":`Workspace desarchivado`,"workspacePage.unarchiveFailed":`Error al desarchivar`,"workspacePage.interruptFailed":`Error al interrumpir`,"workspacePage.interruptHint":`Interrumpir el turno actual sin terminar la sesión.`,"workspacePage.interruptTooltip":`Interrupción suave (como Escape) — detiene la herramienta actual pero mantiene la sesión activa`,"workspacePage.pendingNextRun":`Se aplicará en el próximo inicio`,"workspacePage.activeSessionModel":`En uso: {model}`,"workspacePage.activeSessionModelTooltip":`Modelo utilizado actualmente por la sesión seleccionada`,"workspacePage.switchEngine":`Cambiar motor`,"workspacePage.switchEngineHint":`Continuar este workspace con otro motor de agente`,"workspacePage.moreActions":`Más acciones`,"workspacePage.switchEngineTitle":`Cambiar motor de agente`,"workspacePage.switchEngineWarning":`El agente actual se detendrá y se iniciará una sesión nueva en el mismo worktree.`,"workspacePage.engineLabel":`Motor`,"workspacePage.engineClaude":`Claude Code`,"workspacePage.engineCodex":`Codex`,"workspacePage.engineHandoff":`Traspaso para el nuevo motor`,"workspacePage.engineHandoffHint":`Revisa o edita el contexto que se enviará al nuevo agente.`,"workspacePage.confirmSwitchEngine":`Cambiar motor`,"workspacePage.switchEngineFailed":`No se pudo cambiar el motor`,"whip.dispatchFailed":`No se pudo enviar el mensaje del látigo`,"whip.phrase1":`¡Más rápido, tocard!`,"whip.phrase2":`¡Acelera el ritmo, tocard!`,"whip.phrase3":`¡Vuelve al trabajo, tocard!`,"whip.phrase4":`¡Demuéstrame velocidad, tocard!`,"whip.phrase5":`¡Menos pensar y más hacer, tocard!`,"search.title":`Búsqueda`,"search.tooltip":`Buscar en el historial de agentes`,"search.placeholder":`Buscar en todos los mensajes de agentes…`,"search.includeArchived":`Incluir workspaces archivados`,"search.loading":`Buscando…`,"search.noResults":`Sin resultados`,"search.error":`Búsqueda fallida: {message}`,"search.resultCount":`{n} resultado(s)`,"search.eventType.userMessage":`Tú`,"search.eventType.agentOutput":`Agente`,"activityFeed.empty":`Aún no hay actividad`,"activityFeed.emptyHint":`Inicia un workspace para ver la salida del agente aquí`,"activityFeed.initialPrompt":`Prompt inicial`,"activityFeed.you":`Tú`,"activityFeed.agent":`Agente`,"activityFeed.question":`Pregunta`,"activityFeed.goToPrevious":`Ir al mensaje anterior`,"activityFeed.scrollToBottom":`Ir al final`,"activityFeed.sendAnswers":`Enviar respuestas`,"agentBusy.banner":`El agente está ocupado`,"agentBusy.subagentsRunning":`1 sub-agente en ejecución | {n} sub-agentes en ejecución`,"agentBusy.viewSubagents":`Ver sub-agentes`,"agentBusy.pendingMessage":`Esperando — el agente está ocupado`,"terminal.title":`Terminal`,"terminal.open":`Abrir terminal`,"terminal.close":`Cerrar terminal`,"terminal.noWorkspace":`Seleccione un espacio de trabajo`,"terminal.noWorktree":`Worktree aún no creado`,"terminal.error":`Error del terminal`,"terminal.exited":`Terminal cerrado`,"terminal.disconnected":`Conexión perdida`,"terminal.reconnecting":`Reconectando… (intento {attempt} de {max})`,"terminal.reconnect":`Reconectar`,"chatInput.placeholder":`Mensaje... (/ para skills)`,"chatInput.fileSearchHint":`buscar un archivo`,"chatInput.skills":`Skills`,"chatInput.attachImage":`Adjuntar imagen`,"chatInput.queueBanner":`Mensaje en cola — se enviará cuando el agente termine`,"chatInput.forceQueue":`Forzar envío`,"chatInput.searchHistory":`buscar`,"chatInput.commandPalette":`comandos`,"chatInput.shortcuts":`Atajos de teclado`,"chatInput.cancelQueue":`Cancelar cola`,"chatInput.autoLoopBanner":`Auto-loop activo — deténlo para enviar un mensaje`,"chatInput.awaitingUserBanner":`El agente espera tu respuesta arriba — responde mediante el panel de la pregunta`,"chatInput.autoLoopStop":`Detener`,"koboCommand.checkProgressDesc":`Verificar el progreso de las tareas y criterios de aceptación`,"chatInput.uploading":`Subiendo...`,"voice.title":`Transcripción de voz`,"voice.enabled":`Activar transcripción de voz local`,"voice.pttKey":`Tecla push-to-talk`,"voice.pttAlt":`Alt`,"voice.pttCtrlSpace":`Ctrl+Espacio`,"voice.language":`Idioma (auto o código)`,"voice.model":`Modelo activo`,"voice.commandPath":`Ruta del binario Whisper (opcional)`,"voice.ffmpegPath":`Ruta del binario ffmpeg (opcional)`,"voice.temperature":`Temperatura`,"voice.temperatureHint":`Más bajo = más determinista; más alto = más flexible pero potencialmente menos estable.`,"voice.initialPrompt":`Prompt inicial (opcional)`,"voice.initialPromptHint":`Contexto opcional para ayudar a Whisper con nombres, siglas o vocabulario técnico.`,"voice.translateToEnglish":`Traducir al inglés`,"voice.translateToEnglishHint":`Si se activa, el audio no inglés se traduce al inglés en lugar de transcribirse tal cual.`,"voice.suppressNst":`Suprimir tokens no vocales`,"voice.suppressNstHint":`Intenta reducir artefactos no vocales en la transcripción.`,"voice.installLink":`Instalar whisper.cpp`,"voice.installGuideTitle":`Guía de instalación`,"voice.installGuideIntro":`Instala whisper.cpp y ffmpeg, luego configura las rutas de binarios abajo si hace falta.`,"voice.installGuideUbuntuTitle":`Ubuntu / Debian`,"voice.installGuideWindowsTitle":`Windows`,"voice.installGuideBinaryPathHint":`Después del build con CMake, el binario de Whisper suele estar en: whisper.cpp/build/bin/whisper-cli`,"voice.installGuideSettingsHint":`Después, configura “Ruta del binario Whisper” y “Ruta del binario ffmpeg” en esta sección (o déjalo vacío si están en PATH).`,"voice.noneModel":`Sin modelo activo`,"voice.notInstalled":`no instalado`,"voice.download":`Descargar`,"voice.delete":`Eliminar`,"voice.holdToTalk":`Mantén pulsado para hablar`,"voice.recording":`Grabando...`,"voice.transcribing":`Transcribiendo...`,"voice.notSupported":`La grabación de voz no es compatible con este navegador`,"voice.errorMicPermission":`Permiso de micrófono denegado`,"voice.errorTranscription":`Falló la transcripción de voz`,"voice.downloadFailed":`Falló la descarga del modelo`,"voice.deleteFailed":`Falló la eliminación del modelo`,"voice.errorDisabled":`La transcripción de voz está desactivada en ajustes`,"voice.errorModelMissing":`No hay un modelo de voz activo configurado`,"voice.errorModelNotInstalled":`El modelo de voz activo no está instalado`,"voice.errorAudioInvalid":`La captura de audio es inválida o vacía`,"voice.errorLanguageInvalid":`La configuración del idioma de voz es inválida`,"voice.errorRuntimeMissing":`El runtime de Whisper no está instalado o no está en el PATH`,"voice.maxDurationReached":`Se alcanzó la duración máxima de grabación`,"voice.runtimeReady":`Runtime listo: {command}`,"voice.runtimeMissing":`Falta runtime: {command}`,"voice.ffmpegReady":`ffmpeg listo`,"voice.ffmpegMissing":`falta ffmpeg`,"voice.sectionRuntime":`Estado del runtime`,"voice.sectionActivation":`Activación`,"voice.sectionModels":`Modelos Whisper`,"voice.sectionAdvanced":`Opciones avanzadas`,"voice.sectionBehavior":`Comportamiento de la transcripción`,"voice.sectionBinaries":`Rutas de los binarios`,"voice.downloadModels":`Descargar un modelo`,"voice.cancelFailed":`No se pudo cancelar la descarga`,"createPage.title":`Crear un workspace`,"createPage.subtitle":`Describe la misión, elige un proyecto y configura el agente.`,"createPage.sectionMission":`Misión`,"createPage.sectionMissionHint":`Proporciona al agente un objetivo claro y el contexto necesario.`,"createPage.workspaceNameLabel":`Nombre del workspace`,"createPage.descriptionLabel":`Descripción de la misión`,"createPage.sources":`Fuentes opcionales`,"createPage.sectionGit":`Proyecto Git`,"createPage.sectionGitHint":`Elige el repositorio, la rama de origen y el modo de worktree.`,"createPage.worktreeMode":`Modo de worktree`,"createPage.worktreeNew":`Nuevo worktree aislado`,"createPage.worktreeExisting":`Reutilizar un worktree existente`,"createPage.projectLabel":`Proyecto`,"createPage.sourceBranch":`Rama de origen`,"createPage.workingBranchPreview":`Vista previa de la rama de trabajo`,"createPage.branchNamePending":`nombre-del-workspace`,"createPage.sectionAgent":`Agente`,"createPage.sectionAgentHint":`Revisa los ajustes de ejecución o activa la automatización.`,"createPage.configureAgent":`Configurar el agente`,"createPage.advancedOptions":`Opciones avanzadas`,"createPage.keyboardHint":`Pulsa Ctrl/Cmd + Enter para crear el workspace.`,"createPage.createWorkspace":`Crear workspace`,"createPage.compareEngines":`Comparar dos motores`,"createPage.engineA":`Motor A`,"createPage.engineB":`Motor B`,"createPage.compareBrainstormLocked":`Modo comparación: cada motor hace el brainstorming con el modelo y el esfuerzo definidos en su bloque de arriba.`,"createPage.compareEnginesHint":`Crea dos workspaces a partir de esta tarea, uno por motor, en worktrees hermanos. Luego se pueden comparar sus diffs en paralelo.`,"createPage.compareNeedsNewWorktree":`Comparar dos motores requiere dos worktrees nuevos. Desactiva primero «usar un worktree existente».`,"createPage.compareNeedsSecondEngine":`Elige un segundo motor, distinto del primero, para la comparación.`,"comparison.title":`Comparación de motores`,"comparison.hint":`La misma tarea, ejecutada por cada motor en su propio worktree.`,"comparison.engine":`Motor`,"comparison.status":`Estado`,"comparison.tasks":`Tareas`,"comparison.commits":`Commits`,"comparison.files":`Archivos`,"comparison.diff":`Diff`,"comparison.messages":`Mensajes`,"comparison.messagesTitle":`Mensajes del agente / tus mensajes`,"comparison.questions":`Preguntas`,"comparison.tools":`Herramientas`,"comparison.errors":`Errores`,"comparison.tokens":`Tokens`,"comparison.tokensTitle":`Tokens de entrada / salida`,"comparison.sessions":`Sesiones`,"comparison.duration":`Duración`,"comparison.exportCsv":`Exportar en CSV`,"comparison.open":`Abrir`,"comparison.current":`Este`,"comparison.archived":`archivado`,"comparison.incomplete":`Solo existe un workspace de esta comparación. El otro nunca se creó, o se ha eliminado.`,"createPage.comparisonPartial":`Solo se crearon {count} de {total} workspaces. El que existe se puede usar por sí solo; elimínalo si prefieres empezar de nuevo.`,"createPage.notionEnabled":`Notion activado`,"createPage.importNotion":`Importar desde Notion`,"createPage.notionPlaceholder":`https://www.notion.so/workspace/Page-title-abc123...`,"createPage.notionValidation":`La URL debe empezar por https://www.notion.so/ o https://app.notion.com/`,"createPage.notionAutoExtract":`Las subtareas y criterios de aceptación se extraerán automáticamente.`,"createPage.notionPanelChoiceLabel":`Esta URL apunta a una subpágina (?p=). ¿Sobre cuál quieres trabajar?`,"createPage.notionPanelOption":`Subpágina (panel)`,"createPage.notionPanelOptionDesc":`La página que estabas viendo — recomendado`,"createPage.notionParentOption":`Página principal`,"createPage.notionParentOptionDesc":`La épica / base de datos a la que pertenece`,"createPage.importSentry":`Importar Sentry`,"createPage.sentryEnabled":`Sentry activado`,"createPage.sentryPlaceholder":`https://tu-org.sentry.io/issues/123456`,"createPage.sentryValidation":`La URL debe apuntar a una issue de Sentry (/issues/<id>)`,"createPage.sentryAutoExtract":`La issue de Sentry se importará automáticamente`,"createPage.sentryExtractHint":`Kobo extraerá la issue y la escribirá en .ai/thoughts/`,"createPage.importPr":`Importar desde una PR`,"createPage.importPrRequiresProject":`Elige primero un proyecto`,"createPage.importPrNotSupported":`El forge de este proyecto no admite listar pull requests`,"createPage.lockedToPr":`Bloqueado a la PR #{number}`,"createPage.prReadyToCreate":`PR #{number} importada — el workspace puede crearse.`,"createPage.unlockPrCheckout":`Desbloquear`,"createPage.workspaceName":`Nombre del workspace (por defecto el título de la página Notion)`,"createPage.workspaceNamePlaceholder":`Nombre del workspace...`,"createPage.instructions":`Instrucciones adicionales (opcional)...`,"createPage.instructionsPlaceholder":`Describe la tarea...`,"createPage.tasks":`Tareas ({count})`,"createPage.addTask":`Añadir una tarea...`,"createPage.acceptanceCriteria":`Criterios de aceptación ({count})`,"createPage.addCriterion":`Añadir un criterio...`,"createPage.projectPath":`Introduce la ruta del proyecto`,"createPage.branchType":`Tipo de rama`,"createPage.branch":`Rama`,"createPage.noBranches":`No se encontraron ramas`,"createPage.enterPath":`Introduce la ruta del proyecto`,"createPage.skipSetupScript":`Omitir script de setup`,"createPage.worktreePickerLabel":`Worktree existente`,"createPage.noOrphanWorktrees":`No hay worktrees huérfanos en este proyecto`,"createPage.pickWorktreeRequired":`Selecciona un worktree para adjuntar`,"createPage.notionExtractHint":`Las subtareas y criterios de aceptación se extraerán de la página Notion.`,"createPage.errorCreating":`Error al crear el workspace.`,"createPage.branchAdjusted":"La rama ya existía — se creó `{branch}` en su lugar. La carpeta worktree correspondiente usa el mismo sufijo.","createPage.localSourceFallback":`Workspace creado desde la rama local (origin inalcanzable) — la base puede estar desactualizada.`,"createPage.validationNotionUrl":`Introduce una URL de Notion válida (https://www.notion.so/... o https://app.notion.com/...).`,"createPage.validationDescription":`Describe la tarea.`,"createPage.validationName":`Indica un nombre para el workspace.`,"createPage.validationPath":`Introduce la ruta del proyecto.`,"createPage.validationBranch":`Selecciona una rama.`,"createPage.validationFocusHint":`El campo a corregir está resaltado abajo.`,"createPage.progress.validate":`Validando la solicitud…`,"createPage.progress.fetch-source-branch":`Obteniendo la rama de origen desde origin…`,"createPage.progress.inspect-worktree":`Inspeccionando el worktree existente…`,"createPage.progress.extract-notion":`Extrayendo la página de Notion…`,"createPage.progress.extract-sentry":`Extrayendo la incidencia de Sentry…`,"createPage.progress.create-record":`Creando el workspace…`,"createPage.progress.create-tasks":`Creando tareas y criterios de aceptación…`,"createPage.progress.create-worktree":`Creando el worktree de git…`,"createPage.progress.write-conventions":`Escribiendo las convenciones de git…`,"createPage.progress.write-context-files":`Escribiendo los archivos de contexto…`,"createPage.progress.build-prompt":`Construyendo el prompt inicial…`,"createPage.progress.setup-script":`Ejecutando tu script de instalación…`,"createPage.progress.start-agent":`Iniciando el agente…`,"createPage.progress.rollback":`Deshaciendo la creación fallida…`,"createPage.progress.done":`Listo`,"createPage.progress.step":`Paso {index} de {total}`,"createPage.errorAtStep":`La creación falló en el paso «{step}»: {message}`,"createPage.override.title":`Dos de tus opciones fueron sustituidas`,"createPage.override.setup-script-forced":`Script de instalación omitido: volver a ejecutarlo en un worktree que ya preparaste podría destruir su contenido.`,"createPage.override.permission-mode-downgraded":`Modo de permisos cambiado de Plan a Bypass: un bucle autónomo no puede ejecutarse en Plan, que bloquea herramientas y ediciones.`,"settings.title":`Ajustes`,"settings.language":`Idioma`,"settings.projectColor":`Color`,"settings.projectColorClear":`Borrar`,"settings.projectColorDefault":`Por defecto (gris)`,"settings.workspaceListSection":`Lista de workspaces`,"settings.flattenWorkspaceList":`Lista plana de workspaces`,"settings.flattenWorkspaceListHint":`Muestra todos los workspaces en una lista plana con una etiqueta de proyecto, en lugar de agruparlos por proyecto.`,"settings.skillSuite.section":`Suite de skills`,"settings.skillSuite.superpowers":`Superpowers`,"settings.skillSuite.gstack":`gstack`,"settings.skillSuite.custom":`Personalizado`,"settings.skillSuite.superpowersHint":`Workflow opinado TDD / brainstorm / plan (github.com/obra/superpowers).`,"settings.skillSuite.gstackHint":`Suite de Garry Tan — /review, /ship, /qa, /office-hours, etc. (github.com/garrytan/gstack).`,"settings.skillSuite.superpowersGstack":`Superpowers + gstack`,"settings.skillSuite.superpowersGstackHint":`Ambas suites se combinan — superpowers para la metodología (brainstorm / TDD / planes / revisión a nivel de principios), gstack para flujos concretos (/review, /qa, /browse, /design-review, /investigate).`,"settings.skillSuite.ecc":`ECC`,"settings.skillSuite.eccHint":`Framework de agentes de affaan-m — agents, skills, rules y hooks para planificar, probar, implementar, revisar y memorizar (github.com/affaan-m/ECC).`,"settings.skillSuite.allThree":`Superpowers + gstack + ECC`,"settings.skillSuite.allThreeHint":`Las tres suites se combinan — superpowers para la metodología, gstack para flujos concretos, ECC para pases de revisión/implementación multiagente estructurados.`,"settings.skillSuite.customHint":`Compón los cinco prompts a continuación con los templates que elijas y edítalos libremente.`,"settings.skillSuite.reloadDefaults":`Restaurar predeterminados`,"settings.skillSuite.reloadDefaultsConfirm":`¿Reemplazar los cinco prompts personalizados con los valores agnósticos predeterminados?`,"settings.skillSuite.customPrompts":`Prompts personalizados`,"settings.skillSuite.agnostic":`Base agnóstica`,"settings.skillSuite.importPrompt":`Importar un template`,"settings.skillSuite.imported":`Template importado. Ahora puedes editarlo.`,"settings.skillSuite.importFailed":`No se pudo importar el template`,"settings.skillSuite.reviewTemplate":`Template de revisión`,"settings.skillSuite.autoLoopReviewGate":`Compuerta de revisión auto-loop`,"settings.skillSuite.autoLoopGroomingIntro":`Intro de grooming auto-loop`,"settings.skillSuite.qaTemplate":`Template QA`,"settings.skillSuite.brainstormingInstruction":`Instrucción de la fase de brainstorming`,"settings.global":`Global`,"settings.projects":`Proyectos`,"settings.globalSettings":`Ajustes globales`,"settings.defaultModel":`Modelo por defecto`,"settings.defaultModelClaude":`Modelo por defecto (Claude Code)`,"settings.defaultModelCodex":`Modelo por defecto (OpenAI Codex)`,"settings.agentPermissions":`Permisos del agente`,"settings.skipPermissions":`Omitir solicitudes de permisos (--dangerously-skip-permissions)`,"settings.skipPermissionsWarning":`Advertencia: desactivar esto hará que todos los permisos de herramientas (Write, Edit, Bash...) se denieguen automáticamente en modo headless. El agente solo podrá leer.`,"settings.notifications":`Notificaciones`,"settings.browserNotifications":`Notificación del navegador cuando el agente termina`,"settings.audioNotifications":`Notificación sonora cuando el agente termina`,"settings.enableBrowserNotifications":`Activar las notificaciones del navegador`,"settings.testBrowserNotification":`Probar la notificación`,"settings.browserNotificationGranted":`Notificaciones del navegador permitidas`,"settings.browserNotificationDenied":`Notificaciones del navegador bloqueadas`,"settings.browserNotificationAsk":`Se requiere permiso del navegador`,"settings.browserNotificationUnsupported":`Notificaciones del navegador no disponibles`,"settings.browserNotificationPermissionNeeded":`Permite las notificaciones del navegador para enviar una prueba.`,"settings.browserNotificationTestTitle":`Prueba de notificación de Kōbō`,"settings.browserNotificationTestBody":`Las notificaciones del navegador funcionan.`,"settings.enableAudio":`Activar el audio`,"settings.notificationSound":`Sonido de notificación`,"settings.notificationSoundHint":`Se reproduce cuando el agente termina o solicita permiso.`,"settings.questionSound":`Sonido de preguntas`,"settings.questionSoundHint":`Se reproduce solo cuando el agente te hace una pregunta.`,"settings.workspaceCreatedSound":`Sonido de creación del espacio de trabajo`,"settings.workspaceCreatedSoundHint":`Se reproduce después de crear un espacio de trabajo.`,"settings.notificationSoundPreview":`Escuchar`,"settings.notificationVolume":`Volumen`,"settings.notificationSoundHey":`Hey`,"settings.agentErrorSound":`Errores del agente`,"settings.agentErrorSoundHint":`Se reproduce para cuotas, límites de tasa y errores del agente.`,"settings.notificationSoundBasic":`Notificación básica`,"settings.notificationSoundWorkspaceCreated":`Warcraft III — Trabajo`,"settings.notificationSoundTravailTermine":`Trabajo terminado`,"settings.notificationSoundFaaah":`Faaah`,"settings.notificationSoundCaVaPeter":`Va a explotar`,"settings.notificationSoundDryFart":`Dry fart`,"settings.notificationSoundForShure":`For shure`,"settings.prSoundSection":`PR / MR y CI`,"settings.soundGeneral":`Sonido general`,"settings.soundNone":`Sin sonido`,"settings.prCiFailedSound":`CI fallida`,"settings.prCiRecoveredSound":`CI recuperada`,"settings.prChangesRequestedSound":`Cambios solicitados`,"settings.prApprovedSound":`PR aprobada`,"settings.prMergeConflictSound":`Conflicto de merge`,"settings.prReadyToMergeSound":`Lista para merge`,"settings.prMergedSound":`PR fusionada`,"settings.prCiFailedSoundHint":`Se reproduce cuando la CI pasa a estado fallido.`,"settings.prCiRecoveredSoundHint":`Se reproduce cuando la CI se recupera de un fallo.`,"settings.prChangesRequestedSoundHint":`Se reproduce cuando una revisión solicita cambios.`,"settings.prApprovedSoundHint":`Se reproduce cuando se aprueba la pull request.`,"settings.prMergeConflictSoundHint":`Se reproduce cuando se detecta un conflicto de merge.`,"settings.prReadyToMergeSoundHint":`Se reproduce cuando la pull request está lista para merge.`,"settings.prMergedSoundHint":`Se reproduce cuando se fusiona la pull request.`,"settings.notificationSoundSeptiemeCompagnie03":`7ème compagnie 03`,"settings.notificationSoundAllerFtg":`Aller FTG`,"settings.notificationSoundArreteDeMentir":`Arrête de mentir`,"settings.notificationSoundArretezLesMessages":`Arrêtez d'envoyer les messages`,"settings.notificationSoundBahAlorsOnEstNul":`Bah alors, on est nul`,"settings.notificationSoundGtaVDeath":`GTA V — Death`,"settings.notificationSoundNanTuDegages":`Nan, tu dégages`,"settings.notificationSoundNanWallahPardon":`Nan, wallah, pardon`,"settings.notificationSoundOuaisCestGreg":`Ouais, c'est Greg`,"settings.notificationSoundPasCaZinedine":`Pas ça, Zinedine`,"settings.notificationSoundTaGueule":`Ta gueule`,"settings.notificationSoundTuVasLaFermer":`Tu vas la fermer`,"settings.notificationSoundYaaa":`Yaaa`,"settings.notificationSoundMaisLaisseMoiDormirZebi":`Mais laisse-moi dormir zebi`,"settings.defaultPermissionMode":`Modo de permisos por defecto`,"settings.defaultPermissionModeClaude":`Modo de permisos por defecto (Claude Code)`,"settings.defaultPermissionModeCodex":`Modo de permisos por defecto (OpenAI Codex)`,"settings.defaultPermissionModeHint":`Modo aplicado al crear un workspace. Plan = solo lectura, Bypass = sin avisos, Estricto = auto-aceptar ediciones con allow-list, Interactivo = preguntar antes de cada herramienta.`,"settings.activityFeed":`Feed de actividad`,"settings.showThinkingBlocks":`Mostrar bloques de razonamiento de los agentes`,"settings.whipSettings":`Látigo`,"settings.whipSettingsHint":`Configura el atajo y el volumen opcionales del látigo.`,"settings.whipEnabled":`Activar el látigo`,"settings.whipEnabledHint":`Muestra el látigo interactivo en los workspaces activos compatibles.`,"settings.whipVolume":`Volumen del látigo`,"settings.whipVolumeMasterAudioDisabled":`El audio principal está desactivado. Activa las notificaciones de audio para ajustar el volumen del látigo; el valor guardado se conserva.`,"whip.overlayLabel":`Látigo interactivo`,"whip.overlayInstructions":`Mueve el puntero para controlar el látigo. Pulsa Intro o Espacio para hacerlo chasquear. Pulsa Escape para cerrar.`,"settings.whipShortcut":`Atajo del látigo`,"settings.whipShortcutHint":`Haz clic y luego pulsa el atajo que quieras usar.`,"settings.whipShortcutRecording":`Pulsa un atajo…`,"settings.whipShortcutButtonLabel":`Atajo del látigo: {shortcut}`,"settings.whipShortcutRecordingLabel":`Grabando el atajo del látigo. Pulsa un atajo…`,"settings.whipShortcutReset":`Restablecer atajo`,"settings.whipShortcutReserved":`Este atajo está reservado por el navegador.`,"settings.testIntegration":`Probar conexión`,"pwa.offline":`No tienes conexión. El chat y los agentes necesitan el servidor Kōbō.`,"pwa.reconnecting":`Reconectando al servidor Kōbō…`,"pwa.installReady":`Instala Kōbō como aplicación.`,"pwa.install":`Instalar`,"pwa.ignore":`Ignorar`,"pwa.updateReady":`Hay una actualización de Kōbō disponible.`,"pwa.reload":`Recargar`,"chat.searchWorkspaceHistory":`Buscar en el historial del workspace`,"chat.historySearch.user":`Tú`,"chat.historySearch.agent":`Agente`,"chat.openInGitDiff":`Abrir en el diff de Git`,"timeline.title":`Cronología de sesiones`,"timeline.export":`Exportar diagnóstico`,"timeline.unnamed":`Sesión de agente`,"timeline.tools":`{count} herramientas`,"timeline.errors":`{count} errores`,"settings.verboseMessages":`Mostrar mensajes detallados del sistema (task_progress, task_started)`,"settings.availableVariables":`Variables disponibles en las plantillas de prompt`,"settings.prPromptTemplate":`Plantilla de prompt PR`,"settings.prPromptPlaceholder":`Instrucciones para el agente al crear PRs en GitHub...`,"settings.prPromptHint":`Usa las variables listadas arriba (sintaxis de dobles llaves).`,"settings.reviewPromptTemplate":`Plantilla de prompt de revisión`,"settings.reviewPromptPlaceholder":`Instrucciones para el agente al revisar los cambios de la rama...`,"settings.ciFixPromptTemplate":`Plantilla de prompt «Reparar CI»`,"settings.ciFixPromptHint":`Se envía al agente cuando un workspace tiene la CI fallando. Variables (sintaxis con dobles llaves): pr_url, pr_number, pr_title, branch_name, source_branch, workspace_name, workspace_id, project_name, failed_jobs, ci_run_url.`,"settings.ciFixPromptPlaceholder":`Pedir al agente que diagnostique y arregle los jobs de CI que fallan...`,"settings.finalizationPromptTemplate":`Prompt de finalización del auto-loop`,"settings.finalizationPromptHint":`Prompt por defecto para la última iteración del auto-loop (controles de calidad finales). Se usa cuando un proyecto deja vacío su propio prompt de finalización.`,"settings.finalizationPromptPlaceholder":`Run final quality checks before closing the workspace...`,"settings.notionInitialPrompt":`Prompt inicial de Notion`,"settings.notionInitialPrompt.help":`Se añade al prompt de creación del workspace cuando el workspace tiene un ticket de Notion. Variables: {variables}.`,"settings.notionInitialPrompt.project":`Prompt inicial de Notion (anulación)`,"settings.sentryInitialPrompt":`Prompt inicial de Sentry`,"settings.sentryInitialPrompt.help":`Se añade al prompt de creación del workspace cuando el workspace tiene una issue de Sentry. Variables: {variables}.`,"settings.sentryInitialPrompt.project":`Prompt inicial de Sentry (anulación)`,"settings.initialPrompt.inheritHint":`Dejar en blanco para heredar. Escribe un carácter en blanco para desactivar la inyección a este nivel.`,"settings.resetToDefault":`Restablecer`,"settings.resetFailed":`No se pudo cargar el valor por defecto`,"settings.sentryIntegration":`Integración Sentry`,"settings.var.prNumber":`Número de PR (ej: 42)`,"settings.var.prUrl":`URL completa de la PR creada`,"settings.var.branchName":`Nombre de la rama de trabajo`,"settings.var.sourceBranch":`Rama fuente a la que apunta la PR`,"settings.var.workspaceName":`Nombre del workspace`,"settings.var.projectName":`Último segmento de la ruta del proyecto`,"settings.var.notionUrl":`URL de Notion si está definida, vacía en caso contrario`,"settings.var.commits":`Lista de commits entre source y head`,"settings.var.diffStats":`Resumen shortstat de Git (archivos, inserciones, eliminaciones)`,"settings.var.tasks":`Tareas regulares como lista de verificación`,"settings.var.acceptanceCriteria":`Criterios de aceptación como lista de verificación`,"settings.gitConventions":`Convenciones Git (global)`,"settings.gitConventionsPlaceholder":`# Convenciones Git...`,"settings.gitConventionsHint":`Estas convenciones se escriben en .ai/.git-conventions.md en cada nuevo workspace y deben ser seguidas por el agente antes de cualquier operación Git. Se anulan con convenciones por proyecto si están definidas.`,"settings.setupScript":`Script de setup`,"settings.cleanupScript":`Script de limpieza`,"settings.archiveScript":`Script de archivado`,"settings.archiveScriptHint":`Script de shell ejecutado en el servidor en el worktree cuando se archiva un workspace. Dejar vacío para desactivar.`,"settings.archiveScriptPlaceholder":`p. ej. limpiar contenedores, liberar espacio en disco…`,"settings.hook.sessionEndedTitle":`Hook: sesión finalizada`,"settings.hook.sessionEndedHint":`Se ejecuta cuando termina una sesión del agente, sea cual sea el motivo. Lee KOBO_SESSION_END_REASON (completed / error / killed / watchdog), KOBO_SESSION_STOP_CAUSE, KOBO_AUTOLOOP_ACTIVE, KOBO_SESSION_ID y KOBO_SESSION_EXIT_CODE. Vacío = desactivado.`,"settings.hook.sessionEndedPlaceholder":`p. ej. npm test, o avisar a un canal de chat…`,"settings.hook.prMergedTitle":`Hook: PR fusionada`,"settings.hook.prMergedHint":`Se ejecuta cuando se detecta una PR fusionada, antes de archivar o purgar el workspace: el worktree sigue en disco. Lee KOBO_PR_NUMBER y KOBO_PR_URL. Vacío = desactivado.`,"settings.hook.prMergedPlaceholder":`p. ej. lanzar un despliegue, etiquetar una release…`,"settings.hook.autoLoopDisabledTitle":`Hook: auto-loop detenido`,"settings.hook.autoLoopDisabledHint":`Se ejecuta cada vez que se desactiva el auto-loop, por Kōbō o por ti. Lee KOBO_AUTOLOOP_REASON (completed / stall / error / user-action / awaiting-clarification) y KOBO_TASKS_PENDING. Vacío = desactivado.`,"settings.hook.autoLoopDisabledPlaceholder":`p. ej. enviar un aviso cuando el bucle se atasca…`,"settings.changeSourceBranchScript":`Script para cambiar la rama de origen`,"settings.changeSourceBranchScript.help":`Reemplaza el cherry-pick integrado cuando no está vacío. El script gestiona git, base de la PR, force-push y conflictos; Kōbō solo rechaza si el agente está corriendo y actualiza los metadatos de la rama de origen en exit 0.`,"settings.changeSourceBranchScript.envHelp":`KOBO_NEW_BASE — nueva rama de origen elegida en el diálogo
|
|
2
2
|
KOBO_OLD_BASE — rama de origen anterior del workspace
|
|
3
3
|
KOBO_WORKING_BRANCH — rama de trabajo del workspace
|
|
4
4
|
KOBO_WORKTREE_PATH — ruta absoluta del worktree (también cwd)
|
package/src/client/dist/pwa/assets/{expand-template-DY8ntqUb.js → expand-template-DXzAXadA.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as e,C as t,wt as n,yt as r}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as i,A as a,B as o,Bt as s,Rt as c,U as l,V as u,W as d,Wt as f,Z as p,fn as m,j as h,st as g,ut as _,vt as v,w as y,yn as b}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{n as x}from"./vue-i18n-DtajJy_8.js";import{I as S,M as C,S as w,X as T,Z as E,b as D,c as O,l as k,y as ee}from"./QBtn-B7WFdfmy.js";import{a as A,i as j}from"./pinia-ClsyLh3i.js";import{tt as M}from"./index-Ck1_qrff.js";import{v as N}from"./permissionModes-CJZsT9Fl.js";import{n as P}from"./use-quasar-B4eIgSfZ.js";import{a as F,i as I,n as L,o as R,r as z,s as B}from"./efforts-Db4w0alg.js";function V(e){e.keyCode===32&&T(e)}var H=E({name:`StepHeader`,props:{stepper:{},step:{},goToPanel:Function},setup(e,{attrs:n}){let{proxy:{$q:r}}=g(),i=t(null),a=o(()=>e.stepper.modelValue===e.step.name),s=o(()=>{let t=e.step.disable;return t===!0||t===``}),c=o(()=>{let t=e.step.error;return t===!0||t===``}),l=o(()=>{let t=e.step.done;return!s.value&&(t===!0||t===``)}),u=o(()=>{let t=e.step.headerNav;return!s.value&&e.stepper.headerNav&&(t===!0||t===``||t===void 0)}),d=o(()=>e.step.prefix&&(!a.value||e.stepper.activeIcon===`none`)&&(!c.value||e.stepper.errorIcon===`none`)&&(!l.value||e.stepper.doneIcon===`none`)),f=o(()=>{let t=e.step.icon||e.stepper.inactiveIcon;if(a.value){let n=e.step.activeIcon||e.stepper.activeIcon;return n===`none`?t:n||r.iconSet.stepper.active}if(c.value){let n=e.step.errorIcon||e.stepper.errorIcon;return n===`none`?t:n||r.iconSet.stepper.error}if(!s.value&&l.value){let n=e.step.doneIcon||e.stepper.doneIcon;return n===`none`?t:n||r.iconSet.stepper.done}return t}),p=o(()=>{let t=c.value?e.step.errorColor||e.stepper.errorColor:void 0;if(a.value){let n=e.step.activeColor||e.stepper.activeColor||e.step.color;return n===void 0?t:n}return t===void 0?!s.value&&l.value?e.step.doneColor||e.stepper.doneColor||e.step.color||e.stepper.inactiveColor:e.step.color||e.stepper.inactiveColor:t}),m=o(()=>`q-stepper__tab col-grow flex items-center no-wrap relative-position`+(p.value===void 0?``:` text-${p.value}`)+(c.value?` q-stepper__tab--error q-stepper__tab--error-with-`+(d.value?`prefix`:`icon`):``)+(a.value?` q-stepper__tab--active`:``)+(l.value?` q-stepper__tab--done`:``)+(u.value?` q-stepper__tab--navigation q-focusable q-hoverable`:``)+(s.value?` q-stepper__tab--disabled`:``)),h=o(()=>e.stepper.headerNav&&u.value);function v(){i.value?.focus({preventScroll:!0}),a.value||e.goToPanel(e.step.name)}function y(t){[13,32].includes(t.keyCode)&&(a.value||e.goToPanel(e.step.name),T(t))}return()=>{let t={class:m.value};u.value&&(t.onClick=v,t.onKeydown=V,t.onKeyup=y,t.role=`button`,t[`aria-current`]=a.value?`step`:void 0,Object.assign(t,s.value?{tabindex:-1,"aria-disabled":`true`}:{tabindex:n.tabindex||0}));let r=[_(`div`,{class:`q-focus-helper`,tabindex:-1,ref:i}),_(`div`,{class:`q-stepper__dot row flex-center q-stepper__line relative-position`},[_(`span`,{class:`row flex-center`},[d.value?e.step.prefix:_(k,{name:f.value})])])];if(e.step.title!==void 0&&e.step.title!==null){let t=[_(`div`,{class:`q-stepper__title`},e.step.title)];e.step.caption!==void 0&&e.step.caption!==null&&t.push(_(`div`,{class:`q-stepper__caption`},e.step.caption)),r.push(_(`div`,{class:`q-stepper__label q-stepper__line relative-position`},t))}return b(_(`div`,t,r),[[O,h.value]])}}});function U(e){return _(`div`,{class:`q-stepper__step-content`},[_(`div`,{class:`q-stepper__step-inner`},w(e.default))])}var W={setup(e,{slots:t}){return()=>U(t)}},G=E({name:`QStep`,props:{...z,icon:String,color:String,title:{type:String,required:!0},caption:String,prefix:[String,Number],doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String,headerNav:{type:Boolean,default:!0},done:Boolean,error:Boolean,onScroll:[Function,Array]},setup(e,{slots:n,emit:r}){let{proxy:{$q:i}}=g(),a=v(S,C);if(a===C)return console.error(`QStep needs to be a child of QStepper`),C;let{getCache:s}=R(),c=t(null),l=o(()=>a.value.modelValue===e.name),u=o(()=>!i.platform.is.ios&&i.platform.is.chrome||!l.value||!a.value.vertical?{}:{onScroll(t){let{target:n}=t;n.scrollTop>0&&(n.scrollTop=0),e.onScroll!==void 0&&r(`scroll`,t)}}),d=o(()=>typeof e.name==`string`||typeof e.name==`number`?e.name:String(e.name));function f(){let e=a.value.vertical;return e&&a.value.keepAlive?_(h,a.value.keepAliveProps.value,l.value?[_(a.value.needsUniqueKeepAliveWrapper.value?s(d.value,()=>({...W,name:d.value})):W,{key:d.value},n.default)]:void 0):!e||l.value?U(n):void 0}return()=>_(`div`,{ref:c,class:`q-stepper__step`,role:`tabpanel`,...u.value},a.value.vertical?[_(H,{stepper:a.value,step:e,goToPanel:a.value.goToPanel}),a.value.animated?_(N,f):f()]:[f()])}}),te=/(-\w)/g;function K(e){let t={};for(let n in e){let r=n.replace(te,e=>e[1].toUpperCase());t[r]=e[n]}return t}var q=E({name:`QStepper`,props:{...A,...F,flat:Boolean,bordered:Boolean,alternativeLabels:Boolean,headerNav:Boolean,contracted:Boolean,headerClass:String,inactiveColor:String,inactiveIcon:String,doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String},emits:I,setup(e,{slots:t}){let n=g(),r=j(e,n.proxy.$q),{updatePanelsList:i,isValidPanelName:a,updatePanelIndex:c,getPanelContent:l,getPanels:u,panelDirectives:d,goToPanel:f,keepAliveProps:p,needsUniqueKeepAliveWrapper:m}=L();s(S,o(()=>({goToPanel:f,keepAliveProps:p,needsUniqueKeepAliveWrapper:m,...e})));let h=o(()=>`q-stepper q-stepper--${e.vertical?`vertical`:`horizontal`}`+(e.flat?` q-stepper--flat`:``)+(e.bordered?` q-stepper--bordered`:``)+(r.value?` q-stepper--dark q-dark`:``)),v=o(()=>`q-stepper__header row items-stretch justify-between q-stepper__header--${e.alternativeLabels?`alternative`:`standard`}-labels`+(e.bordered||!e.flat?` q-stepper__header--border`:``)+(e.contracted?` q-stepper__header--contracted`:``)+(e.headerClass===void 0?``:` ${e.headerClass}`));function y(){let n=w(t.message,[]);if(e.vertical){a(e.modelValue)&&c();let r=_(`div`,{class:`q-stepper__content`},w(t.default));return n===void 0?[r]:n.concat(r)}return[_(`div`,{class:v.value},u().map(t=>{let n=K(t.props);return _(H,{key:n.name,stepper:e,step:n,goToPanel:f})})),n,ee(`div`,{class:`q-stepper__content q-panel-parent`},l(),`cont`,e.swipeable,()=>d.value)]}return()=>(i(t),_(`div`,{class:h.value},D(t.navigation,y())))}}),J={class:`slash-suggestions rounded-borders`},Y={class:`slash-section-header`},X=[`onMousedown`],Z={class:`slash-name text-caption`},Q={class:`slash-section-header`},ne=[`onMousedown`],re={class:`slash-name text-caption`},ie={key:0,class:`slash-description text-caption text-kobo-3 q-ml-xs`},ae={class:`slash-section-header`},oe=[`onMousedown`],$={class:`slash-name text-caption`},se={key:0,class:`slash-description text-caption text-kobo-3 q-ml-xs`},ce=P(i({__name:`SlashSuggestionsPopup`,props:{groupedDropdown:{},flatDropdown:{},selectedIndex:{}},emits:[`select`],setup(t,{emit:i}){let{t:o}=x(),s=i;function m(e){let t=B[`/${e}`];if(!t)return``;let n=t.descriptionKey,r=o(n);return r===n?``:r}return(i,h)=>(c(),d(`div`,J,[t.groupedDropdown.skills.length>0?(c(),d(a,{key:0},[u(`div`,Y,n(e(o)(`chatInput.dropdownSkills`)),1),(c(!0),d(a,null,f(t.groupedDropdown.skills,e=>(c(),d(`div`,{key:`skill-${e.name}`,class:r([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":t.flatDropdown.indexOf(e)===t.selectedIndex}]),onMousedown:y(t=>s(`select`,e),[`prevent`])},[p(k,{name:`bolt`,size:`12px`,color:`primary`,class:`q-mr-xs`}),u(`span`,Z,n(e.name),1)],42,X))),128))],64)):l(``,!0),t.groupedDropdown.kobo.length>0?(c(),d(a,{key:1},[u(`div`,Q,n(e(o)(`chatInput.dropdownKobo`)),1),(c(!0),d(a,null,f(t.groupedDropdown.kobo,e=>(c(),d(`div`,{key:`kobo-${e.name}`,class:r([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":t.flatDropdown.indexOf(e)===t.selectedIndex}]),onMousedown:y(t=>s(`select`,e),[`prevent`])},[p(k,{name:`terminal`,size:`12px`,color:`teal-4`,class:`q-mr-xs`}),u(`span`,re,`/`+n(e.name),1),m(e.name)?(c(),d(`span`,ie,`— `+n(m(e.name)),1)):l(``,!0)],42,ne))),128))],64)):l(``,!0),t.groupedDropdown.templates.length>0?(c(),d(a,{key:2},[u(`div`,ae,n(e(o)(`chatInput.dropdownTemplates`)),1),(c(!0),d(a,null,f(t.groupedDropdown.templates,e=>(c(),d(`div`,{key:`tpl-${e.name}`,class:r([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":t.flatDropdown.indexOf(e)===t.selectedIndex}]),onMousedown:y(t=>s(`select`,e),[`prevent`])},[p(k,{name:`description`,size:`12px`,color:`amber-4`,class:`q-mr-xs`}),u(`span`,$,`/`+n(e.name),1),e.description?(c(),d(`span`,se,`— `+n(e.description),1)):l(``,!0)],42,oe))),128))],64)):l(``,!0)]))}}),[[`__scopeId`,`data-v-931c9d69`]]);function le(e,n,r={}){let i=M(),a=t([]),s=t(!1),c=t(``),l=t(0),u=0;async function d(){let e=Date.now();if(!(e-u<5e3&&a.value.length>0)){u=e;try{let e=await fetch(`/api/skills`);e.ok&&(a.value=await e.json())}catch{}}}function f(){let t=n();if(!t)return null;let r=t.selectionStart??e.value.length,i=e.value.slice(0,r).match(/\/([\w:.-]*)$/);return i?i[1]:null}async function p(){let e=f();e===null?s.value=!1:(await d(),c.value=e,s.value=!0,l.value=0)}function h(){s.value=!1}function g(t){let r=n();if(!r){e.value=t;return}let i=r.selectionStart??e.value.length,a=e.value.slice(0,i),o=e.value.slice(i),s=a.match(/\/[\w:.-]*$/);if(!s){e.value=t;return}let c=s.index??i;e.value=e.value.slice(0,c)+t+o}let _=o(()=>{let e=c.value.toLowerCase(),t=t=>e===``||t.toLowerCase().includes(e);return{skills:a.value.filter(e=>t(e)).map(e=>({type:`skill`,name:e})),kobo:r.excludeKoboCommands?[]:Object.keys(B).map(e=>e.replace(/^\//,``)).filter(e=>t(e)).map(e=>({type:`kobo`,name:e})),templates:i.templates.filter(e=>t(e.slug)).map(e=>({type:`template`,name:e.slug,description:e.description}))}}),v=o(()=>[..._.value.skills,..._.value.kobo,..._.value.templates]);return m(()=>v.value.length,e=>{if(e===0){l.value=0;return}l.value>=e&&(l.value=e-1)}),{skills:a,showSkills:s,skillFilter:c,selectedSkillIndex:l,groupedDropdown:_,flatDropdown:v,fetchSkills:d,detectSlashFragment:p,replaceFragmentWith:g,closeDropdown:h}}function ue(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>{let r=t[n];return r==null?e:String(r)})}function de(e){let t={};return e.workspace&&(t.workspace_name=e.workspace.name,t.working_branch=e.workspace.workingBranch,t.source_branch=e.workspace.sourceBranch,t.project_path=e.workspace.projectPath,t.worktree_path=e.workspace.worktreePath??`${e.workspace.projectPath}/.worktrees/${e.workspace.workingBranch}`),e.gitStats&&(t.commit_count=e.gitStats.commitCount,t.unpushed_count=e.gitStats.unpushedCount,t.files_changed=e.gitStats.filesChanged,t.insertions=e.gitStats.insertions,t.deletions=e.gitStats.deletions,e.gitStats.prNumber!=null&&(t.pr_number=e.gitStats.prNumber),e.gitStats.prUrl&&(t.pr_url=e.gitStats.prUrl),e.gitStats.prState&&(t.pr_state=e.gitStats.prState)),e.sessionName&&(t.session_name=e.sessionName),t}export{q as a,ce as i,ue as n,G as o,le as r,de as t};
|
|
1
|
+
import{B as e,C as t,wt as n,yt as r}from"./reactivity.esm-bundler-DtSZKRQB.js";import{$ as i,A as a,B as o,Bt as s,Rt as c,U as l,V as u,W as d,Wt as f,Z as p,fn as m,j as h,st as g,ut as _,vt as v,w as y,yn as b}from"./runtime-dom.esm-bundler-DgevF6KV.js";import{n as x}from"./vue-i18n-DtajJy_8.js";import{I as S,M as C,S as w,X as T,Z as E,b as D,c as O,l as k,y as ee}from"./QBtn-B7WFdfmy.js";import{a as A,i as j}from"./pinia-ClsyLh3i.js";import{tt as M}from"./index-BgV6UXly.js";import{v as N}from"./permissionModes-BR2CNlno.js";import{n as P}from"./use-quasar-B2sgdABh.js";import{a as F,i as I,n as L,o as R,r as z,s as B}from"./efforts-CFRBNt5s.js";function V(e){e.keyCode===32&&T(e)}var H=E({name:`StepHeader`,props:{stepper:{},step:{},goToPanel:Function},setup(e,{attrs:n}){let{proxy:{$q:r}}=g(),i=t(null),a=o(()=>e.stepper.modelValue===e.step.name),s=o(()=>{let t=e.step.disable;return t===!0||t===``}),c=o(()=>{let t=e.step.error;return t===!0||t===``}),l=o(()=>{let t=e.step.done;return!s.value&&(t===!0||t===``)}),u=o(()=>{let t=e.step.headerNav;return!s.value&&e.stepper.headerNav&&(t===!0||t===``||t===void 0)}),d=o(()=>e.step.prefix&&(!a.value||e.stepper.activeIcon===`none`)&&(!c.value||e.stepper.errorIcon===`none`)&&(!l.value||e.stepper.doneIcon===`none`)),f=o(()=>{let t=e.step.icon||e.stepper.inactiveIcon;if(a.value){let n=e.step.activeIcon||e.stepper.activeIcon;return n===`none`?t:n||r.iconSet.stepper.active}if(c.value){let n=e.step.errorIcon||e.stepper.errorIcon;return n===`none`?t:n||r.iconSet.stepper.error}if(!s.value&&l.value){let n=e.step.doneIcon||e.stepper.doneIcon;return n===`none`?t:n||r.iconSet.stepper.done}return t}),p=o(()=>{let t=c.value?e.step.errorColor||e.stepper.errorColor:void 0;if(a.value){let n=e.step.activeColor||e.stepper.activeColor||e.step.color;return n===void 0?t:n}return t===void 0?!s.value&&l.value?e.step.doneColor||e.stepper.doneColor||e.step.color||e.stepper.inactiveColor:e.step.color||e.stepper.inactiveColor:t}),m=o(()=>`q-stepper__tab col-grow flex items-center no-wrap relative-position`+(p.value===void 0?``:` text-${p.value}`)+(c.value?` q-stepper__tab--error q-stepper__tab--error-with-`+(d.value?`prefix`:`icon`):``)+(a.value?` q-stepper__tab--active`:``)+(l.value?` q-stepper__tab--done`:``)+(u.value?` q-stepper__tab--navigation q-focusable q-hoverable`:``)+(s.value?` q-stepper__tab--disabled`:``)),h=o(()=>e.stepper.headerNav&&u.value);function v(){i.value?.focus({preventScroll:!0}),a.value||e.goToPanel(e.step.name)}function y(t){[13,32].includes(t.keyCode)&&(a.value||e.goToPanel(e.step.name),T(t))}return()=>{let t={class:m.value};u.value&&(t.onClick=v,t.onKeydown=V,t.onKeyup=y,t.role=`button`,t[`aria-current`]=a.value?`step`:void 0,Object.assign(t,s.value?{tabindex:-1,"aria-disabled":`true`}:{tabindex:n.tabindex||0}));let r=[_(`div`,{class:`q-focus-helper`,tabindex:-1,ref:i}),_(`div`,{class:`q-stepper__dot row flex-center q-stepper__line relative-position`},[_(`span`,{class:`row flex-center`},[d.value?e.step.prefix:_(k,{name:f.value})])])];if(e.step.title!==void 0&&e.step.title!==null){let t=[_(`div`,{class:`q-stepper__title`},e.step.title)];e.step.caption!==void 0&&e.step.caption!==null&&t.push(_(`div`,{class:`q-stepper__caption`},e.step.caption)),r.push(_(`div`,{class:`q-stepper__label q-stepper__line relative-position`},t))}return b(_(`div`,t,r),[[O,h.value]])}}});function U(e){return _(`div`,{class:`q-stepper__step-content`},[_(`div`,{class:`q-stepper__step-inner`},w(e.default))])}var W={setup(e,{slots:t}){return()=>U(t)}},G=E({name:`QStep`,props:{...z,icon:String,color:String,title:{type:String,required:!0},caption:String,prefix:[String,Number],doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String,headerNav:{type:Boolean,default:!0},done:Boolean,error:Boolean,onScroll:[Function,Array]},setup(e,{slots:n,emit:r}){let{proxy:{$q:i}}=g(),a=v(S,C);if(a===C)return console.error(`QStep needs to be a child of QStepper`),C;let{getCache:s}=R(),c=t(null),l=o(()=>a.value.modelValue===e.name),u=o(()=>!i.platform.is.ios&&i.platform.is.chrome||!l.value||!a.value.vertical?{}:{onScroll(t){let{target:n}=t;n.scrollTop>0&&(n.scrollTop=0),e.onScroll!==void 0&&r(`scroll`,t)}}),d=o(()=>typeof e.name==`string`||typeof e.name==`number`?e.name:String(e.name));function f(){let e=a.value.vertical;return e&&a.value.keepAlive?_(h,a.value.keepAliveProps.value,l.value?[_(a.value.needsUniqueKeepAliveWrapper.value?s(d.value,()=>({...W,name:d.value})):W,{key:d.value},n.default)]:void 0):!e||l.value?U(n):void 0}return()=>_(`div`,{ref:c,class:`q-stepper__step`,role:`tabpanel`,...u.value},a.value.vertical?[_(H,{stepper:a.value,step:e,goToPanel:a.value.goToPanel}),a.value.animated?_(N,f):f()]:[f()])}}),te=/(-\w)/g;function K(e){let t={};for(let n in e){let r=n.replace(te,e=>e[1].toUpperCase());t[r]=e[n]}return t}var q=E({name:`QStepper`,props:{...A,...F,flat:Boolean,bordered:Boolean,alternativeLabels:Boolean,headerNav:Boolean,contracted:Boolean,headerClass:String,inactiveColor:String,inactiveIcon:String,doneIcon:String,doneColor:String,activeIcon:String,activeColor:String,errorIcon:String,errorColor:String},emits:I,setup(e,{slots:t}){let n=g(),r=j(e,n.proxy.$q),{updatePanelsList:i,isValidPanelName:a,updatePanelIndex:c,getPanelContent:l,getPanels:u,panelDirectives:d,goToPanel:f,keepAliveProps:p,needsUniqueKeepAliveWrapper:m}=L();s(S,o(()=>({goToPanel:f,keepAliveProps:p,needsUniqueKeepAliveWrapper:m,...e})));let h=o(()=>`q-stepper q-stepper--${e.vertical?`vertical`:`horizontal`}`+(e.flat?` q-stepper--flat`:``)+(e.bordered?` q-stepper--bordered`:``)+(r.value?` q-stepper--dark q-dark`:``)),v=o(()=>`q-stepper__header row items-stretch justify-between q-stepper__header--${e.alternativeLabels?`alternative`:`standard`}-labels`+(e.bordered||!e.flat?` q-stepper__header--border`:``)+(e.contracted?` q-stepper__header--contracted`:``)+(e.headerClass===void 0?``:` ${e.headerClass}`));function y(){let n=w(t.message,[]);if(e.vertical){a(e.modelValue)&&c();let r=_(`div`,{class:`q-stepper__content`},w(t.default));return n===void 0?[r]:n.concat(r)}return[_(`div`,{class:v.value},u().map(t=>{let n=K(t.props);return _(H,{key:n.name,stepper:e,step:n,goToPanel:f})})),n,ee(`div`,{class:`q-stepper__content q-panel-parent`},l(),`cont`,e.swipeable,()=>d.value)]}return()=>(i(t),_(`div`,{class:h.value},D(t.navigation,y())))}}),J={class:`slash-suggestions rounded-borders`},Y={class:`slash-section-header`},X=[`onMousedown`],Z={class:`slash-name text-caption`},Q={class:`slash-section-header`},ne=[`onMousedown`],re={class:`slash-name text-caption`},ie={key:0,class:`slash-description text-caption text-kobo-3 q-ml-xs`},ae={class:`slash-section-header`},oe=[`onMousedown`],$={class:`slash-name text-caption`},se={key:0,class:`slash-description text-caption text-kobo-3 q-ml-xs`},ce=P(i({__name:`SlashSuggestionsPopup`,props:{groupedDropdown:{},flatDropdown:{},selectedIndex:{}},emits:[`select`],setup(t,{emit:i}){let{t:o}=x(),s=i;function m(e){let t=B[`/${e}`];if(!t)return``;let n=t.descriptionKey,r=o(n);return r===n?``:r}return(i,h)=>(c(),d(`div`,J,[t.groupedDropdown.skills.length>0?(c(),d(a,{key:0},[u(`div`,Y,n(e(o)(`chatInput.dropdownSkills`)),1),(c(!0),d(a,null,f(t.groupedDropdown.skills,e=>(c(),d(`div`,{key:`skill-${e.name}`,class:r([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":t.flatDropdown.indexOf(e)===t.selectedIndex}]),onMousedown:y(t=>s(`select`,e),[`prevent`])},[p(k,{name:`bolt`,size:`12px`,color:`primary`,class:`q-mr-xs`}),u(`span`,Z,n(e.name),1)],42,X))),128))],64)):l(``,!0),t.groupedDropdown.kobo.length>0?(c(),d(a,{key:1},[u(`div`,Q,n(e(o)(`chatInput.dropdownKobo`)),1),(c(!0),d(a,null,f(t.groupedDropdown.kobo,e=>(c(),d(`div`,{key:`kobo-${e.name}`,class:r([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":t.flatDropdown.indexOf(e)===t.selectedIndex}]),onMousedown:y(t=>s(`select`,e),[`prevent`])},[p(k,{name:`terminal`,size:`12px`,color:`teal-4`,class:`q-mr-xs`}),u(`span`,re,`/`+n(e.name),1),m(e.name)?(c(),d(`span`,ie,`— `+n(m(e.name)),1)):l(``,!0)],42,ne))),128))],64)):l(``,!0),t.groupedDropdown.templates.length>0?(c(),d(a,{key:2},[u(`div`,ae,n(e(o)(`chatInput.dropdownTemplates`)),1),(c(!0),d(a,null,f(t.groupedDropdown.templates,e=>(c(),d(`div`,{key:`tpl-${e.name}`,class:r([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":t.flatDropdown.indexOf(e)===t.selectedIndex}]),onMousedown:y(t=>s(`select`,e),[`prevent`])},[p(k,{name:`description`,size:`12px`,color:`amber-4`,class:`q-mr-xs`}),u(`span`,$,`/`+n(e.name),1),e.description?(c(),d(`span`,se,`— `+n(e.description),1)):l(``,!0)],42,oe))),128))],64)):l(``,!0)]))}}),[[`__scopeId`,`data-v-931c9d69`]]);function le(e,n,r={}){let i=M(),a=t([]),s=t(!1),c=t(``),l=t(0),u=0;async function d(){let e=Date.now();if(!(e-u<5e3&&a.value.length>0)){u=e;try{let e=await fetch(`/api/skills`);e.ok&&(a.value=await e.json())}catch{}}}function f(){let t=n();if(!t)return null;let r=t.selectionStart??e.value.length,i=e.value.slice(0,r).match(/\/([\w:.-]*)$/);return i?i[1]:null}async function p(){let e=f();e===null?s.value=!1:(await d(),c.value=e,s.value=!0,l.value=0)}function h(){s.value=!1}function g(t){let r=n();if(!r){e.value=t;return}let i=r.selectionStart??e.value.length,a=e.value.slice(0,i),o=e.value.slice(i),s=a.match(/\/[\w:.-]*$/);if(!s){e.value=t;return}let c=s.index??i;e.value=e.value.slice(0,c)+t+o}let _=o(()=>{let e=c.value.toLowerCase(),t=t=>e===``||t.toLowerCase().includes(e);return{skills:a.value.filter(e=>t(e)).map(e=>({type:`skill`,name:e})),kobo:r.excludeKoboCommands?[]:Object.keys(B).map(e=>e.replace(/^\//,``)).filter(e=>t(e)).map(e=>({type:`kobo`,name:e})),templates:i.templates.filter(e=>t(e.slug)).map(e=>({type:`template`,name:e.slug,description:e.description}))}}),v=o(()=>[..._.value.skills,..._.value.kobo,..._.value.templates]);return m(()=>v.value.length,e=>{if(e===0){l.value=0;return}l.value>=e&&(l.value=e-1)}),{skills:a,showSkills:s,skillFilter:c,selectedSkillIndex:l,groupedDropdown:_,flatDropdown:v,fetchSkills:d,detectSlashFragment:p,replaceFragmentWith:g,closeDropdown:h}}function ue(e,t){return e.replace(/\{(\w+)\}/g,(e,n)=>{let r=t[n];return r==null?e:String(r)})}function de(e){let t={};return e.workspace&&(t.workspace_name=e.workspace.name,t.working_branch=e.workspace.workingBranch,t.source_branch=e.workspace.sourceBranch,t.project_path=e.workspace.projectPath,t.worktree_path=e.workspace.worktreePath??`${e.workspace.projectPath}/.worktrees/${e.workspace.workingBranch}`),e.gitStats&&(t.commit_count=e.gitStats.commitCount,t.unpushed_count=e.gitStats.unpushedCount,t.files_changed=e.gitStats.filesChanged,t.insertions=e.gitStats.insertions,t.deletions=e.gitStats.deletions,e.gitStats.prNumber!=null&&(t.pr_number=e.gitStats.prNumber),e.gitStats.prUrl&&(t.pr_url=e.gitStats.prUrl),e.gitStats.prState&&(t.pr_state=e.gitStats.prState)),e.sessionName&&(t.session_name=e.sessionName),t}export{q as a,ce as i,ue as n,G as o,le as r,de as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{Q as e,_t as t}from"./index-
|
|
1
|
+
import{Q as e,_t as t}from"./index-BgV6UXly.js";var n;function r(e){if(e.length===0)throw Error(`Invalid tail call`);return[e.slice(0,e.length-1),e[e.length-1]]}function i(e,t,n=(e,t)=>e===t){if(e===t)return!0;if(!e||!t||e.length!==t.length)return!1;for(let r=0,i=e.length;r<i;r++)if(!n(e[r],t[r]))return!1;return!0}function a(e,t){let n=e.length-1;t<n&&(e[t]=e[n]),e.pop()}function o(e,t,n){return s(e.length,r=>n(e[r],t))}function s(e,t){let n=0,r=e-1;for(;n<=r;){let e=(n+r)/2|0,i=t(e);if(i<0)n=e+1;else if(i>0)r=e-1;else return e}return-(n+1)}function c(e,t,n){if(e|=0,e>=t.length)throw TypeError(`invalid index`);let r=t[Math.floor(t.length*Math.random())],i=[],a=[],o=[];for(let e of t){let t=n(e,r);t<0?i.push(e):t>0?a.push(e):o.push(e)}return e<i.length?c(e,i,n):e<i.length+o.length?o[0]:c(e-(i.length+o.length),a,n)}function l(e,t){let n=[],r;for(let i of e.slice(0).sort(t))!r||t(r[0],i)!==0?(r=[i],n.push(r)):r.push(i);return n}function*u(e,t){let n,r;for(let i of e)r!==void 0&&t(r,i)?n.push(i):(n&&(yield n),n=[i]),r=i;n&&(yield n)}function d(e,t){for(let n=0;n<=e.length;n++)t(n===0?void 0:e[n-1],n===e.length?void 0:e[n])}function f(e,t){for(let n=0;n<e.length;n++)t(n===0?void 0:e[n-1],e[n],n+1===e.length?void 0:e[n+1])}function p(e){return e.filter(e=>!!e)}function m(e){let t=0;for(let n=0;n<e.length;n++)e[n]&&(e[t]=e[n],t+=1);e.length=t}function h(e){return!Array.isArray(e)||e.length===0}function g(e){return Array.isArray(e)&&e.length>0}function _(e,t=e=>e){let n=new Set;return e.filter(e=>{let r=t(e);return!n.has(r)&&(n.add(r),!0)})}function v(e,t){let n=typeof t==`number`?e:0;typeof t==`number`?n=e:(n=0,t=e);let r=[];if(n<=t)for(let e=n;e<t;e++)r.push(e);else for(let e=n;e>t;e--)r.push(e);return r}function y(e,t,n){let r=e.slice(0,t),i=e.slice(t);return r.concat(n,i)}function b(e,t){let n=e.indexOf(t);n>-1&&(e.splice(n,1),e.unshift(t))}function x(e,t){let n=e.indexOf(t);n>-1&&(e.splice(n,1),e.push(t))}function S(e,t){for(let n of t)e.push(n)}function C(e,t){let n=[];for(let r of e){let e=t(r);e!==void 0&&n.push(e)}return n}function w(e){return Array.isArray(e)?e:[e]}function ee(e,t,n){let r=ne(e,t),i=e.length,a=n.length;e.length=i+a;for(let t=i-1;t>=r;t--)e[t+a]=e[t];for(let t=0;t<a;t++)e[t+r]=n[t]}function te(e,t,n,r){let i=ne(e,t),a=e.splice(i,n);return a===void 0&&(a=[]),ee(e,i,r),a}function ne(e,t){return t<0?Math.max(t+e.length,0):Math.min(t,e.length)}var re;(function(e){function t(e){return e<0}e.isLessThan=t;function n(e){return e<=0}e.isLessThanOrEqual=n;function r(e){return e>0}e.isGreaterThan=r;function i(e){return e===0}e.isNeitherLessOrGreaterThan=i,e.greaterThan=1,e.lessThan=-1,e.neitherLessOrGreaterThan=0})(re||={});function ie(e,t){return(n,r)=>t(e(n),e(r))}function ae(...e){return(t,n)=>{for(let r of e){let e=r(t,n);if(!re.isNeitherLessOrGreaterThan(e))return e}return re.neitherLessOrGreaterThan}}var oe=(e,t)=>e-t,se=(e,t)=>oe(+!!e,+!!t);function ce(e){return(t,n)=>-e(t,n)}function le(e){return(t,n)=>t===void 0?n===void 0?re.neitherLessOrGreaterThan:re.lessThan:n===void 0?re.greaterThan:e(t,n)}var ue=class{constructor(e){this.firstIdx=0,this.items=e,this.lastIdx=this.items.length-1}get length(){return this.lastIdx-this.firstIdx+1}takeWhile(e){let t=this.firstIdx;for(;t<this.items.length&&e(this.items[t]);)t++;let n=t===this.firstIdx?null:this.items.slice(this.firstIdx,t);return this.firstIdx=t,n}peek(){if(this.length!==0)return this.items[this.firstIdx]}dequeue(){let e=this.items[this.firstIdx];return this.firstIdx++,e}takeCount(e){let t=this.items.slice(this.firstIdx,this.firstIdx+e);return this.firstIdx+=e,t}},de=class e{constructor(e){this.iterate=e}toArray(){let e=[];return this.iterate(t=>(e.push(t),!0)),e}filter(t){return new e(e=>this.iterate(n=>!t(n)||e(n)))}map(t){return new e(e=>this.iterate(n=>e(t(n))))}findLast(e){let t;return this.iterate(n=>(e(n)&&(t=n),!0)),t}findLastMaxBy(e){let t,n=!0;return this.iterate(r=>((n||re.isGreaterThan(e(r,t)))&&(n=!1,t=r),!0)),t}};n=de,n.empty=new n(e=>{});var fe=class e{constructor(e){this._indexMap=e}static createSortPermutation(t,n){let r=Array.from(t.keys()).sort((e,r)=>n(t[e],t[r]));return new e(r)}apply(e){return e.map((t,n)=>e[this._indexMap[n]])}inverse(){let t=this._indexMap.slice();for(let e=0;e<this._indexMap.length;e++)t[this._indexMap[e]]=e;return new e(t)}};function pe(e){return e.reduce((e,t)=>e+t,0)}var me=new class{constructor(){this.listeners=[],this.unexpectedErrorHandler=function(e){setTimeout(()=>{throw e.stack?Ee.isErrorNoTelemetry(e)?new Ee(e.message+`
|
|
2
2
|
|
|
3
3
|
`+e.stack):Error(e.message+`
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var e={"model.tooltip":`Modèle utilisé par l’agent pour ce workspace`,"reasoning.tooltip":`Niveau de raisonnement utilisé par l’agent pour ce workspace`,"thinking.label":`Réflexion`,"thinking.noDetails":`L’agent réfléchit…`,"common.save":`Enregistrer`,"common.confirm":`Confirmer`,"common.cancel":`Annuler`,"common.open":`Ouvrir`,"common.retry":`Réessayer`,"common.delete":`Supprimer`,"common.close":`Fermer`,"workspace.deleteTitle":`Supprimer le workspace`,"workspace.deleteTypeName":`Tapez {name} pour confirmer. Cela supprime le worktree et tout l’historique.`,"workspace.deleteFailed":`Suppression du workspace impossible.`,"workspace.archiveFailed":`Archivage du workspace impossible.`,"tasks.updateFailed":`Mise à jour de la tâche impossible.`,"dashboard.tooltip":`Tableau de bord`,"dashboard.title":`Tableau de bord`,"dashboard.count":`{n} workspace | {n} workspaces`,"dashboard.empty":`Aucun workspace actif.`,"dashboard.workspace":`Workspace`,"dashboard.status":`Statut`,"dashboard.attention":`Attention`,"dashboard.pr":`PR`,"dashboard.diff":`Diff`,"dashboard.activity":`Activité`,"dashboard.prOpen":`ouverte`,"reliability.title":`Fiabilité des modèles`,"reliability.subtitle":`Comment chaque moteur et modèle s'est réellement terminé sur ce poste.`,"reliability.empty":`Aucune session terminée pour l'instant.`,"reliability.loadFailed":`Impossible de charger les chiffres de fiabilité.`,"reliability.engine":`Moteur`,"reliability.model":`Modèle`,"reliability.sessions":`Sessions`,"reliability.completed":`Terminées`,"reliability.watchdog":`Watchdog`,"reliability.killed":`Arrêtées`,"reliability.errors":`Erreurs`,"reliability.unknown":`Inconnu`,"reliability.median":`Médiane`,"reliability.durationSeconds":`{s}s`,"reliability.durationMinutes":`{m}min {s}s`,"reliability.durationHours":`{h}h {m}min`,"update.available":`Une version plus récente de Kōbō est disponible : {version}`,"update.how":`Comment mettre à jour`,"common.dismiss":`Ignorer`,"common.details":`Détails`,"common.ok":`OK`,"whatsNew.title":`Quoi de neuf`,"common.loading":`Chargement...`,"common.search":`Rechercher...`,"common.refresh":`Actualiser`,"common.copy":`Copier`,"common.copied":`Copié dans le presse-papiers`,"common.copyFailed":`Échec de la copie`,"common.add":`Ajouter`,"folderPicker.title":`Choisir un dossier`,"folderPicker.parent":`Dossier parent`,"folderPicker.empty":`Aucun sous-dossier`,"folderPicker.select":`Choisir ce dossier`,"common.start":`Démarrer`,"common.stop":`Arrêter`,"common.archive":`Archiver`,"common.unarchive":`Désarchiver`,"common.selectWorkspace":`Sélectionnez un espace de travail`,"common.noResults":`Aucun résultat pour « {query} »`,"common.send":`envoyer`,"common.newLine":`nouvelle ligne`,"common.history":`historique`,"common.justNow":`a l'instant`,"common.minutesAgo":`il y a {count}m`,"common.hoursAgo":`il y a {count}h`,"common.daysAgo":`il y a {count}j`,"model.auto":`Auto`,"model.fable51":`Fable 5.1`,"model.mythos5":`Mythos 5 (Glasswing)`,"model.fable51Description":`Modèle le plus capable - remplace Fable 5, contexte 1M, adaptive thinking`,"model.mythos5Description":`Fable 5.1 sans classificateurs de sécurité — accès limité (Project Glasswing)`,"model.opus":`Opus 4.6`,"model.sonnet":`Sonnet 4.6`,"model.opus5":`Opus 5`,"model.opus48":`Opus 4.8`,"model.opus47Classic":`Opus 4.7 (Classic)`,"model.opus471m":`Opus 4.7 (1M)`,"model.opusClassic":`Opus 4.6 (Classic)`,"model.opus1m":`Opus 4.6 (1M)`,"model.sonnet5":`Sonnet 5`,"model.sonnetClassic":`Sonnet 4.6 (Classic)`,"model.sonnet1m":`Sonnet 4.6 (1M)`,"model.haiku":`Haiku 4.5`,"model.autoDescription":`Claude choisit le modèle optimal`,"model.opus5Description":`Pour le coding agentique complexe et le travail en entreprise, contexte 1M`,"model.opus48Description":`Opus le plus capable — coding agentique long-horizon, contexte 1M par défaut, effort high par défaut`,"model.opus47ClassicDescription":`Dernier Opus, le plus capable`,"model.opus471mDescription":`Dernier Opus, contexte 1M`,"model.opusClassicDescription":`Le plus puissant`,"model.opus1mDescription":`Le plus puissant, contexte 1M`,"model.sonnet5Description":`Meilleure combinaison vitesse/intelligence, contexte 1M`,"model.sonnetClassicDescription":`Équilibré`,"model.sonnet1mDescription":`Équilibré, contexte 1M`,"model.haikuDescription":`Le plus rapide`,"model.gpt56sol":`GPT-5.6 Sol`,"model.gpt56solDescription":`Dernier modèle de codage agentique de pointe (nécessite une authentification ChatGPT)`,"model.gpt56terra":`GPT-5.6 Terra`,"model.gpt56terraDescription":`Modèle de codage agentique équilibré pour un usage quotidien (nécessite une authentification ChatGPT)`,"model.gpt56luna":`GPT-5.6 Luna`,"model.gpt56lunaDescription":`Modèle de codage agentique rapide et économique (nécessite une authentification ChatGPT)`,"model.gpt55":`GPT-5.5`,"model.gpt55Description":`Recommandé pour le code complexe (nécessite une authentification ChatGPT)`,"model.gpt54":`GPT-5.4`,"model.gpt54Description":`Repli par défaut — raisonnement solide, compatible avec une clé API`,"model.gpt54mini":`GPT-5.4 mini`,"model.gpt54miniDescription":`Rapide et efficient — idéal pour les tâches réactives et les sous-agents`,"model.gpt52":`GPT-5.2`,"model.gpt52Description":`Optimisé pour un usage professionnel et les agents longue durée`,"model.gpt53codex":`GPT-5.3 Codex`,"model.gpt53codexDescription":`Modèle spécialisé code pour l'ingénierie logicielle complexe`,"reasoning.auto":`auto`,"reasoning.minimal":`minimal`,"reasoning.none":`aucun`,"reasoning.low":`low`,"reasoning.medium":`medium`,"reasoning.high":`high`,"reasoning.xhigh":`xhigh`,"reasoning.max":`max`,"reasoning.autoDescription":`Laisse le moteur choisir`,"reasoning.minimalDescription":`Raisonnement le plus rapide et superficiel`,"reasoning.noneDescription":`Sans raisonnement supplémentaire`,"reasoning.lowDescription":`Plus rapide, moins profond`,"reasoning.mediumDescription":`Équilibré`,"reasoning.highDescription":`Plus de profondeur`,"reasoning.xhighDescription":`Profondeur étendue, tâches longues`,"reasoning.maxDescription":`Profondeur maximale`,"agentPermissionMode.label":`Mode de permission`,"agentPermissionMode.plan":`Plan`,"agentPermissionMode.bypass":`Bypass`,"agentPermissionMode.strict":`Strict (édits)`,"agentPermissionMode.interactive":`Interactif`,"agentPermissionMode.tooltip":`Comment l'agent gère les permissions d'outils. Plan : lecture seule, aucune écriture. Bypass : aucune demande. Strict : auto-accept des éditions de fichiers, respect des allow/deny pour le reste. Interactif : demande à l'utilisateur avant chaque outil via le panneau de permission.`,"agentPermissionMode.autoLoopOverride":`L'auto-loop force un mode autre que Plan — Plan bloque les outils MCP et les éditions dont la boucle a besoin. Choisis Bypass, Strict ou Interactif.`,"agentPermissionMode.autoLoopLocked":`Verrouillé sur Bypass tant que l'auto-loop est activé — un autre mode bloquerait la boucle sur les demandes de permission. AskUserQuestion fonctionne toujours.`,"workspaceList.title":`Espaces de travail`,"workspaceList.a11y.groupToggle":`Groupe {group}, {count} workspaces`,"workspaceList.a11y.list":`Workspaces`,"workspaceList.a11y.card":`{name}, {status}`,"workspaceList.needsAttention":`Attention requise`,"workspaceList.running":`En cours`,"workspaceList.idle":`Inactif`,"workspaceList.archived":`Archivés`,"workspaceList.archivedToast":`« {name} » archivé`,"workspaceList.archivedUndo":`Annuler`,"workspaceList.unarchiveFailed":`Impossible de désarchiver ce workspace`,"workspaceList.noWorkspaces":`Aucun espace de travail`,"workspaceList.loadFailed":`Impossible de charger vos workspaces`,"workspaceList.loadFailedHint":`Il s’agit d’un échec de connexion, pas d’un compte vide.`,"workspaceList.footer":`{count} espace de travail | {count} espaces de travail`,"workspaceList.footerRunning":`{count} en cours`,"workspaceList.deleteDialog.title":`Supprimer l'espace de travail ?`,"workspaceList.deleteDialog.deleteLocal":`Supprimer la branche locale`,"workspaceList.deleteDialog.deleteRemote":`Supprimer la branche distante`,"workspaceList.deleteDialog.warning":`Attention : cette action est irréversible sur le dépôt distant.`,"workspaceList.deleteArchivedDialog.tooltip":`Supprimer tous les espaces de travail archivés`,"workspaceList.deleteArchivedDialog.title":`Supprimer tous les espaces archivés ?`,"workspaceList.deleteArchivedDialog.message":`Cela supprimera définitivement les {count} espaces de travail archivés. Cette action est irréversible.`,"workspaceList.deleteArchivedDialog.typeCount":`Tapez {count} pour confirmer`,"workspacePage.selectWorkspace":`Sélectionnez un espace de travail pour commencer`,"workspacePage.commandPalettePlaceholder":`Rechercher une commande…`,"workspacePage.commandPaletteEmpty":`Aucune commande correspondante`,"workspacePage.commandFocusChat":`Placer le curseur dans le chat`,"workspacePage.commandSearchHistory":`Rechercher dans l'historique du workspace`,"workspacePage.commandTogglePanel":`Afficher ou masquer le panneau latéral`,"workspacePage.commandStartAgent":`Démarrer l'agent`,"workspacePage.commandStopAgent":`Arrêter l'agent`,"workspacePage.commandOpenSettings":`Ouvrir les réglages`,"workspacePage.commandOpenCreate":`Créer un workspace`,"workspacePage.commandOpenSearch":`Recherche globale`,"workspacePage.commandOpenHealth":`Page Santé`,"workspacePage.commandOpenChangelog":`Journal des versions`,"workspacePage.commandGroupWorkspaces":`Aller à un workspace`,"workspacePage.commandPaletteHint":`Palette de commandes`,"workspacePage.session":`Session #{n}`,"workspacePage.newSession":`+ Nouvelle session`,"workspacePage.renameSession":`Renommer`,"workspacePage.renameSessionTitle":`Renommer la session`,"workspacePage.sessionNameLabel":`Nom de la session`,"workspacePage.sessionEndedNotice":`Cette session est terminée. Crée une nouvelle session pour continuer.`,"workspacePage.renameFailed":`Échec du renommage`,"workspacePage.copySessionId":`Copier l'ID de session`,"workspacePage.deleteSession":`Supprimer la session`,"workspacePage.deleteSessionTitle":`Supprimer la session ?`,"workspacePage.deleteSessionConfirm":`Cette action supprime définitivement cette session et son historique de conversation.`,"workspacePage.deleteSessionFailed":`Échec de la suppression de la session`,"workspacePage.noEngineSessionId":`Pas encore d'ID de session — l'agent n'a pas encore démarré cette session`,"workspacePage.createSessionFailed":`Échec de la création de la session`,"workspacePage.startFailed":`Échec du démarrage`,"workspacePage.stopFailed":`Échec de l'arrêt`,"workspacePage.interrupt":`Interrompre`,"workspacePage.interrupted":`Agent interrompu — en attente de votre prochain message`,"workspacePage.lastAgentEvent":`Dernier événement {when}`,"workspacePage.agentStopping":`Arrêt en cours…`,"workspacePage.agentNotRunning":`Aucun agent en cours — le statut est périmé`,"workspacePage.archivedBanner":`Workspace archivé — lecture seule`,"workspacePage.worktreePurgedBanner":`Worktree supprimé — historique conservé, restauration indisponible dans cette version`,"workspacePage.worktreePurgedTooltip":"Le dossier worktree a été supprimé du disque pour libérer de l'espace. L'historique des messages, sessions et métadonnées PR reste consultable ici, mais le répertoire de travail n'existe plus localement. Une future version de Kōbō pourra reconstruire le worktree à partir de la PR mergée — pour l'instant, recrée-le manuellement via `gh pr checkout` ou `git worktree add`.","workspacePage.pendingInitialPromptBanner":`Un prompt initial est en attente — l'agent ne l'a jamais reçu (le script de setup a planté ou le workspace n'a jamais été démarré). Cliquez sur Démarrer pour l'envoyer.`,"workspacePage.unarchived":`Workspace désarchivé`,"workspacePage.unarchiveFailed":`Échec du désarchivage`,"workspacePage.interruptFailed":`Échec de l'interruption`,"workspacePage.interruptHint":`Interrompre le tour en cours sans terminer la session.`,"workspacePage.interruptTooltip":`Interruption douce (comme Escape) — arrête le tool en cours mais garde la session active`,"workspacePage.pendingNextRun":`Appliqué au prochain démarrage`,"workspacePage.activeSessionModel":`En cours : {model}`,"workspacePage.activeSessionModelTooltip":`Modèle effectivement utilisé par la session sélectionnée`,"workspacePage.switchEngine":`Changer d’engine`,"workspacePage.switchEngineHint":`Continuer ce workspace avec un autre engine agent`,"workspacePage.moreActions":`Plus d'actions`,"workspacePage.switchEngineTitle":`Changer d’engine agent`,"workspacePage.switchEngineWarning":`L’agent actuel sera arrêté et une nouvelle session démarrera dans le même worktree.`,"workspacePage.engineLabel":`Engine`,"workspacePage.engineClaude":`Claude Code`,"workspacePage.engineCodex":`Codex`,"workspacePage.engineHandoff":`Passation pour le nouvel engine`,"workspacePage.engineHandoffHint":`Relisez ou modifiez le contexte envoyé au nouvel agent.`,"workspacePage.confirmSwitchEngine":`Changer d’engine`,"workspacePage.switchEngineFailed":`Échec du changement d’engine`,"whip.dispatchFailed":`Impossible d'envoyer le message du fouet`,"whip.phrase1":`Plus vite, tocard !`,"whip.phrase2":`Accélère le rythme, tocard !`,"whip.phrase3":`Au travail, tocard !`,"whip.phrase4":`Montre-moi un peu de vitesse, tocard !`,"whip.phrase5":`Moins de réflexion, plus d'action, tocard !`,"search.title":`Recherche`,"search.tooltip":`Rechercher dans l'historique des agents`,"search.placeholder":`Rechercher dans tous les messages agents…`,"search.includeArchived":`Inclure les workspaces archivés`,"search.loading":`Recherche en cours…`,"search.noResults":`Aucun résultat`,"search.error":`Échec de la recherche : {message}`,"search.resultCount":`{n} résultat(s)`,"search.eventType.userMessage":`Vous`,"search.eventType.agentOutput":`Agent`,"activityFeed.empty":`Aucune activité`,"activityFeed.emptyHint":`Démarrez un espace de travail pour voir la sortie de l'agent ici`,"activityFeed.initialPrompt":`Prompt initial`,"activityFeed.you":`Vous`,"activityFeed.agent":`Agent`,"activityFeed.question":`Question`,"activityFeed.goToPrevious":`Aller au message précédent`,"activityFeed.scrollToBottom":`Défiler vers le bas`,"activityFeed.sendAnswers":`Envoyer les réponses`,"agentBusy.banner":`L'agent est occupé`,"agentBusy.subagentsRunning":`1 sub-agent en cours | {n} sub-agents en cours`,"agentBusy.viewSubagents":`Voir les sub-agents`,"agentBusy.pendingMessage":`En attente — l'agent est occupé`,"terminal.title":`Terminal`,"terminal.open":`Ouvrir le terminal`,"terminal.close":`Fermer le terminal`,"terminal.noWorkspace":`Sélectionnez un espace de travail`,"terminal.noWorktree":`Worktree pas encore créé`,"terminal.error":`Erreur du terminal`,"terminal.exited":`Terminal fermé`,"terminal.disconnected":`Connexion perdue`,"terminal.reconnecting":`Reconnexion… (essai {attempt} sur {max})`,"terminal.reconnect":`Reconnecter`,"chatInput.placeholder":`Message... (/ pour les skills)`,"chatInput.fileSearchHint":`chercher un fichier`,"chatInput.skills":`Skills`,"chatInput.attachImage":`Joindre une image`,"chatInput.queueBanner":`Message en file d'attente — sera envoyé quand l'agent aura terminé`,"chatInput.forceQueue":`forcer l’envoi`,"chatInput.searchHistory":`rechercher`,"chatInput.commandPalette":`commandes`,"chatInput.shortcuts":`Raccourcis clavier`,"chatInput.cancelQueue":`Annuler la file d'attente`,"chatInput.autoLoopBanner":`L'auto-loop tourne — arrête-le pour envoyer un message`,"chatInput.awaitingUserBanner":`L'agent attend ta réponse ci-dessus — réponds via le panneau de question`,"chatInput.autoLoopStop":`Arrêter`,"koboCommand.checkProgressDesc":`Vérifier la progression des tâches et critères d'acceptation`,"chatInput.uploading":`Envoi en cours...`,"voice.title":`Transcription vocale`,"voice.enabled":`Activer la transcription vocale locale`,"voice.pttKey":`Touche push-to-talk`,"voice.pttAlt":`Alt`,"voice.pttCtrlSpace":`Ctrl+Espace`,"voice.language":`Langue (auto ou code)`,"voice.model":`Modèle actif`,"voice.commandPath":`Chemin du binaire Whisper (optionnel)`,"voice.ffmpegPath":`Chemin du binaire ffmpeg (optionnel)`,"voice.temperature":`Température`,"voice.temperatureHint":`Plus bas = plus déterministe ; plus haut = plus flexible mais moins stable.`,"voice.initialPrompt":`Prompt initial (optionnel)`,"voice.initialPromptHint":`Contexte optionnel pour aider Whisper sur les noms, acronymes ou jargon métier.`,"voice.translateToEnglish":`Traduire vers anglais`,"voice.translateToEnglishHint":`Si activé, la parole non anglaise est traduite en anglais au lieu d’être transcrite telle quelle.`,"voice.suppressNst":`Supprimer les tokens non vocaux`,"voice.suppressNstHint":`Essaie de réduire les artefacts non vocaux dans la transcription.`,"voice.installLink":`Installer whisper.cpp`,"voice.installGuideTitle":`Guide d'installation`,"voice.installGuideIntro":`Installe whisper.cpp et ffmpeg, puis renseigne les chemins binaires ci-dessous si nécessaire.`,"voice.installGuideUbuntuTitle":`Ubuntu / Debian`,"voice.installGuideWindowsTitle":`Windows`,"voice.installGuideBinaryPathHint":`Après le build CMake, le binaire Whisper est généralement ici : whisper.cpp/build/bin/whisper-cli`,"voice.installGuideSettingsHint":`Ensuite, renseigne "Chemin du binaire Whisper" et "Chemin du binaire ffmpeg" dans cette section (ou laisse vide si c’est dans le PATH).`,"voice.noneModel":`Aucun modèle actif`,"voice.notInstalled":`non installé`,"voice.download":`Télécharger`,"voice.delete":`Supprimer`,"voice.holdToTalk":`Maintiens pour parler`,"voice.recording":`Enregistrement...`,"voice.transcribing":`Transcription...`,"voice.notSupported":`L'enregistrement vocal n'est pas supporté par ce navigateur`,"voice.errorMicPermission":`Permission micro refusée`,"voice.errorTranscription":`La transcription vocale a échoué`,"voice.downloadFailed":`Échec du téléchargement du modèle`,"voice.deleteFailed":`Échec de la suppression du modèle`,"voice.errorDisabled":`La transcription vocale est désactivée dans les réglages`,"voice.errorModelMissing":`Aucun modèle vocal actif n'est configuré`,"voice.errorModelNotInstalled":`Le modèle vocal actif n'est pas installé`,"voice.errorAudioInvalid":`La capture audio est invalide ou vide`,"voice.errorLanguageInvalid":`La configuration de langue vocale est invalide`,"voice.errorRuntimeMissing":`Le runtime Whisper n'est pas installé ou pas dans le PATH`,"voice.maxDurationReached":`Durée maximale d'enregistrement atteinte`,"voice.runtimeReady":`Runtime prêt : {command}`,"voice.runtimeMissing":`Runtime manquant : {command}`,"voice.ffmpegReady":`ffmpeg prêt`,"voice.ffmpegMissing":`ffmpeg manquant`,"voice.sectionRuntime":`État du runtime`,"voice.sectionActivation":`Activation`,"voice.sectionModels":`Modèles Whisper`,"voice.sectionAdvanced":`Options avancées`,"voice.sectionBehavior":`Comportement de la transcription`,"voice.sectionBinaries":`Chemins des binaires`,"voice.downloadModels":`Télécharger un modèle`,"voice.cancelFailed":`Échec de l'annulation du téléchargement`,"createPage.title":`Créer un workspace`,"createPage.subtitle":`Décrivez la mission, choisissez un projet, puis configurez l’agent.`,"createPage.sectionMission":`Mission`,"createPage.sectionMissionHint":`Donnez à l’agent un objectif clair et le contexte nécessaire pour le réaliser.`,"createPage.workspaceNameLabel":`Nom du workspace`,"createPage.descriptionLabel":`Description de la mission`,"createPage.sources":`Sources facultatives`,"createPage.sectionGit":`Projet Git`,"createPage.sectionGitHint":`Choisissez le dépôt, la branche de départ et le mode de worktree.`,"createPage.worktreeMode":`Mode de worktree`,"createPage.worktreeNew":`Nouveau worktree isolé`,"createPage.worktreeExisting":`Réutiliser un worktree existant`,"createPage.projectLabel":`Projet`,"createPage.sourceBranch":`Branche de départ`,"createPage.workingBranchPreview":`Aperçu de la branche de travail`,"createPage.branchNamePending":`nom-du-workspace`,"createPage.sectionAgent":`Agent`,"createPage.sectionAgentHint":`Vérifiez les réglages d’exécution ou activez l’automatisation.`,"createPage.configureAgent":`Configurer l’agent`,"createPage.advancedOptions":`Options avancées`,"createPage.keyboardHint":`Appuyez sur Ctrl/Cmd + Entrée pour créer le workspace.`,"createPage.createWorkspace":`Créer le workspace`,"createPage.compareEngines":`Comparer deux moteurs`,"createPage.engineA":`Moteur A`,"createPage.engineB":`Moteur B`,"createPage.compareBrainstormLocked":`Mode comparaison : chaque moteur brainstorme avec le modèle et l'effort définis dans son bloc ci-dessus.`,"createPage.compareEnginesHint":`Crée deux workspaces à partir de cette tâche, un par moteur, dans des worktrees frères. Leurs diffs peuvent ensuite être comparés côte à côte.`,"createPage.compareNeedsNewWorktree":`Comparer deux moteurs nécessite deux nouveaux worktrees. Désactivez d'abord « utiliser un worktree existant ».`,"createPage.compareNeedsSecondEngine":`Choisissez un second moteur, différent du premier, pour la comparaison.`,"comparison.title":`Comparaison de moteurs`,"comparison.hint":`La même tâche, exécutée par chaque moteur dans son propre worktree.`,"comparison.engine":`Moteur`,"comparison.status":`Statut`,"comparison.commits":`Commits`,"comparison.files":`Fichiers`,"comparison.diff":`Diff`,"comparison.open":`Ouvrir`,"comparison.current":`Celui-ci`,"comparison.archived":`archivé`,"comparison.incomplete":`Un seul workspace de cette comparaison existe. L'autre n'a jamais été créé, ou a été supprimé.`,"createPage.comparisonPartial":`Seulement {count} workspace(s) sur {total} ont été créés. Celui qui existe est utilisable tel quel ; supprimez-le si vous préférez recommencer.`,"createPage.notionEnabled":`Notion activé`,"createPage.importNotion":`Importer depuis Notion`,"createPage.notionPlaceholder":`https://www.notion.so/workspace/Page-title-abc123...`,"createPage.notionValidation":`L'URL doit commencer par https://www.notion.so/ ou https://app.notion.com/`,"createPage.notionAutoExtract":`Les sous-tâches et critères d'acceptation seront extraits automatiquement.`,"createPage.notionPanelChoiceLabel":`Cette URL pointe vers une sous-page (?p=). Sur laquelle veux-tu travailler ?`,"createPage.notionPanelOption":`Sous-page (panel)`,"createPage.notionPanelOptionDesc":`La page que tu consultais — recommandé`,"createPage.notionParentOption":`Page parente`,"createPage.notionParentOptionDesc":`L'epic / database qui la contient`,"createPage.importSentry":`Importer Sentry`,"createPage.sentryEnabled":`Sentry activé`,"createPage.sentryPlaceholder":`https://votre-org.sentry.io/issues/123456`,"createPage.sentryValidation":`L'URL doit pointer vers une issue Sentry (/issues/<id>)`,"createPage.sentryAutoExtract":`L'issue Sentry sera importée automatiquement`,"createPage.sentryExtractHint":`Kobo va extraire l'issue et l'écrire dans .ai/thoughts/`,"createPage.importPr":`Importer depuis une PR`,"createPage.importPrRequiresProject":`Choisir d'abord un projet`,"createPage.importPrNotSupported":`Le forge de ce projet ne permet pas de lister les pull requests`,"createPage.lockedToPr":`Verrouillé sur la PR #{number}`,"createPage.prReadyToCreate":`PR #{number} importée — le workspace peut être créé.`,"createPage.unlockPrCheckout":`Déverrouiller`,"createPage.workspaceName":`Nom de l'espace de travail (par défaut le titre de la page Notion)`,"createPage.workspaceNamePlaceholder":`Nom de l'espace de travail...`,"createPage.instructions":`Instructions supplémentaires (optionnel)...`,"createPage.instructionsPlaceholder":`Décrivez la tâche...`,"createPage.tasks":`Tâches ({count})`,"createPage.addTask":`Ajouter une tâche...`,"createPage.acceptanceCriteria":`Critères d'acceptation ({count})`,"createPage.addCriterion":`Ajouter un critère...`,"createPage.projectPath":`Chemin du projet`,"createPage.branchType":`Type de branche`,"createPage.branch":`Branche`,"createPage.noBranches":`Aucune branche trouvée`,"createPage.enterPath":`Entrez le chemin du projet`,"createPage.skipSetupScript":`Ignorer le script de setup`,"createPage.worktreePickerLabel":`Worktree existant`,"createPage.noOrphanWorktrees":`Aucun worktree orphelin pour ce projet`,"createPage.pickWorktreeRequired":`Sélectionne un worktree à réutiliser`,"createPage.notionExtractHint":`Les sous-tâches et critères d'acceptation seront extraits de la page Notion.`,"createPage.errorCreating":`Erreur lors de la création de l'espace de travail.`,"createPage.branchAdjusted":"Branche déjà existante — création de `{branch}` à la place. Le dossier worktree correspondant utilise le même suffixe.","createPage.localSourceFallback":`Workspace créé à partir de la branche locale (origin injoignable) — la base peut être périmée.`,"createPage.validationNotionUrl":`Veuillez coller une URL Notion valide (https://www.notion.so/... ou https://app.notion.com/...).`,"createPage.validationDescription":`Veuillez décrire la tâche.`,"createPage.validationName":`Veuillez fournir un nom d'espace de travail.`,"createPage.validationPath":`Veuillez entrer le chemin du projet.`,"createPage.validationBranch":`Veuillez sélectionner une branche.`,"createPage.validationFocusHint":`Le champ à corriger est mis en évidence ci-dessous.`,"createPage.progress.validate":`Validation de la demande…`,"createPage.progress.fetch-source-branch":`Récupération de la branche source depuis origin…`,"createPage.progress.inspect-worktree":`Inspection du worktree existant…`,"createPage.progress.extract-notion":`Extraction de la page Notion…`,"createPage.progress.extract-sentry":`Extraction de l’issue Sentry…`,"createPage.progress.create-record":`Création du workspace…`,"createPage.progress.create-tasks":`Création des tâches et critères d’acceptation…`,"createPage.progress.create-worktree":`Création du worktree git…`,"createPage.progress.write-conventions":`Écriture des conventions git…`,"createPage.progress.write-context-files":`Écriture des fichiers de contexte…`,"createPage.progress.build-prompt":`Construction du prompt initial…`,"createPage.progress.setup-script":`Exécution de votre script d’installation…`,"createPage.progress.start-agent":`Démarrage de l’agent…`,"createPage.progress.rollback":`Annulation de la création échouée…`,"createPage.progress.done":`Terminé`,"createPage.progress.step":`Étape {index} sur {total}`,"createPage.errorAtStep":`La création a échoué à l’étape « {step} » : {message}`,"createPage.override.title":`Deux de vos choix ont été remplacés`,"createPage.override.setup-script-forced":`Script d’installation ignoré : le relancer sur un worktree que vous avez déjà préparé pourrait en détruire le contenu.`,"createPage.override.permission-mode-downgraded":`Mode de permission passé de Plan à Bypass : une boucle autonome ne peut pas tourner en Plan, qui bloque les outils et les modifications.`,"settings.title":`Paramètres`,"settings.language":`Langue`,"settings.projectColor":`Couleur`,"settings.projectColorClear":`Effacer`,"settings.projectColorDefault":`Par défaut (gris)`,"settings.workspaceListSection":`Liste des workspaces`,"settings.flattenWorkspaceList":`Afficher en liste plate`,"settings.flattenWorkspaceListHint":`Affiche tous les espaces de travail en liste plate avec un badge projet, plutôt que regroupés par projet.`,"settings.skillSuite.section":`Suite de skills`,"settings.skillSuite.superpowers":`Superpowers`,"settings.skillSuite.gstack":`gstack`,"settings.skillSuite.custom":`Personnalisé`,"settings.skillSuite.superpowersHint":`Workflow opiné TDD / brainstorm / plan (github.com/obra/superpowers).`,"settings.skillSuite.gstackHint":`Suite de Garry Tan — /review, /ship, /qa, /office-hours, etc. (github.com/garrytan/gstack).`,"settings.skillSuite.superpowersGstack":`Superpowers + gstack`,"settings.skillSuite.superpowersGstackHint":`Les deux suites s'empilent — superpowers pour la méthodo (brainstorm / TDD / plans / review au niveau principes), gstack pour les workflows concrets (/review, /qa, /browse, /design-review, /investigate).`,"settings.skillSuite.ecc":`ECC`,"settings.skillSuite.eccHint":`Framework agentique d'affaan-m — agents, skills, rules et hooks pour planifier, tester, implémenter, relire et mémoriser (github.com/affaan-m/ECC).`,"settings.skillSuite.allThree":`Superpowers + gstack + ECC`,"settings.skillSuite.allThreeHint":`Les trois suites s'empilent — superpowers pour la méthodo, gstack pour les workflows concrets, ECC pour des passes de relecture/implémentation multi-agents structurées.`,"settings.skillSuite.customHint":`Compose les cinq prompts ci-dessous à partir des templates de ton choix, puis modifie-les librement.`,"settings.skillSuite.reloadDefaults":`Recharger les valeurs par défaut`,"settings.skillSuite.reloadDefaultsConfirm":`Remplacer les cinq prompts personnalisés par les valeurs agnostiques par défaut ?`,"settings.skillSuite.customPrompts":`Prompts personnalisés`,"settings.skillSuite.agnostic":`Base agnostique`,"settings.skillSuite.importPrompt":`Importer un template`,"settings.skillSuite.imported":`Template importé. Tu peux maintenant le modifier.`,"settings.skillSuite.importFailed":`Impossible d'importer le template`,"settings.skillSuite.reviewTemplate":`Template de relecture`,"settings.skillSuite.autoLoopReviewGate":`Gate de relecture auto-loop`,"settings.skillSuite.autoLoopGroomingIntro":`Intro de grooming auto-loop`,"settings.skillSuite.qaTemplate":`Template QA`,"settings.skillSuite.brainstormingInstruction":`Instruction phase brainstorming`,"settings.global":`Général`,"settings.projects":`Projets`,"settings.globalSettings":`Paramètres généraux`,"settings.defaultModel":`Modèle par défaut`,"settings.defaultModelClaude":`Modèle par défaut (Claude Code)`,"settings.defaultModelCodex":`Modèle par défaut (OpenAI Codex)`,"settings.agentPermissions":`Permissions de l'agent`,"settings.skipPermissions":`Ignorer les invites de permission (--dangerously-skip-permissions)`,"settings.skipPermissionsWarning":`Attention : désactiver cette option entraînera le refus automatique de toutes les permissions d'outils (Write, Edit, Bash...) en mode headless. L'agent ne pourra que lire.`,"settings.notifications":`Notifications`,"settings.browserNotifications":`Notification navigateur quand l'agent termine`,"settings.audioNotifications":`Notification sonore quand l'agent termine`,"settings.enableBrowserNotifications":`Activer les notifications navigateur`,"settings.testBrowserNotification":`Tester la notification`,"settings.browserNotificationGranted":`Notifications du navigateur autorisées`,"settings.browserNotificationDenied":`Notifications du navigateur bloquées`,"settings.browserNotificationAsk":`Autorisation du navigateur requise`,"settings.browserNotificationUnsupported":`Notifications du navigateur indisponibles`,"settings.browserNotificationPermissionNeeded":`Autorisez les notifications du navigateur pour envoyer un test.`,"settings.browserNotificationTestTitle":`Test de notification Kōbō`,"settings.browserNotificationTestBody":`Les notifications du navigateur fonctionnent.`,"settings.enableAudio":`Activer l'audio`,"settings.notificationSound":`Son de notification`,"settings.notificationSoundHint":`Joué quand l'agent termine ou demande une permission.`,"settings.questionSound":`Son des questions`,"settings.questionSoundHint":`Joué uniquement quand l'agent te pose une question.`,"settings.workspaceCreatedSound":`Son de création d'espace de travail`,"settings.workspaceCreatedSoundHint":`Joué après la création d'un espace de travail.`,"settings.notificationSoundPreview":`Écouter`,"settings.notificationVolume":`Volume`,"settings.notificationSoundHey":`Hey`,"settings.agentErrorSound":`Erreurs de l’agent`,"settings.agentErrorSoundHint":`Joué pour les quotas, rate limits et erreurs de l’agent.`,"settings.notificationSoundBasic":`Notification basique`,"settings.notificationSoundWorkspaceCreated":`Warcraft III — Travail`,"settings.notificationSoundTravailTermine":`Travail terminé`,"settings.notificationSoundFaaah":`Faaah`,"settings.notificationSoundCaVaPeter":`Ça va péter`,"settings.notificationSoundDryFart":`Dry fart`,"settings.notificationSoundForShure":`For shure`,"settings.prSoundSection":`PR / MR et CI`,"settings.soundGeneral":`Son général`,"settings.soundNone":`Aucun son`,"settings.prCiFailedSound":`CI en échec`,"settings.prCiRecoveredSound":`CI rétablie`,"settings.prChangesRequestedSound":`Modifications demandées`,"settings.prApprovedSound":`PR approuvée`,"settings.prMergeConflictSound":`Conflit de merge`,"settings.prReadyToMergeSound":`Prête à merger`,"settings.prMergedSound":`PR mergée`,"settings.prCiFailedSoundHint":`Joué quand la CI passe en échec.`,"settings.prCiRecoveredSoundHint":`Joué quand la CI se rétablit après un échec.`,"settings.prChangesRequestedSoundHint":`Joué quand une review demande des modifications.`,"settings.prApprovedSoundHint":`Joué quand la pull request est approuvée.`,"settings.prMergeConflictSoundHint":`Joué quand un conflit de merge est détecté.`,"settings.prReadyToMergeSoundHint":`Joué quand la pull request devient prête à merger.`,"settings.prMergedSoundHint":`Joué quand la pull request est mergée.`,"settings.notificationSoundSeptiemeCompagnie03":`7ème compagnie 03`,"settings.notificationSoundAllerFtg":`Aller FTG`,"settings.notificationSoundArreteDeMentir":`Arrête de mentir`,"settings.notificationSoundArretezLesMessages":`Arrêtez d'envoyer les messages`,"settings.notificationSoundBahAlorsOnEstNul":`Bah alors, on est nul`,"settings.notificationSoundGtaVDeath":`GTA V — Death`,"settings.notificationSoundNanTuDegages":`Nan, tu dégages`,"settings.notificationSoundNanWallahPardon":`Nan, wallah, pardon`,"settings.notificationSoundOuaisCestGreg":`Ouais, c'est Greg`,"settings.notificationSoundPasCaZinedine":`Pas ça, Zinedine`,"settings.notificationSoundTaGueule":`Ta gueule`,"settings.notificationSoundTuVasLaFermer":`Tu vas la fermer`,"settings.notificationSoundYaaa":`Yaaa`,"settings.notificationSoundMaisLaisseMoiDormirZebi":`Mais laisse-moi dormir zebi`,"settings.defaultPermissionMode":`Mode de permission par défaut`,"settings.defaultPermissionModeClaude":`Mode de permission par défaut (Claude Code)`,"settings.defaultPermissionModeCodex":`Mode de permission par défaut (OpenAI Codex)`,"settings.defaultPermissionModeHint":`Mode appliqué à la création d'un workspace. Plan = lecture seule, Bypass = sans prompt, Strict = auto-accept des éditions avec allow-list, Interactif = demande avant chaque outil.`,"settings.activityFeed":`Flux d'activité`,"settings.verboseMessages":`Afficher les messages système détaillés (task_progress, task_started)`,"settings.showThinkingBlocks":`Afficher les blocs de réflexion des agents`,"settings.whipSettings":`Fouet`,"settings.whipSettingsHint":`Configurez le raccourci et le volume du fouet optionnel.`,"settings.whipEnabled":`Activer le fouet`,"settings.whipEnabledHint":`Affiche le fouet interactif dans les workspaces actifs compatibles.`,"settings.whipVolume":`Volume du fouet`,"settings.whipVolumeMasterAudioDisabled":`L’audio principal est désactivé. Activez les notifications audio pour régler le volume du fouet ; la valeur enregistrée est conservée.`,"whip.overlayLabel":`Fouet interactif`,"whip.overlayInstructions":`Déplacez le pointeur pour contrôler le fouet. Appuyez sur Entrée ou Espace pour le faire claquer. Appuyez sur Échap pour fermer.`,"settings.whipShortcut":`Raccourci du fouet`,"settings.whipShortcutHint":`Cliquez, puis appuyez sur le raccourci à utiliser.`,"settings.whipShortcutRecording":`Appuyez sur un raccourci…`,"settings.whipShortcutButtonLabel":`Raccourci du fouet : {shortcut}`,"settings.whipShortcutRecordingLabel":`Enregistrement du raccourci du fouet. Appuyez sur un raccourci…`,"settings.whipShortcutReset":`Réinitialiser le raccourci`,"settings.whipShortcutReserved":`Ce raccourci est réservé par le navigateur.`,"settings.testIntegration":`Tester la connexion`,"pwa.offline":`Vous êtes hors ligne. Le chat et les agents nécessitent le serveur Kōbō.`,"pwa.reconnecting":`Reconnexion au serveur Kōbō…`,"pwa.installReady":`Installez Kōbō comme application.`,"pwa.install":`Installer`,"pwa.ignore":`Ignorer`,"pwa.updateReady":`Une mise à jour de Kōbō est disponible.`,"pwa.reload":`Recharger`,"chat.searchWorkspaceHistory":`Rechercher dans l’historique du workspace`,"chat.historySearch.user":`Vous`,"chat.historySearch.agent":`Agent`,"chat.openInGitDiff":`Ouvrir dans le diff Git`,"timeline.title":`Chronologie des sessions`,"timeline.export":`Exporter le diagnostic`,"timeline.unnamed":`Session agent`,"timeline.tools":`{count} outils`,"timeline.errors":`{count} erreurs`,"settings.availableVariables":`Variables disponibles dans les modèles de prompt`,"settings.prPromptTemplate":`Modèle de prompt PR`,"settings.prPromptPlaceholder":`Instructions pour l'agent lors de la création de PR GitHub...`,"settings.prPromptHint":`Utilisez les variables listées ci-dessus (syntaxe doubles accolades).`,"settings.reviewPromptTemplate":`Modèle de prompt de review`,"settings.reviewPromptPlaceholder":`Instructions pour l'agent lors de la review des changes de la branche...`,"settings.ciFixPromptTemplate":`Modèle de prompt « Fix CI »`,"settings.ciFixPromptHint":`Envoyé à l'agent quand un workspace voit sa CI échouer. Variables (syntaxe double-accolades) : pr_url, pr_number, pr_title, branch_name, source_branch, workspace_name, workspace_id, project_name, failed_jobs, ci_run_url.`,"settings.ciFixPromptPlaceholder":`Demande à l'agent de diagnostiquer et de corriger les jobs CI en échec...`,"settings.finalizationPromptTemplate":`Prompt de finalisation de l'auto-loop`,"settings.finalizationPromptHint":`Prompt par défaut pour la dernière itération de l'auto-loop (contrôles qualité finaux). Utilisé quand un projet laisse son propre prompt de finalisation vide.`,"settings.finalizationPromptPlaceholder":`Run final quality checks before closing the workspace...`,"settings.notionInitialPrompt":`Prompt initial Notion`,"settings.notionInitialPrompt.help":`Ajouté au prompt de création de workspace quand le workspace a un ticket Notion. Variables : {variables}.`,"settings.notionInitialPrompt.project":`Prompt initial Notion (override)`,"settings.sentryInitialPrompt":`Prompt initial Sentry`,"settings.sentryInitialPrompt.help":`Ajouté au prompt de création de workspace quand le workspace a une issue Sentry. Variables : {variables}.`,"settings.sentryInitialPrompt.project":`Prompt initial Sentry (override)`,"settings.initialPrompt.inheritHint":`Laisser vide pour hériter. Saisir un caractère d'espacement pour désactiver l'injection à ce niveau.`,"settings.resetToDefault":`Réinitialiser`,"settings.resetFailed":`Échec du chargement de la valeur par défaut`,"settings.sentryIntegration":`Intégration Sentry`,"settings.var.prNumber":`Numéro de PR (ex : 42)`,"settings.var.prUrl":`URL complète de la PR créée`,"settings.var.branchName":`Nom de la branche de travail`,"settings.var.sourceBranch":`Branche source ciblée par la PR`,"settings.var.workspaceName":`Nom du workspace`,"settings.var.projectName":`Dernier segment du chemin du projet`,"settings.var.notionUrl":`URL Notion si définie, vide sinon`,"settings.var.commits":`Liste à puces des commits entre source et head`,"settings.var.diffStats":`Résumé shortstat Git (fichiers, insertions, suppressions)`,"settings.var.tasks":`Tâches classiques en liste à cocher`,"settings.var.acceptanceCriteria":`Critères d'acceptation en liste à cocher`,"settings.gitConventions":`Conventions Git (global)`,"settings.gitConventionsPlaceholder":`# Conventions Git...`,"settings.gitConventionsHint":`Ces conventions sont écrites dans .ai/.git-conventions.md pour chaque nouvel espace de travail et doivent être respectées par l'agent avant toute opération Git. Remplacées par les conventions par projet si définies.`,"settings.setupScript":`Script de setup`,"settings.cleanupScript":`Script de cleanup`,"settings.archiveScript":`Script d'archivage`,"settings.archiveScriptHint":`Script shell exécuté côté serveur dans le worktree quand un workspace est archivé. Laisser vide pour désactiver.`,"settings.archiveScriptPlaceholder":`ex. nettoyer des conteneurs, libérer de l'espace disque…`,"settings.hook.sessionEndedTitle":`Hook : fin de session`,"settings.hook.sessionEndedHint":`Exécuté quand une session d'agent se termine, quelle qu'en soit la raison. Lit KOBO_SESSION_END_REASON (completed / error / killed / watchdog), KOBO_SESSION_STOP_CAUSE, KOBO_AUTOLOOP_ACTIVE, KOBO_SESSION_ID et KOBO_SESSION_EXIT_CODE. Vide = désactivé.`,"settings.hook.sessionEndedPlaceholder":`ex. npm test, ou notifier un canal de discussion…`,"settings.hook.prMergedTitle":`Hook : PR mergée`,"settings.hook.prMergedHint":`Exécuté quand une PR est détectée comme mergée, avant l'archivage ou la purge du workspace - le worktree est encore sur le disque. Lit KOBO_PR_NUMBER et KOBO_PR_URL. Vide = désactivé.`,"settings.hook.prMergedPlaceholder":`ex. déclencher un déploiement, taguer une release…`,"settings.hook.autoLoopDisabledTitle":`Hook : auto-loop arrêtée`,"settings.hook.autoLoopDisabledHint":`Exécuté à chaque désactivation de l'auto-loop, par Kōbō ou par vous. Lit KOBO_AUTOLOOP_REASON (completed / stall / error / user-action / awaiting-clarification) et KOBO_TASKS_PENDING. Vide = désactivé.`,"settings.hook.autoLoopDisabledPlaceholder":`ex. envoyer une notification quand la boucle bloque…`,"settings.changeSourceBranchScript":`Script de changement de branche source`,"settings.changeSourceBranchScript.help":`Remplace le cherry-pick intégré quand non vide. Le script possède git, base de PR, force-push et conflits ; Kōbō refuse seulement si l'agent tourne et met à jour la métadonnée source à exit 0.`,"settings.changeSourceBranchScript.envHelp":`KOBO_NEW_BASE — nouvelle branche source choisie dans le dialogue
|
|
1
|
+
var e={"model.tooltip":`Modèle utilisé par l’agent pour ce workspace`,"reasoning.tooltip":`Niveau de raisonnement utilisé par l’agent pour ce workspace`,"thinking.label":`Réflexion`,"thinking.noDetails":`L’agent réfléchit…`,"common.save":`Enregistrer`,"common.confirm":`Confirmer`,"common.cancel":`Annuler`,"common.open":`Ouvrir`,"common.retry":`Réessayer`,"common.delete":`Supprimer`,"common.close":`Fermer`,"workspace.deleteTitle":`Supprimer le workspace`,"workspace.deleteTypeName":`Tapez {name} pour confirmer. Cela supprime le worktree et tout l’historique.`,"workspace.deleteFailed":`Suppression du workspace impossible.`,"workspace.archiveFailed":`Archivage du workspace impossible.`,"tasks.updateFailed":`Mise à jour de la tâche impossible.`,"dashboard.tooltip":`Tableau de bord`,"dashboard.title":`Tableau de bord`,"dashboard.count":`{n} workspace | {n} workspaces`,"dashboard.empty":`Aucun workspace actif.`,"dashboard.workspace":`Workspace`,"dashboard.status":`Statut`,"dashboard.attention":`Attention`,"dashboard.pr":`PR`,"dashboard.diff":`Diff`,"dashboard.activity":`Activité`,"dashboard.prOpen":`ouverte`,"reliability.title":`Fiabilité des modèles`,"reliability.subtitle":`Comment chaque moteur et modèle s'est réellement terminé sur ce poste.`,"reliability.empty":`Aucune session terminée pour l'instant.`,"reliability.loadFailed":`Impossible de charger les chiffres de fiabilité.`,"reliability.engine":`Moteur`,"reliability.model":`Modèle`,"reliability.sessions":`Sessions`,"reliability.completed":`Terminées`,"reliability.watchdog":`Watchdog`,"reliability.killed":`Arrêtées`,"reliability.errors":`Erreurs`,"reliability.unknown":`Inconnu`,"reliability.median":`Médiane`,"reliability.durationSeconds":`{s}s`,"reliability.durationMinutes":`{m}min {s}s`,"reliability.durationHours":`{h}h {m}min`,"update.available":`Une version plus récente de Kōbō est disponible : {version}`,"update.how":`Comment mettre à jour`,"common.dismiss":`Ignorer`,"common.details":`Détails`,"common.ok":`OK`,"whatsNew.title":`Quoi de neuf`,"common.loading":`Chargement...`,"common.search":`Rechercher...`,"common.refresh":`Actualiser`,"common.copy":`Copier`,"common.copied":`Copié dans le presse-papiers`,"common.copyFailed":`Échec de la copie`,"common.add":`Ajouter`,"folderPicker.title":`Choisir un dossier`,"folderPicker.parent":`Dossier parent`,"folderPicker.empty":`Aucun sous-dossier`,"folderPicker.select":`Choisir ce dossier`,"common.start":`Démarrer`,"common.stop":`Arrêter`,"common.archive":`Archiver`,"common.unarchive":`Désarchiver`,"common.selectWorkspace":`Sélectionnez un espace de travail`,"common.noResults":`Aucun résultat pour « {query} »`,"common.send":`envoyer`,"common.newLine":`nouvelle ligne`,"common.history":`historique`,"common.justNow":`a l'instant`,"common.minutesAgo":`il y a {count}m`,"common.hoursAgo":`il y a {count}h`,"common.daysAgo":`il y a {count}j`,"model.auto":`Auto`,"model.fable51":`Fable 5.1`,"model.mythos5":`Mythos 5 (Glasswing)`,"model.fable51Description":`Modèle le plus capable - remplace Fable 5, contexte 1M, adaptive thinking`,"model.mythos5Description":`Fable 5.1 sans classificateurs de sécurité — accès limité (Project Glasswing)`,"model.opus":`Opus 4.6`,"model.sonnet":`Sonnet 4.6`,"model.opus5":`Opus 5`,"model.opus48":`Opus 4.8`,"model.opus47Classic":`Opus 4.7 (Classic)`,"model.opus471m":`Opus 4.7 (1M)`,"model.opusClassic":`Opus 4.6 (Classic)`,"model.opus1m":`Opus 4.6 (1M)`,"model.sonnet5":`Sonnet 5`,"model.sonnetClassic":`Sonnet 4.6 (Classic)`,"model.sonnet1m":`Sonnet 4.6 (1M)`,"model.haiku":`Haiku 4.5`,"model.autoDescription":`Claude choisit le modèle optimal`,"model.opus5Description":`Pour le coding agentique complexe et le travail en entreprise, contexte 1M`,"model.opus48Description":`Opus le plus capable — coding agentique long-horizon, contexte 1M par défaut, effort high par défaut`,"model.opus47ClassicDescription":`Dernier Opus, le plus capable`,"model.opus471mDescription":`Dernier Opus, contexte 1M`,"model.opusClassicDescription":`Le plus puissant`,"model.opus1mDescription":`Le plus puissant, contexte 1M`,"model.sonnet5Description":`Meilleure combinaison vitesse/intelligence, contexte 1M`,"model.sonnetClassicDescription":`Équilibré`,"model.sonnet1mDescription":`Équilibré, contexte 1M`,"model.haikuDescription":`Le plus rapide`,"model.gpt56sol":`GPT-5.6 Sol`,"model.gpt56solDescription":`Dernier modèle de codage agentique de pointe (nécessite une authentification ChatGPT)`,"model.gpt56terra":`GPT-5.6 Terra`,"model.gpt56terraDescription":`Modèle de codage agentique équilibré pour un usage quotidien (nécessite une authentification ChatGPT)`,"model.gpt56luna":`GPT-5.6 Luna`,"model.gpt56lunaDescription":`Modèle de codage agentique rapide et économique (nécessite une authentification ChatGPT)`,"model.gpt55":`GPT-5.5`,"model.gpt55Description":`Recommandé pour le code complexe (nécessite une authentification ChatGPT)`,"model.gpt54":`GPT-5.4`,"model.gpt54Description":`Repli par défaut — raisonnement solide, compatible avec une clé API`,"model.gpt54mini":`GPT-5.4 mini`,"model.gpt54miniDescription":`Rapide et efficient — idéal pour les tâches réactives et les sous-agents`,"model.gpt52":`GPT-5.2`,"model.gpt52Description":`Optimisé pour un usage professionnel et les agents longue durée`,"model.gpt53codex":`GPT-5.3 Codex`,"model.gpt53codexDescription":`Modèle spécialisé code pour l'ingénierie logicielle complexe`,"reasoning.auto":`auto`,"reasoning.minimal":`minimal`,"reasoning.none":`aucun`,"reasoning.low":`low`,"reasoning.medium":`medium`,"reasoning.high":`high`,"reasoning.xhigh":`xhigh`,"reasoning.max":`max`,"reasoning.autoDescription":`Laisse le moteur choisir`,"reasoning.minimalDescription":`Raisonnement le plus rapide et superficiel`,"reasoning.noneDescription":`Sans raisonnement supplémentaire`,"reasoning.lowDescription":`Plus rapide, moins profond`,"reasoning.mediumDescription":`Équilibré`,"reasoning.highDescription":`Plus de profondeur`,"reasoning.xhighDescription":`Profondeur étendue, tâches longues`,"reasoning.maxDescription":`Profondeur maximale`,"agentPermissionMode.label":`Mode de permission`,"agentPermissionMode.plan":`Plan`,"agentPermissionMode.bypass":`Bypass`,"agentPermissionMode.strict":`Strict (édits)`,"agentPermissionMode.interactive":`Interactif`,"agentPermissionMode.tooltip":`Comment l'agent gère les permissions d'outils. Plan : lecture seule, aucune écriture. Bypass : aucune demande. Strict : auto-accept des éditions de fichiers, respect des allow/deny pour le reste. Interactif : demande à l'utilisateur avant chaque outil via le panneau de permission.`,"agentPermissionMode.autoLoopOverride":`L'auto-loop force un mode autre que Plan — Plan bloque les outils MCP et les éditions dont la boucle a besoin. Choisis Bypass, Strict ou Interactif.`,"agentPermissionMode.autoLoopLocked":`Verrouillé sur Bypass tant que l'auto-loop est activé — un autre mode bloquerait la boucle sur les demandes de permission. AskUserQuestion fonctionne toujours.`,"workspaceList.title":`Espaces de travail`,"workspaceList.a11y.groupToggle":`Groupe {group}, {count} workspaces`,"workspaceList.a11y.list":`Workspaces`,"workspaceList.a11y.card":`{name}, {status}`,"workspaceList.needsAttention":`Attention requise`,"workspaceList.running":`En cours`,"workspaceList.idle":`Inactif`,"workspaceList.archived":`Archivés`,"workspaceList.archivedToast":`« {name} » archivé`,"workspaceList.archivedUndo":`Annuler`,"workspaceList.unarchiveFailed":`Impossible de désarchiver ce workspace`,"workspaceList.noWorkspaces":`Aucun espace de travail`,"workspaceList.loadFailed":`Impossible de charger vos workspaces`,"workspaceList.loadFailedHint":`Il s’agit d’un échec de connexion, pas d’un compte vide.`,"workspaceList.footer":`{count} espace de travail | {count} espaces de travail`,"workspaceList.footerRunning":`{count} en cours`,"workspaceList.deleteDialog.title":`Supprimer l'espace de travail ?`,"workspaceList.deleteDialog.deleteLocal":`Supprimer la branche locale`,"workspaceList.deleteDialog.deleteRemote":`Supprimer la branche distante`,"workspaceList.deleteDialog.warning":`Attention : cette action est irréversible sur le dépôt distant.`,"workspaceList.deleteArchivedDialog.tooltip":`Supprimer tous les espaces de travail archivés`,"workspaceList.deleteArchivedDialog.title":`Supprimer tous les espaces archivés ?`,"workspaceList.deleteArchivedDialog.message":`Cela supprimera définitivement les {count} espaces de travail archivés. Cette action est irréversible.`,"workspaceList.deleteArchivedDialog.typeCount":`Tapez {count} pour confirmer`,"workspacePage.selectWorkspace":`Sélectionnez un espace de travail pour commencer`,"workspacePage.commandPalettePlaceholder":`Rechercher une commande…`,"workspacePage.commandPaletteEmpty":`Aucune commande correspondante`,"workspacePage.commandFocusChat":`Placer le curseur dans le chat`,"workspacePage.commandSearchHistory":`Rechercher dans l'historique du workspace`,"workspacePage.commandTogglePanel":`Afficher ou masquer le panneau latéral`,"workspacePage.commandStartAgent":`Démarrer l'agent`,"workspacePage.commandStopAgent":`Arrêter l'agent`,"workspacePage.commandOpenSettings":`Ouvrir les réglages`,"workspacePage.commandOpenCreate":`Créer un workspace`,"workspacePage.commandOpenSearch":`Recherche globale`,"workspacePage.commandOpenHealth":`Page Santé`,"workspacePage.commandOpenChangelog":`Journal des versions`,"workspacePage.commandGroupWorkspaces":`Aller à un workspace`,"workspacePage.commandPaletteHint":`Palette de commandes`,"workspacePage.session":`Session #{n}`,"workspacePage.newSession":`+ Nouvelle session`,"workspacePage.renameSession":`Renommer`,"workspacePage.renameSessionTitle":`Renommer la session`,"workspacePage.sessionNameLabel":`Nom de la session`,"workspacePage.sessionEndedNotice":`Cette session est terminée. Crée une nouvelle session pour continuer.`,"workspacePage.renameFailed":`Échec du renommage`,"workspacePage.copySessionId":`Copier l'ID de session`,"workspacePage.deleteSession":`Supprimer la session`,"workspacePage.deleteSessionTitle":`Supprimer la session ?`,"workspacePage.deleteSessionConfirm":`Cette action supprime définitivement cette session et son historique de conversation.`,"workspacePage.deleteSessionFailed":`Échec de la suppression de la session`,"workspacePage.noEngineSessionId":`Pas encore d'ID de session — l'agent n'a pas encore démarré cette session`,"workspacePage.createSessionFailed":`Échec de la création de la session`,"workspacePage.startFailed":`Échec du démarrage`,"workspacePage.stopFailed":`Échec de l'arrêt`,"workspacePage.interrupt":`Interrompre`,"workspacePage.interrupted":`Agent interrompu — en attente de votre prochain message`,"workspacePage.lastAgentEvent":`Dernier événement {when}`,"workspacePage.agentStopping":`Arrêt en cours…`,"workspacePage.agentNotRunning":`Aucun agent en cours — le statut est périmé`,"workspacePage.archivedBanner":`Workspace archivé — lecture seule`,"workspacePage.worktreePurgedBanner":`Worktree supprimé — historique conservé, restauration indisponible dans cette version`,"workspacePage.worktreePurgedTooltip":"Le dossier worktree a été supprimé du disque pour libérer de l'espace. L'historique des messages, sessions et métadonnées PR reste consultable ici, mais le répertoire de travail n'existe plus localement. Une future version de Kōbō pourra reconstruire le worktree à partir de la PR mergée — pour l'instant, recrée-le manuellement via `gh pr checkout` ou `git worktree add`.","workspacePage.pendingInitialPromptBanner":`Un prompt initial est en attente — l'agent ne l'a jamais reçu (le script de setup a planté ou le workspace n'a jamais été démarré). Cliquez sur Démarrer pour l'envoyer.`,"workspacePage.unarchived":`Workspace désarchivé`,"workspacePage.unarchiveFailed":`Échec du désarchivage`,"workspacePage.interruptFailed":`Échec de l'interruption`,"workspacePage.interruptHint":`Interrompre le tour en cours sans terminer la session.`,"workspacePage.interruptTooltip":`Interruption douce (comme Escape) — arrête le tool en cours mais garde la session active`,"workspacePage.pendingNextRun":`Appliqué au prochain démarrage`,"workspacePage.activeSessionModel":`En cours : {model}`,"workspacePage.activeSessionModelTooltip":`Modèle effectivement utilisé par la session sélectionnée`,"workspacePage.switchEngine":`Changer d’engine`,"workspacePage.switchEngineHint":`Continuer ce workspace avec un autre engine agent`,"workspacePage.moreActions":`Plus d'actions`,"workspacePage.switchEngineTitle":`Changer d’engine agent`,"workspacePage.switchEngineWarning":`L’agent actuel sera arrêté et une nouvelle session démarrera dans le même worktree.`,"workspacePage.engineLabel":`Engine`,"workspacePage.engineClaude":`Claude Code`,"workspacePage.engineCodex":`Codex`,"workspacePage.engineHandoff":`Passation pour le nouvel engine`,"workspacePage.engineHandoffHint":`Relisez ou modifiez le contexte envoyé au nouvel agent.`,"workspacePage.confirmSwitchEngine":`Changer d’engine`,"workspacePage.switchEngineFailed":`Échec du changement d’engine`,"whip.dispatchFailed":`Impossible d'envoyer le message du fouet`,"whip.phrase1":`Plus vite, tocard !`,"whip.phrase2":`Accélère le rythme, tocard !`,"whip.phrase3":`Au travail, tocard !`,"whip.phrase4":`Montre-moi un peu de vitesse, tocard !`,"whip.phrase5":`Moins de réflexion, plus d'action, tocard !`,"search.title":`Recherche`,"search.tooltip":`Rechercher dans l'historique des agents`,"search.placeholder":`Rechercher dans tous les messages agents…`,"search.includeArchived":`Inclure les workspaces archivés`,"search.loading":`Recherche en cours…`,"search.noResults":`Aucun résultat`,"search.error":`Échec de la recherche : {message}`,"search.resultCount":`{n} résultat(s)`,"search.eventType.userMessage":`Vous`,"search.eventType.agentOutput":`Agent`,"activityFeed.empty":`Aucune activité`,"activityFeed.emptyHint":`Démarrez un espace de travail pour voir la sortie de l'agent ici`,"activityFeed.initialPrompt":`Prompt initial`,"activityFeed.you":`Vous`,"activityFeed.agent":`Agent`,"activityFeed.question":`Question`,"activityFeed.goToPrevious":`Aller au message précédent`,"activityFeed.scrollToBottom":`Défiler vers le bas`,"activityFeed.sendAnswers":`Envoyer les réponses`,"agentBusy.banner":`L'agent est occupé`,"agentBusy.subagentsRunning":`1 sub-agent en cours | {n} sub-agents en cours`,"agentBusy.viewSubagents":`Voir les sub-agents`,"agentBusy.pendingMessage":`En attente — l'agent est occupé`,"terminal.title":`Terminal`,"terminal.open":`Ouvrir le terminal`,"terminal.close":`Fermer le terminal`,"terminal.noWorkspace":`Sélectionnez un espace de travail`,"terminal.noWorktree":`Worktree pas encore créé`,"terminal.error":`Erreur du terminal`,"terminal.exited":`Terminal fermé`,"terminal.disconnected":`Connexion perdue`,"terminal.reconnecting":`Reconnexion… (essai {attempt} sur {max})`,"terminal.reconnect":`Reconnecter`,"chatInput.placeholder":`Message... (/ pour les skills)`,"chatInput.fileSearchHint":`chercher un fichier`,"chatInput.skills":`Skills`,"chatInput.attachImage":`Joindre une image`,"chatInput.queueBanner":`Message en file d'attente — sera envoyé quand l'agent aura terminé`,"chatInput.forceQueue":`forcer l’envoi`,"chatInput.searchHistory":`rechercher`,"chatInput.commandPalette":`commandes`,"chatInput.shortcuts":`Raccourcis clavier`,"chatInput.cancelQueue":`Annuler la file d'attente`,"chatInput.autoLoopBanner":`L'auto-loop tourne — arrête-le pour envoyer un message`,"chatInput.awaitingUserBanner":`L'agent attend ta réponse ci-dessus — réponds via le panneau de question`,"chatInput.autoLoopStop":`Arrêter`,"koboCommand.checkProgressDesc":`Vérifier la progression des tâches et critères d'acceptation`,"chatInput.uploading":`Envoi en cours...`,"voice.title":`Transcription vocale`,"voice.enabled":`Activer la transcription vocale locale`,"voice.pttKey":`Touche push-to-talk`,"voice.pttAlt":`Alt`,"voice.pttCtrlSpace":`Ctrl+Espace`,"voice.language":`Langue (auto ou code)`,"voice.model":`Modèle actif`,"voice.commandPath":`Chemin du binaire Whisper (optionnel)`,"voice.ffmpegPath":`Chemin du binaire ffmpeg (optionnel)`,"voice.temperature":`Température`,"voice.temperatureHint":`Plus bas = plus déterministe ; plus haut = plus flexible mais moins stable.`,"voice.initialPrompt":`Prompt initial (optionnel)`,"voice.initialPromptHint":`Contexte optionnel pour aider Whisper sur les noms, acronymes ou jargon métier.`,"voice.translateToEnglish":`Traduire vers anglais`,"voice.translateToEnglishHint":`Si activé, la parole non anglaise est traduite en anglais au lieu d’être transcrite telle quelle.`,"voice.suppressNst":`Supprimer les tokens non vocaux`,"voice.suppressNstHint":`Essaie de réduire les artefacts non vocaux dans la transcription.`,"voice.installLink":`Installer whisper.cpp`,"voice.installGuideTitle":`Guide d'installation`,"voice.installGuideIntro":`Installe whisper.cpp et ffmpeg, puis renseigne les chemins binaires ci-dessous si nécessaire.`,"voice.installGuideUbuntuTitle":`Ubuntu / Debian`,"voice.installGuideWindowsTitle":`Windows`,"voice.installGuideBinaryPathHint":`Après le build CMake, le binaire Whisper est généralement ici : whisper.cpp/build/bin/whisper-cli`,"voice.installGuideSettingsHint":`Ensuite, renseigne "Chemin du binaire Whisper" et "Chemin du binaire ffmpeg" dans cette section (ou laisse vide si c’est dans le PATH).`,"voice.noneModel":`Aucun modèle actif`,"voice.notInstalled":`non installé`,"voice.download":`Télécharger`,"voice.delete":`Supprimer`,"voice.holdToTalk":`Maintiens pour parler`,"voice.recording":`Enregistrement...`,"voice.transcribing":`Transcription...`,"voice.notSupported":`L'enregistrement vocal n'est pas supporté par ce navigateur`,"voice.errorMicPermission":`Permission micro refusée`,"voice.errorTranscription":`La transcription vocale a échoué`,"voice.downloadFailed":`Échec du téléchargement du modèle`,"voice.deleteFailed":`Échec de la suppression du modèle`,"voice.errorDisabled":`La transcription vocale est désactivée dans les réglages`,"voice.errorModelMissing":`Aucun modèle vocal actif n'est configuré`,"voice.errorModelNotInstalled":`Le modèle vocal actif n'est pas installé`,"voice.errorAudioInvalid":`La capture audio est invalide ou vide`,"voice.errorLanguageInvalid":`La configuration de langue vocale est invalide`,"voice.errorRuntimeMissing":`Le runtime Whisper n'est pas installé ou pas dans le PATH`,"voice.maxDurationReached":`Durée maximale d'enregistrement atteinte`,"voice.runtimeReady":`Runtime prêt : {command}`,"voice.runtimeMissing":`Runtime manquant : {command}`,"voice.ffmpegReady":`ffmpeg prêt`,"voice.ffmpegMissing":`ffmpeg manquant`,"voice.sectionRuntime":`État du runtime`,"voice.sectionActivation":`Activation`,"voice.sectionModels":`Modèles Whisper`,"voice.sectionAdvanced":`Options avancées`,"voice.sectionBehavior":`Comportement de la transcription`,"voice.sectionBinaries":`Chemins des binaires`,"voice.downloadModels":`Télécharger un modèle`,"voice.cancelFailed":`Échec de l'annulation du téléchargement`,"createPage.title":`Créer un workspace`,"createPage.subtitle":`Décrivez la mission, choisissez un projet, puis configurez l’agent.`,"createPage.sectionMission":`Mission`,"createPage.sectionMissionHint":`Donnez à l’agent un objectif clair et le contexte nécessaire pour le réaliser.`,"createPage.workspaceNameLabel":`Nom du workspace`,"createPage.descriptionLabel":`Description de la mission`,"createPage.sources":`Sources facultatives`,"createPage.sectionGit":`Projet Git`,"createPage.sectionGitHint":`Choisissez le dépôt, la branche de départ et le mode de worktree.`,"createPage.worktreeMode":`Mode de worktree`,"createPage.worktreeNew":`Nouveau worktree isolé`,"createPage.worktreeExisting":`Réutiliser un worktree existant`,"createPage.projectLabel":`Projet`,"createPage.sourceBranch":`Branche de départ`,"createPage.workingBranchPreview":`Aperçu de la branche de travail`,"createPage.branchNamePending":`nom-du-workspace`,"createPage.sectionAgent":`Agent`,"createPage.sectionAgentHint":`Vérifiez les réglages d’exécution ou activez l’automatisation.`,"createPage.configureAgent":`Configurer l’agent`,"createPage.advancedOptions":`Options avancées`,"createPage.keyboardHint":`Appuyez sur Ctrl/Cmd + Entrée pour créer le workspace.`,"createPage.createWorkspace":`Créer le workspace`,"createPage.compareEngines":`Comparer deux moteurs`,"createPage.engineA":`Moteur A`,"createPage.engineB":`Moteur B`,"createPage.compareBrainstormLocked":`Mode comparaison : chaque moteur brainstorme avec le modèle et l'effort définis dans son bloc ci-dessus.`,"createPage.compareEnginesHint":`Crée deux workspaces à partir de cette tâche, un par moteur, dans des worktrees frères. Leurs diffs peuvent ensuite être comparés côte à côte.`,"createPage.compareNeedsNewWorktree":`Comparer deux moteurs nécessite deux nouveaux worktrees. Désactivez d'abord « utiliser un worktree existant ».`,"createPage.compareNeedsSecondEngine":`Choisissez un second moteur, différent du premier, pour la comparaison.`,"comparison.title":`Comparaison de moteurs`,"comparison.hint":`La même tâche, exécutée par chaque moteur dans son propre worktree.`,"comparison.engine":`Moteur`,"comparison.status":`Statut`,"comparison.tasks":`Tâches`,"comparison.commits":`Commits`,"comparison.files":`Fichiers`,"comparison.diff":`Diff`,"comparison.messages":`Messages`,"comparison.messagesTitle":`Messages de l'agent / vos messages`,"comparison.questions":`Questions`,"comparison.tools":`Outils`,"comparison.errors":`Erreurs`,"comparison.tokens":`Tokens`,"comparison.tokensTitle":`Tokens en entrée / en sortie`,"comparison.sessions":`Sessions`,"comparison.duration":`Durée`,"comparison.exportCsv":`Exporter en CSV`,"comparison.open":`Ouvrir`,"comparison.current":`Celui-ci`,"comparison.archived":`archivé`,"comparison.incomplete":`Un seul workspace de cette comparaison existe. L'autre n'a jamais été créé, ou a été supprimé.`,"createPage.comparisonPartial":`Seulement {count} workspace(s) sur {total} ont été créés. Celui qui existe est utilisable tel quel ; supprimez-le si vous préférez recommencer.`,"createPage.notionEnabled":`Notion activé`,"createPage.importNotion":`Importer depuis Notion`,"createPage.notionPlaceholder":`https://www.notion.so/workspace/Page-title-abc123...`,"createPage.notionValidation":`L'URL doit commencer par https://www.notion.so/ ou https://app.notion.com/`,"createPage.notionAutoExtract":`Les sous-tâches et critères d'acceptation seront extraits automatiquement.`,"createPage.notionPanelChoiceLabel":`Cette URL pointe vers une sous-page (?p=). Sur laquelle veux-tu travailler ?`,"createPage.notionPanelOption":`Sous-page (panel)`,"createPage.notionPanelOptionDesc":`La page que tu consultais — recommandé`,"createPage.notionParentOption":`Page parente`,"createPage.notionParentOptionDesc":`L'epic / database qui la contient`,"createPage.importSentry":`Importer Sentry`,"createPage.sentryEnabled":`Sentry activé`,"createPage.sentryPlaceholder":`https://votre-org.sentry.io/issues/123456`,"createPage.sentryValidation":`L'URL doit pointer vers une issue Sentry (/issues/<id>)`,"createPage.sentryAutoExtract":`L'issue Sentry sera importée automatiquement`,"createPage.sentryExtractHint":`Kobo va extraire l'issue et l'écrire dans .ai/thoughts/`,"createPage.importPr":`Importer depuis une PR`,"createPage.importPrRequiresProject":`Choisir d'abord un projet`,"createPage.importPrNotSupported":`Le forge de ce projet ne permet pas de lister les pull requests`,"createPage.lockedToPr":`Verrouillé sur la PR #{number}`,"createPage.prReadyToCreate":`PR #{number} importée — le workspace peut être créé.`,"createPage.unlockPrCheckout":`Déverrouiller`,"createPage.workspaceName":`Nom de l'espace de travail (par défaut le titre de la page Notion)`,"createPage.workspaceNamePlaceholder":`Nom de l'espace de travail...`,"createPage.instructions":`Instructions supplémentaires (optionnel)...`,"createPage.instructionsPlaceholder":`Décrivez la tâche...`,"createPage.tasks":`Tâches ({count})`,"createPage.addTask":`Ajouter une tâche...`,"createPage.acceptanceCriteria":`Critères d'acceptation ({count})`,"createPage.addCriterion":`Ajouter un critère...`,"createPage.projectPath":`Chemin du projet`,"createPage.branchType":`Type de branche`,"createPage.branch":`Branche`,"createPage.noBranches":`Aucune branche trouvée`,"createPage.enterPath":`Entrez le chemin du projet`,"createPage.skipSetupScript":`Ignorer le script de setup`,"createPage.worktreePickerLabel":`Worktree existant`,"createPage.noOrphanWorktrees":`Aucun worktree orphelin pour ce projet`,"createPage.pickWorktreeRequired":`Sélectionne un worktree à réutiliser`,"createPage.notionExtractHint":`Les sous-tâches et critères d'acceptation seront extraits de la page Notion.`,"createPage.errorCreating":`Erreur lors de la création de l'espace de travail.`,"createPage.branchAdjusted":"Branche déjà existante — création de `{branch}` à la place. Le dossier worktree correspondant utilise le même suffixe.","createPage.localSourceFallback":`Workspace créé à partir de la branche locale (origin injoignable) — la base peut être périmée.`,"createPage.validationNotionUrl":`Veuillez coller une URL Notion valide (https://www.notion.so/... ou https://app.notion.com/...).`,"createPage.validationDescription":`Veuillez décrire la tâche.`,"createPage.validationName":`Veuillez fournir un nom d'espace de travail.`,"createPage.validationPath":`Veuillez entrer le chemin du projet.`,"createPage.validationBranch":`Veuillez sélectionner une branche.`,"createPage.validationFocusHint":`Le champ à corriger est mis en évidence ci-dessous.`,"createPage.progress.validate":`Validation de la demande…`,"createPage.progress.fetch-source-branch":`Récupération de la branche source depuis origin…`,"createPage.progress.inspect-worktree":`Inspection du worktree existant…`,"createPage.progress.extract-notion":`Extraction de la page Notion…`,"createPage.progress.extract-sentry":`Extraction de l’issue Sentry…`,"createPage.progress.create-record":`Création du workspace…`,"createPage.progress.create-tasks":`Création des tâches et critères d’acceptation…`,"createPage.progress.create-worktree":`Création du worktree git…`,"createPage.progress.write-conventions":`Écriture des conventions git…`,"createPage.progress.write-context-files":`Écriture des fichiers de contexte…`,"createPage.progress.build-prompt":`Construction du prompt initial…`,"createPage.progress.setup-script":`Exécution de votre script d’installation…`,"createPage.progress.start-agent":`Démarrage de l’agent…`,"createPage.progress.rollback":`Annulation de la création échouée…`,"createPage.progress.done":`Terminé`,"createPage.progress.step":`Étape {index} sur {total}`,"createPage.errorAtStep":`La création a échoué à l’étape « {step} » : {message}`,"createPage.override.title":`Deux de vos choix ont été remplacés`,"createPage.override.setup-script-forced":`Script d’installation ignoré : le relancer sur un worktree que vous avez déjà préparé pourrait en détruire le contenu.`,"createPage.override.permission-mode-downgraded":`Mode de permission passé de Plan à Bypass : une boucle autonome ne peut pas tourner en Plan, qui bloque les outils et les modifications.`,"settings.title":`Paramètres`,"settings.language":`Langue`,"settings.projectColor":`Couleur`,"settings.projectColorClear":`Effacer`,"settings.projectColorDefault":`Par défaut (gris)`,"settings.workspaceListSection":`Liste des workspaces`,"settings.flattenWorkspaceList":`Afficher en liste plate`,"settings.flattenWorkspaceListHint":`Affiche tous les espaces de travail en liste plate avec un badge projet, plutôt que regroupés par projet.`,"settings.skillSuite.section":`Suite de skills`,"settings.skillSuite.superpowers":`Superpowers`,"settings.skillSuite.gstack":`gstack`,"settings.skillSuite.custom":`Personnalisé`,"settings.skillSuite.superpowersHint":`Workflow opiné TDD / brainstorm / plan (github.com/obra/superpowers).`,"settings.skillSuite.gstackHint":`Suite de Garry Tan — /review, /ship, /qa, /office-hours, etc. (github.com/garrytan/gstack).`,"settings.skillSuite.superpowersGstack":`Superpowers + gstack`,"settings.skillSuite.superpowersGstackHint":`Les deux suites s'empilent — superpowers pour la méthodo (brainstorm / TDD / plans / review au niveau principes), gstack pour les workflows concrets (/review, /qa, /browse, /design-review, /investigate).`,"settings.skillSuite.ecc":`ECC`,"settings.skillSuite.eccHint":`Framework agentique d'affaan-m — agents, skills, rules et hooks pour planifier, tester, implémenter, relire et mémoriser (github.com/affaan-m/ECC).`,"settings.skillSuite.allThree":`Superpowers + gstack + ECC`,"settings.skillSuite.allThreeHint":`Les trois suites s'empilent — superpowers pour la méthodo, gstack pour les workflows concrets, ECC pour des passes de relecture/implémentation multi-agents structurées.`,"settings.skillSuite.customHint":`Compose les cinq prompts ci-dessous à partir des templates de ton choix, puis modifie-les librement.`,"settings.skillSuite.reloadDefaults":`Recharger les valeurs par défaut`,"settings.skillSuite.reloadDefaultsConfirm":`Remplacer les cinq prompts personnalisés par les valeurs agnostiques par défaut ?`,"settings.skillSuite.customPrompts":`Prompts personnalisés`,"settings.skillSuite.agnostic":`Base agnostique`,"settings.skillSuite.importPrompt":`Importer un template`,"settings.skillSuite.imported":`Template importé. Tu peux maintenant le modifier.`,"settings.skillSuite.importFailed":`Impossible d'importer le template`,"settings.skillSuite.reviewTemplate":`Template de relecture`,"settings.skillSuite.autoLoopReviewGate":`Gate de relecture auto-loop`,"settings.skillSuite.autoLoopGroomingIntro":`Intro de grooming auto-loop`,"settings.skillSuite.qaTemplate":`Template QA`,"settings.skillSuite.brainstormingInstruction":`Instruction phase brainstorming`,"settings.global":`Général`,"settings.projects":`Projets`,"settings.globalSettings":`Paramètres généraux`,"settings.defaultModel":`Modèle par défaut`,"settings.defaultModelClaude":`Modèle par défaut (Claude Code)`,"settings.defaultModelCodex":`Modèle par défaut (OpenAI Codex)`,"settings.agentPermissions":`Permissions de l'agent`,"settings.skipPermissions":`Ignorer les invites de permission (--dangerously-skip-permissions)`,"settings.skipPermissionsWarning":`Attention : désactiver cette option entraînera le refus automatique de toutes les permissions d'outils (Write, Edit, Bash...) en mode headless. L'agent ne pourra que lire.`,"settings.notifications":`Notifications`,"settings.browserNotifications":`Notification navigateur quand l'agent termine`,"settings.audioNotifications":`Notification sonore quand l'agent termine`,"settings.enableBrowserNotifications":`Activer les notifications navigateur`,"settings.testBrowserNotification":`Tester la notification`,"settings.browserNotificationGranted":`Notifications du navigateur autorisées`,"settings.browserNotificationDenied":`Notifications du navigateur bloquées`,"settings.browserNotificationAsk":`Autorisation du navigateur requise`,"settings.browserNotificationUnsupported":`Notifications du navigateur indisponibles`,"settings.browserNotificationPermissionNeeded":`Autorisez les notifications du navigateur pour envoyer un test.`,"settings.browserNotificationTestTitle":`Test de notification Kōbō`,"settings.browserNotificationTestBody":`Les notifications du navigateur fonctionnent.`,"settings.enableAudio":`Activer l'audio`,"settings.notificationSound":`Son de notification`,"settings.notificationSoundHint":`Joué quand l'agent termine ou demande une permission.`,"settings.questionSound":`Son des questions`,"settings.questionSoundHint":`Joué uniquement quand l'agent te pose une question.`,"settings.workspaceCreatedSound":`Son de création d'espace de travail`,"settings.workspaceCreatedSoundHint":`Joué après la création d'un espace de travail.`,"settings.notificationSoundPreview":`Écouter`,"settings.notificationVolume":`Volume`,"settings.notificationSoundHey":`Hey`,"settings.agentErrorSound":`Erreurs de l’agent`,"settings.agentErrorSoundHint":`Joué pour les quotas, rate limits et erreurs de l’agent.`,"settings.notificationSoundBasic":`Notification basique`,"settings.notificationSoundWorkspaceCreated":`Warcraft III — Travail`,"settings.notificationSoundTravailTermine":`Travail terminé`,"settings.notificationSoundFaaah":`Faaah`,"settings.notificationSoundCaVaPeter":`Ça va péter`,"settings.notificationSoundDryFart":`Dry fart`,"settings.notificationSoundForShure":`For shure`,"settings.prSoundSection":`PR / MR et CI`,"settings.soundGeneral":`Son général`,"settings.soundNone":`Aucun son`,"settings.prCiFailedSound":`CI en échec`,"settings.prCiRecoveredSound":`CI rétablie`,"settings.prChangesRequestedSound":`Modifications demandées`,"settings.prApprovedSound":`PR approuvée`,"settings.prMergeConflictSound":`Conflit de merge`,"settings.prReadyToMergeSound":`Prête à merger`,"settings.prMergedSound":`PR mergée`,"settings.prCiFailedSoundHint":`Joué quand la CI passe en échec.`,"settings.prCiRecoveredSoundHint":`Joué quand la CI se rétablit après un échec.`,"settings.prChangesRequestedSoundHint":`Joué quand une review demande des modifications.`,"settings.prApprovedSoundHint":`Joué quand la pull request est approuvée.`,"settings.prMergeConflictSoundHint":`Joué quand un conflit de merge est détecté.`,"settings.prReadyToMergeSoundHint":`Joué quand la pull request devient prête à merger.`,"settings.prMergedSoundHint":`Joué quand la pull request est mergée.`,"settings.notificationSoundSeptiemeCompagnie03":`7ème compagnie 03`,"settings.notificationSoundAllerFtg":`Aller FTG`,"settings.notificationSoundArreteDeMentir":`Arrête de mentir`,"settings.notificationSoundArretezLesMessages":`Arrêtez d'envoyer les messages`,"settings.notificationSoundBahAlorsOnEstNul":`Bah alors, on est nul`,"settings.notificationSoundGtaVDeath":`GTA V — Death`,"settings.notificationSoundNanTuDegages":`Nan, tu dégages`,"settings.notificationSoundNanWallahPardon":`Nan, wallah, pardon`,"settings.notificationSoundOuaisCestGreg":`Ouais, c'est Greg`,"settings.notificationSoundPasCaZinedine":`Pas ça, Zinedine`,"settings.notificationSoundTaGueule":`Ta gueule`,"settings.notificationSoundTuVasLaFermer":`Tu vas la fermer`,"settings.notificationSoundYaaa":`Yaaa`,"settings.notificationSoundMaisLaisseMoiDormirZebi":`Mais laisse-moi dormir zebi`,"settings.defaultPermissionMode":`Mode de permission par défaut`,"settings.defaultPermissionModeClaude":`Mode de permission par défaut (Claude Code)`,"settings.defaultPermissionModeCodex":`Mode de permission par défaut (OpenAI Codex)`,"settings.defaultPermissionModeHint":`Mode appliqué à la création d'un workspace. Plan = lecture seule, Bypass = sans prompt, Strict = auto-accept des éditions avec allow-list, Interactif = demande avant chaque outil.`,"settings.activityFeed":`Flux d'activité`,"settings.verboseMessages":`Afficher les messages système détaillés (task_progress, task_started)`,"settings.showThinkingBlocks":`Afficher les blocs de réflexion des agents`,"settings.whipSettings":`Fouet`,"settings.whipSettingsHint":`Configurez le raccourci et le volume du fouet optionnel.`,"settings.whipEnabled":`Activer le fouet`,"settings.whipEnabledHint":`Affiche le fouet interactif dans les workspaces actifs compatibles.`,"settings.whipVolume":`Volume du fouet`,"settings.whipVolumeMasterAudioDisabled":`L’audio principal est désactivé. Activez les notifications audio pour régler le volume du fouet ; la valeur enregistrée est conservée.`,"whip.overlayLabel":`Fouet interactif`,"whip.overlayInstructions":`Déplacez le pointeur pour contrôler le fouet. Appuyez sur Entrée ou Espace pour le faire claquer. Appuyez sur Échap pour fermer.`,"settings.whipShortcut":`Raccourci du fouet`,"settings.whipShortcutHint":`Cliquez, puis appuyez sur le raccourci à utiliser.`,"settings.whipShortcutRecording":`Appuyez sur un raccourci…`,"settings.whipShortcutButtonLabel":`Raccourci du fouet : {shortcut}`,"settings.whipShortcutRecordingLabel":`Enregistrement du raccourci du fouet. Appuyez sur un raccourci…`,"settings.whipShortcutReset":`Réinitialiser le raccourci`,"settings.whipShortcutReserved":`Ce raccourci est réservé par le navigateur.`,"settings.testIntegration":`Tester la connexion`,"pwa.offline":`Vous êtes hors ligne. Le chat et les agents nécessitent le serveur Kōbō.`,"pwa.reconnecting":`Reconnexion au serveur Kōbō…`,"pwa.installReady":`Installez Kōbō comme application.`,"pwa.install":`Installer`,"pwa.ignore":`Ignorer`,"pwa.updateReady":`Une mise à jour de Kōbō est disponible.`,"pwa.reload":`Recharger`,"chat.searchWorkspaceHistory":`Rechercher dans l’historique du workspace`,"chat.historySearch.user":`Vous`,"chat.historySearch.agent":`Agent`,"chat.openInGitDiff":`Ouvrir dans le diff Git`,"timeline.title":`Chronologie des sessions`,"timeline.export":`Exporter le diagnostic`,"timeline.unnamed":`Session agent`,"timeline.tools":`{count} outils`,"timeline.errors":`{count} erreurs`,"settings.availableVariables":`Variables disponibles dans les modèles de prompt`,"settings.prPromptTemplate":`Modèle de prompt PR`,"settings.prPromptPlaceholder":`Instructions pour l'agent lors de la création de PR GitHub...`,"settings.prPromptHint":`Utilisez les variables listées ci-dessus (syntaxe doubles accolades).`,"settings.reviewPromptTemplate":`Modèle de prompt de review`,"settings.reviewPromptPlaceholder":`Instructions pour l'agent lors de la review des changes de la branche...`,"settings.ciFixPromptTemplate":`Modèle de prompt « Fix CI »`,"settings.ciFixPromptHint":`Envoyé à l'agent quand un workspace voit sa CI échouer. Variables (syntaxe double-accolades) : pr_url, pr_number, pr_title, branch_name, source_branch, workspace_name, workspace_id, project_name, failed_jobs, ci_run_url.`,"settings.ciFixPromptPlaceholder":`Demande à l'agent de diagnostiquer et de corriger les jobs CI en échec...`,"settings.finalizationPromptTemplate":`Prompt de finalisation de l'auto-loop`,"settings.finalizationPromptHint":`Prompt par défaut pour la dernière itération de l'auto-loop (contrôles qualité finaux). Utilisé quand un projet laisse son propre prompt de finalisation vide.`,"settings.finalizationPromptPlaceholder":`Run final quality checks before closing the workspace...`,"settings.notionInitialPrompt":`Prompt initial Notion`,"settings.notionInitialPrompt.help":`Ajouté au prompt de création de workspace quand le workspace a un ticket Notion. Variables : {variables}.`,"settings.notionInitialPrompt.project":`Prompt initial Notion (override)`,"settings.sentryInitialPrompt":`Prompt initial Sentry`,"settings.sentryInitialPrompt.help":`Ajouté au prompt de création de workspace quand le workspace a une issue Sentry. Variables : {variables}.`,"settings.sentryInitialPrompt.project":`Prompt initial Sentry (override)`,"settings.initialPrompt.inheritHint":`Laisser vide pour hériter. Saisir un caractère d'espacement pour désactiver l'injection à ce niveau.`,"settings.resetToDefault":`Réinitialiser`,"settings.resetFailed":`Échec du chargement de la valeur par défaut`,"settings.sentryIntegration":`Intégration Sentry`,"settings.var.prNumber":`Numéro de PR (ex : 42)`,"settings.var.prUrl":`URL complète de la PR créée`,"settings.var.branchName":`Nom de la branche de travail`,"settings.var.sourceBranch":`Branche source ciblée par la PR`,"settings.var.workspaceName":`Nom du workspace`,"settings.var.projectName":`Dernier segment du chemin du projet`,"settings.var.notionUrl":`URL Notion si définie, vide sinon`,"settings.var.commits":`Liste à puces des commits entre source et head`,"settings.var.diffStats":`Résumé shortstat Git (fichiers, insertions, suppressions)`,"settings.var.tasks":`Tâches classiques en liste à cocher`,"settings.var.acceptanceCriteria":`Critères d'acceptation en liste à cocher`,"settings.gitConventions":`Conventions Git (global)`,"settings.gitConventionsPlaceholder":`# Conventions Git...`,"settings.gitConventionsHint":`Ces conventions sont écrites dans .ai/.git-conventions.md pour chaque nouvel espace de travail et doivent être respectées par l'agent avant toute opération Git. Remplacées par les conventions par projet si définies.`,"settings.setupScript":`Script de setup`,"settings.cleanupScript":`Script de cleanup`,"settings.archiveScript":`Script d'archivage`,"settings.archiveScriptHint":`Script shell exécuté côté serveur dans le worktree quand un workspace est archivé. Laisser vide pour désactiver.`,"settings.archiveScriptPlaceholder":`ex. nettoyer des conteneurs, libérer de l'espace disque…`,"settings.hook.sessionEndedTitle":`Hook : fin de session`,"settings.hook.sessionEndedHint":`Exécuté quand une session d'agent se termine, quelle qu'en soit la raison. Lit KOBO_SESSION_END_REASON (completed / error / killed / watchdog), KOBO_SESSION_STOP_CAUSE, KOBO_AUTOLOOP_ACTIVE, KOBO_SESSION_ID et KOBO_SESSION_EXIT_CODE. Vide = désactivé.`,"settings.hook.sessionEndedPlaceholder":`ex. npm test, ou notifier un canal de discussion…`,"settings.hook.prMergedTitle":`Hook : PR mergée`,"settings.hook.prMergedHint":`Exécuté quand une PR est détectée comme mergée, avant l'archivage ou la purge du workspace - le worktree est encore sur le disque. Lit KOBO_PR_NUMBER et KOBO_PR_URL. Vide = désactivé.`,"settings.hook.prMergedPlaceholder":`ex. déclencher un déploiement, taguer une release…`,"settings.hook.autoLoopDisabledTitle":`Hook : auto-loop arrêtée`,"settings.hook.autoLoopDisabledHint":`Exécuté à chaque désactivation de l'auto-loop, par Kōbō ou par vous. Lit KOBO_AUTOLOOP_REASON (completed / stall / error / user-action / awaiting-clarification) et KOBO_TASKS_PENDING. Vide = désactivé.`,"settings.hook.autoLoopDisabledPlaceholder":`ex. envoyer une notification quand la boucle bloque…`,"settings.changeSourceBranchScript":`Script de changement de branche source`,"settings.changeSourceBranchScript.help":`Remplace le cherry-pick intégré quand non vide. Le script possède git, base de PR, force-push et conflits ; Kōbō refuse seulement si l'agent tourne et met à jour la métadonnée source à exit 0.`,"settings.changeSourceBranchScript.envHelp":`KOBO_NEW_BASE — nouvelle branche source choisie dans le dialogue
|
|
2
2
|
KOBO_OLD_BASE — précédente branche source du workspace
|
|
3
3
|
KOBO_WORKING_BRANCH — branche de travail du workspace
|
|
4
4
|
KOBO_WORKTREE_PATH — chemin absolu du worktree (et cwd)
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{n as e}from"./editor.api-
|
|
1
|
+
import{n as e}from"./editor.api-B7h7KULV.js";var t=[`assign`,`flush`,`ftl`,`return`,`global`,`import`,`include`,`break`,`continue`,`local`,`nested`,`nt`,`setting`,`stop`,`t`,`lt`,`rt`,`fallback`],n=[`attempt`,`autoesc`,`autoEsc`,`compress`,`comment`,`escape`,`noescape`,`function`,`if`,`list`,`items`,`sep`,`macro`,`noparse`,`noParse`,`noautoesc`,`noAutoEsc`,`outputformat`,`switch`,`visit`,`recurse`],r={close:`>`,id:`angle`,open:`<`},i={close:`\\]`,id:`bracket`,open:`\\[`},a={close:`[>\\]]`,id:`auto`,open:`[<\\[]`},o={close:`\\}`,id:`dollar`,open1:`\\$`,open2:`\\{`},s={close:`\\]`,id:`bracket`,open1:`\\[`,open2:`=`};function c(r){return{brackets:[[`<`,`>`],[`[`,`]`],[`(`,`)`],[`{`,`}`]],comments:{blockComment:[`${r.open}--`,`--${r.close}`]},autoCloseBefore:`
|
|
2
2
|
\r }]),.:;=`,autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`,notIn:[`string`]},{open:`'`,close:`'`,notIn:[`string`]}],surroundingPairs:[{open:`"`,close:`"`},{open:`'`,close:`'`},{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`}],folding:{markers:{start:RegExp(`${r.open}#(?:${n.join(`|`)})([^/${r.close}]*(?!/)${r.close})[^${r.open}]*$`),end:RegExp(`${r.open}/#(?:${n.join(`|`)})[\\r\\n\\t ]*>`)}},onEnterRules:[{beforeText:RegExp(`${r.open}#(?!(?:${t.join(`|`)}))([a-zA-Z_]+)([^/${r.close}]*(?!/)${r.close})[^${r.open}]*$`),afterText:RegExp(`^${r.open}/#([a-zA-Z_]+)[\\r\\n\\t ]*${r.close}$`),action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`${r.open}#(?!(?:${t.join(`|`)}))([a-zA-Z_]+)([^/${r.close}]*(?!/)${r.close})[^${r.open}]*$`),action:{indentAction:e.IndentAction.Indent}}]}}function l(){return{brackets:[[`<`,`>`],[`[`,`]`],[`(`,`)`],[`{`,`}`]],autoCloseBefore:`
|
|
3
3
|
\r }]),.:;=`,autoClosingPairs:[{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`"`,close:`"`,notIn:[`string`]},{open:`'`,close:`'`,notIn:[`string`]}],surroundingPairs:[{open:`"`,close:`"`},{open:`'`,close:`'`},{open:`{`,close:`}`},{open:`[`,close:`]`},{open:`(`,close:`)`},{open:`<`,close:`>`}],folding:{markers:{start:RegExp(`[<\\[]#(?:${n.join(`|`)})([^/>\\]]*(?!/)[>\\]])[^<\\[]*$`),end:RegExp(`[<\\[]/#(?:${n.join(`|`)})[\\r\\n\\t ]*>`)}},onEnterRules:[{beforeText:RegExp(`[<\\[]#(?!(?:${t.join(`|`)}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`),afterText:RegExp(`^[<\\[]/#([a-zA-Z_]+)[\\r\\n\\t ]*[>\\]]$`),action:{indentAction:e.IndentAction.IndentOutdent}},{beforeText:RegExp(`[<\\[]#(?!(?:${t.join(`|`)}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`),action:{indentAction:e.IndentAction.Indent}}]}}function u(e,t){let n=`_${e.id}_${t.id}`,r=e=>e.replace(/__id__/g,n),i=e=>{let t=e.source.replace(/__id__/g,n);return new RegExp(t,e.flags)};return{unicode:!0,includeLF:!1,start:r(`default__id__`),ignoreCase:!1,defaultToken:`invalid`,tokenPostfix:`.freemarker2`,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`<`,close:`>`,token:`delimiter.angle`}],[r(`open__id__`)]:new RegExp(e.open),[r(`close__id__`)]:new RegExp(e.close),[r(`iOpen1__id__`)]:new RegExp(t.open1),[r(`iOpen2__id__`)]:new RegExp(t.open2),[r(`iClose__id__`)]:new RegExp(t.close),[r(`startTag__id__`)]:i(/(@open__id__)(#)/),[r(`endTag__id__`)]:i(/(@open__id__)(\/#)/),[r(`startOrEndTag__id__`)]:i(/(@open__id__)(\/?#)/),[r(`closeTag1__id__`)]:i(/((?:@blank)*)(@close__id__)/),[r(`closeTag2__id__`)]:i(/((?:@blank)*\/?)(@close__id__)/),blank:/[ \t\n\r]/,keywords:[`false`,`true`,`in`,`as`,`using`],directiveStartCloseTag1:/attempt|recover|sep|auto[eE]sc|no(?:autoe|AutoE)sc|compress|default|no[eE]scape|comment|no[pP]arse/,directiveStartCloseTag2:/else|break|continue|return|stop|flush|t|lt|rt|nt|nested|recurse|fallback|ftl/,directiveStartBlank:/if|else[iI]f|list|for[eE]ach|switch|case|assign|global|local|include|import|function|macro|transform|visit|stop|return|call|setting|output[fF]ormat|nested|recurse|escape|ftl|items/,directiveEndCloseTag1:/if|list|items|sep|recover|attempt|for[eE]ach|local|global|assign|function|macro|output[fF]ormat|auto[eE]sc|no(?:autoe|AutoE)sc|compress|transform|switch|escape|no[eE]scape/,escapedChar:/\\(?:[ntrfbgla\\'"\{=]|(?:x[0-9A-Fa-f]{1,4}))/,asciiDigit:/[0-9]/,integer:/[0-9]+/,nonEscapedIdStartChar:/[\$@-Z_a-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u1FFF\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183-\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3006\u3031-\u3035\u303B-\u303C\u3040-\u318F\u31A0-\u31BA\u31F0-\u31FF\u3300-\u337F\u3400-\u4DB5\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,escapedIdChar:/\\[\-\.:#]/,idStartChar:/(?:@nonEscapedIdStartChar)|(?:@escapedIdChar)/,id:/(?:@idStartChar)(?:(?:@idStartChar)|(?:@asciiDigit))*/,specialHashKeys:/\*\*|\*|false|true|in|as|using/,namedSymbols:/<=|>=|\\lte|\\lt|<|\\gte|\\gt|>|&&|\\and|->|->|==|!=|\+=|-=|\*=|\/=|%=|\+\+|--|<=|&&|\|\||:|\.\.\.|\.\.\*|\.\.<|\.\.!|\?\?|=|<|\+|-|\*|\/|%|\||\.\.|\?|!|&|\.|,|;/,arrows:[`->`,`->`],delimiters:[`;`,`:`,`,`,`.`],stringOperators:[`lte`,`lt`,`gte`,`gt`],noParseTags:[`noparse`,`noParse`,`comment`],tokenizer:{[r(`default__id__`)]:[{include:r(`@directive_token__id__`)},{include:r(`@interpolation_and_text_token__id__`)}],[r(`fmExpression__id__.directive`)]:[{include:r(`@blank_and_expression_comment_token__id__`)},{include:r(`@directive_end_token__id__`)},{include:r(`@expression_token__id__`)}],[r(`fmExpression__id__.interpolation`)]:[{include:r(`@blank_and_expression_comment_token__id__`)},{include:r(`@expression_token__id__`)},{include:r(`@greater_operators_token__id__`)}],[r(`inParen__id__.plain`)]:[{include:r(`@blank_and_expression_comment_token__id__`)},{include:r(`@directive_end_token__id__`)},{include:r(`@expression_token__id__`)}],[r(`inParen__id__.gt`)]:[{include:r(`@blank_and_expression_comment_token__id__`)},{include:r(`@expression_token__id__`)},{include:r(`@greater_operators_token__id__`)}],[r(`noSpaceExpression__id__`)]:[{include:r(`@no_space_expression_end_token__id__`)},{include:r(`@directive_end_token__id__`)},{include:r(`@expression_token__id__`)}],[r(`unifiedCall__id__`)]:[{include:r(`@unified_call_token__id__`)}],[r(`singleString__id__`)]:[{include:r(`@string_single_token__id__`)}],[r(`doubleString__id__`)]:[{include:r(`@string_double_token__id__`)}],[r(`rawSingleString__id__`)]:[{include:r(`@string_single_raw_token__id__`)}],[r(`rawDoubleString__id__`)]:[{include:r(`@string_double_raw_token__id__`)}],[r(`expressionComment__id__`)]:[{include:r(`@expression_comment_token__id__`)}],[r(`noParse__id__`)]:[{include:r(`@no_parse_token__id__`)}],[r(`terseComment__id__`)]:[{include:r(`@terse_comment_token__id__`)}],[r(`directive_token__id__`)]:[[i(/(?:@startTag__id__)(@directiveStartCloseTag1)(?:@closeTag1__id__)/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:[{token:`@brackets.directive`},{token:`delimiter.directive`},{cases:{"@noParseTags":{token:`tag`,next:r(`@noParse__id__.$3`)},"@default":{token:`tag`}}},{token:`delimiter.directive`},{token:`@brackets.directive`}]],[i(/(?:@startTag__id__)(@directiveStartCloseTag2)(?:@closeTag2__id__)/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:[{token:`@brackets.directive`},{token:`delimiter.directive`},{token:`tag`},{token:`delimiter.directive`},{token:`@brackets.directive`}]],[i(/(?:@startTag__id__)(@directiveStartBlank)(@blank)/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:[{token:`@brackets.directive`},{token:`delimiter.directive`},{token:`tag`},{token:``,next:r(`@fmExpression__id__.directive`)}]],[i(/(?:@endTag__id__)(@directiveEndCloseTag1)(?:@closeTag1__id__)/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:[{token:`@brackets.directive`},{token:`delimiter.directive`},{token:`tag`},{token:`delimiter.directive`},{token:`@brackets.directive`}]],[i(/(@open__id__)(@)/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:[{token:`@brackets.directive`},{token:`delimiter.directive`,next:r(`@unifiedCall__id__`)}]],[i(/(@open__id__)(\/@)((?:(?:@id)(?:\.(?:@id))*)?)(?:@closeTag1__id__)/),[{token:`@brackets.directive`},{token:`delimiter.directive`},{token:`tag`},{token:`delimiter.directive`},{token:`@brackets.directive`}]],[i(/(@open__id__)#--/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:{token:`comment`,next:r(`@terseComment__id__`)}],[i(/(?:@startOrEndTag__id__)([a-zA-Z_]+)/),e.id===`auto`?{cases:{"$1==<":{token:`@rematch`,switchTo:`@default_angle_${t.id}`},"$1==[":{token:`@rematch`,switchTo:`@default_bracket_${t.id}`}}}:[{token:`@brackets.directive`},{token:`delimiter.directive`},{token:`tag.invalid`,next:r(`@fmExpression__id__.directive`)}]]],[r(`interpolation_and_text_token__id__`)]:[[i(/(@iOpen1__id__)(@iOpen2__id__)/),[{token:t.id===`bracket`?`@brackets.interpolation`:`delimiter.interpolation`},{token:t.id===`bracket`?`delimiter.interpolation`:`@brackets.interpolation`,next:r(`@fmExpression__id__.interpolation`)}]],[/[\$#<\[\{]|(?:@blank)+|[^\$<#\[\{\n\r\t ]+/,{token:`source`}]],[r(`string_single_token__id__`)]:[[/[^'\\]/,{token:`string`}],[/@escapedChar/,{token:`string.escape`}],[/'/,{token:`string`,next:`@pop`}]],[r(`string_double_token__id__`)]:[[/[^"\\]/,{token:`string`}],[/@escapedChar/,{token:`string.escape`}],[/"/,{token:`string`,next:`@pop`}]],[r(`string_single_raw_token__id__`)]:[[/[^']+/,{token:`string.raw`}],[/'/,{token:`string.raw`,next:`@pop`}]],[r(`string_double_raw_token__id__`)]:[[/[^"]+/,{token:`string.raw`}],[/"/,{token:`string.raw`,next:`@pop`}]],[r(`expression_token__id__`)]:[[/(r?)(['"])/,{cases:{"r'":[{token:`keyword`},{token:`string.raw`,next:r(`@rawSingleString__id__`)}],'r"':[{token:`keyword`},{token:`string.raw`,next:r(`@rawDoubleString__id__`)}],"'":[{token:`source`},{token:`string`,next:r(`@singleString__id__`)}],'"':[{token:`source`},{token:`string`,next:r(`@doubleString__id__`)}]}}],[/(?:@integer)(?:\.(?:@integer))?/,{cases:{"(?:@integer)":{token:`number`},"@default":{token:`number.float`}}}],[/(\.)(@blank*)(@specialHashKeys)/,[{token:`delimiter`},{token:``},{token:`identifier`}]],[/(?:@namedSymbols)/,{cases:{"@arrows":{token:`meta.arrow`},"@delimiters":{token:`delimiter`},"@default":{token:`operators`}}}],[/@id/,{cases:{"@keywords":{token:`keyword.$0`},"@stringOperators":{token:`operators`},"@default":{token:`identifier`}}}],[/[\[\]\(\)\{\}]/,{cases:{"\\[":{cases:{"$S2==gt":{token:`@brackets`,next:r(`@inParen__id__.gt`)},"@default":{token:`@brackets`,next:r(`@inParen__id__.plain`)}}},"\\]":{cases:{...t.id===`bracket`?{"$S2==interpolation":{token:`@brackets.interpolation`,next:`@popall`}}:{},...e.id===`bracket`?{"$S2==directive":{token:`@brackets.directive`,next:`@popall`}}:{},[r(`$S1==inParen__id__`)]:{token:`@brackets`,next:`@pop`},"@default":{token:`@brackets`}}},"\\(":{token:`@brackets`,next:r(`@inParen__id__.gt`)},"\\)":{cases:{[r(`$S1==inParen__id__`)]:{token:`@brackets`,next:`@pop`},"@default":{token:`@brackets`}}},"\\{":{cases:{"$S2==gt":{token:`@brackets`,next:r(`@inParen__id__.gt`)},"@default":{token:`@brackets`,next:r(`@inParen__id__.plain`)}}},"\\}":{cases:{...t.id===`bracket`?{}:{"$S2==interpolation":{token:`@brackets.interpolation`,next:`@popall`}},[r(`$S1==inParen__id__`)]:{token:`@brackets`,next:`@pop`},"@default":{token:`@brackets`}}}}}],[/\$\{/,{token:`delimiter.invalid`}]],[r(`blank_and_expression_comment_token__id__`)]:[[/(?:@blank)+/,{token:``}],[/[<\[][#!]--/,{token:`comment`,next:r(`@expressionComment__id__`)}]],[r(`directive_end_token__id__`)]:[[/>/,e.id===`bracket`?{token:`operators`}:{token:`@brackets.directive`,next:`@popall`}],[i(/(\/)(@close__id__)/),[{token:`delimiter.directive`},{token:`@brackets.directive`,next:`@popall`}]]],[r(`greater_operators_token__id__`)]:[[/>/,{token:`operators`}],[/>=/,{token:`operators`}]],[r(`no_space_expression_end_token__id__`)]:[[/(?:@blank)+/,{token:``,switchTo:r(`@fmExpression__id__.directive`)}]],[r(`unified_call_token__id__`)]:[[/(@id)((?:@blank)+)/,[{token:`tag`},{token:``,next:r(`@fmExpression__id__.directive`)}]],[i(/(@id)(\/?)(@close__id__)/),[{token:`tag`},{token:`delimiter.directive`},{token:`@brackets.directive`,next:`@popall`}]],[/./,{token:`@rematch`,next:r(`@noSpaceExpression__id__`)}]],[r(`no_parse_token__id__`)]:[[i(/(@open__id__)(\/#?)([a-zA-Z]+)((?:@blank)*)(@close__id__)/),{cases:{"$S2==$3":[{token:`@brackets.directive`},{token:`delimiter.directive`},{token:`tag`},{token:``},{token:`@brackets.directive`,next:`@popall`}],"$S2==comment":[{token:`comment`},{token:`comment`},{token:`comment`},{token:`comment`},{token:`comment`}],"@default":[{token:`source`},{token:`source`},{token:`source`},{token:`source`},{token:`source`}]}}],[/[^<\[\-]+|[<\[\-]/,{cases:{"$S2==comment":{token:`comment`},"@default":{token:`source`}}}]],[r(`expression_comment_token__id__`)]:[[/--[>\]]/,{token:`comment`,next:`@pop`}],[/[^\->\]]+|[>\]\-]/,{token:`comment`}]],[r(`terse_comment_token__id__`)]:[[i(/--(?:@close__id__)/),{token:`comment`,next:`@popall`}],[/[^<\[\-]+|[<\[\-]/,{token:`comment`}]]}}}function d(e){let t=u(r,e),n=u(i,e),o=u(a,e);return{...t,...n,...o,unicode:!0,includeLF:!1,start:`default_auto_${e.id}`,ignoreCase:!1,defaultToken:`invalid`,tokenPostfix:`.freemarker2`,brackets:[{open:`{`,close:`}`,token:`delimiter.curly`},{open:`[`,close:`]`,token:`delimiter.square`},{open:`(`,close:`)`,token:`delimiter.parenthesis`},{open:`<`,close:`>`,token:`delimiter.angle`}],tokenizer:{...t.tokenizer,...n.tokenizer,...o.tokenizer}}}var f={conf:c(r),language:u(r,o)},p={conf:c(i),language:u(i,o)},m={conf:c(r),language:u(r,s)},h={conf:c(i),language:u(i,s)},g={conf:l(),language:d(o)},_={conf:l(),language:d(s)};export{m as TagAngleInterpolationBracket,f as TagAngleInterpolationDollar,_ as TagAutoInterpolationBracket,g as TagAutoInterpolationDollar,h as TagBracketInterpolationBracket,p as TagBracketInterpolationDollar};
|