@loicngr/kobo 1.11.37 → 1.11.39
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/AGENTS.md +3 -1
- package/CHANGELOG.md +8 -0
- package/dist/server/index.js +9 -0
- package/dist/server/routes/workspaces.js +39 -18
- package/dist/server/services/agent/engines/claude-code/engine.js +11 -0
- package/dist/server/services/agent/engines/codex/event-mapper.js +3 -1
- package/dist/server/services/agent/event-router.js +1 -1
- package/dist/server/services/agent/orchestrator.js +73 -10
- package/dist/server/services/auto-loop-service.js +3 -3
- package/dist/server/services/pr-watcher-service.js +5 -3
- package/dist/server/services/websocket-service.js +10 -2
- package/dist/server/services/workspace-service.js +8 -4
- package/package.json +2 -2
- package/src/client/dist/pwa/assets/{ActivityFeed-C_-hxIo8.js → ActivityFeed-BzzvcOmq.js} +2 -2
- package/src/client/dist/pwa/assets/{ActivityFeed-BDyFBoxd.css → ActivityFeed-Chsw1Mh7.css} +1 -1
- package/src/client/dist/pwa/assets/{ChangelogPage-CBlGJ4zT.js → ChangelogPage-D8563008.js} +1 -1
- package/src/client/dist/pwa/assets/ComparisonPanel-Bd0X08sg.js +2 -0
- package/src/client/dist/pwa/assets/ComparisonPanel-CRRaDs2D.css +1 -0
- package/src/client/dist/pwa/assets/{CreatePage-ArmtcF4d.js → CreatePage-Bon8qIka.js} +1 -1
- package/src/client/dist/pwa/assets/DashboardPage-D8g7_r4S.css +1 -0
- package/src/client/dist/pwa/assets/DashboardPage-DYxdxEul.js +1 -0
- package/src/client/dist/pwa/assets/{DiffViewer-CaT7vuSr.js → DiffViewer-BpsLNxnj.js} +3 -3
- package/src/client/dist/pwa/assets/{DocumentsPanel-A0isCTaI.js → DocumentsPanel-BJsJ0fNs.js} +1 -1
- package/src/client/dist/pwa/assets/{DrawerToggleButton-T70fh8dp.js → DrawerToggleButton-BVLO5K5d.js} +1 -1
- package/src/client/dist/pwa/assets/{GitPanel-CAvk0G7h.js → GitPanel-Cal_wzC0.js} +3 -3
- package/src/client/dist/pwa/assets/{HealthPage-D8Mr0V6w.js → HealthPage-RFZS7Lao.js} +1 -1
- package/src/client/dist/pwa/assets/{MainLayout-x6Es4Da-.js → MainLayout-vvyiRcql.js} +2 -2
- package/src/client/dist/pwa/assets/{QBtnDropdown-CQqzzlFI.js → QBtnDropdown-X8oNU5Mb.js} +1 -1
- package/src/client/dist/pwa/assets/{QDrawer-Cwj2qh0r.js → QDrawer-Cij17skX.js} +1 -1
- package/src/client/dist/pwa/assets/{QSelect-BSPtuXJg.js → QSelect-xd-AlGo_.js} +1 -1
- package/src/client/dist/pwa/assets/{QTooltip-DC_kDKku.js → QTooltip-CwcCGSWq.js} +1 -1
- package/src/client/dist/pwa/assets/{SchedulePanel-9aJSoz6Y.js → SchedulePanel-CXRUsz6G.js} +1 -1
- package/src/client/dist/pwa/assets/{SearchPage-BjNvtE_U.js → SearchPage-DopbgLxh.js} +1 -1
- package/src/client/dist/pwa/assets/{SettingsPage-CvLnT73V.js → SettingsPage-Jx6TnOzR.js} +1 -1
- package/src/client/dist/pwa/assets/{SplitWorkspacePage-DTao0DHr.js → SplitWorkspacePage-D7lGFRKs.js} +1 -1
- package/src/client/dist/pwa/assets/{TerminalPanel-BrKIW-bJ.js → TerminalPanel-DI8DHb9e.js} +1 -1
- package/src/client/dist/pwa/assets/{TouchPan-_n1AQgoo.js → TouchPan-B3nrkCY8.js} +1 -1
- package/src/client/dist/pwa/assets/{TourReplayButton-CJF3nVvn.js → TourReplayButton-DU1UShMY.js} +1 -1
- package/src/client/dist/pwa/assets/{WorkspaceAttentionLabels-CxesUiIm.js → WorkspaceAttentionLabels-C-yN5IX8.js} +1 -1
- package/src/client/dist/pwa/assets/{WorkspacePage-DoXtwpjV.css → WorkspacePage-BAC6u9OP.css} +1 -1
- package/src/client/dist/pwa/assets/WorkspacePage-DKRpdpPg.js +4 -0
- package/src/client/dist/pwa/assets/{browser-DGWpkvN3.js → browser-f9MHQjfi.js} +1 -1
- package/src/client/dist/pwa/assets/{build-path-tree-Ba1dSLgi.js → build-path-tree-BWBzP8os.js} +1 -1
- package/src/client/dist/pwa/assets/{de-DVK21RB6.js → de-QkDLrcGq.js} +1 -1
- package/src/client/dist/pwa/assets/{documents-BMHzjW_g.js → documents-C2cLnEBQ.js} +1 -1
- package/src/client/dist/pwa/assets/{editor.api-CYTuNwqu.js → editor.api-sw146MWN.js} +1 -1
- package/src/client/dist/pwa/assets/{efforts-BPlRSHXp.js → efforts-C5ZZgCH4.js} +1 -1
- package/src/client/dist/pwa/assets/{engineFeatures-DVB2rklO.js → engineFeatures-CAVMDawq.js} +1 -1
- package/src/client/dist/pwa/assets/{es-C8cQwDZM.js → es-BgQFKlo8.js} +1 -1
- package/src/client/dist/pwa/assets/{expand-template-Cj82YE-O.js → expand-template-B6xAlAaM.js} +1 -1
- package/src/client/dist/pwa/assets/{format-Dk7O3LhA.js → format-BwWP6Aay.js} +1 -1
- package/src/client/dist/pwa/assets/{formatters-TGjvs7Ca.js → formatters-DyWtO-nR.js} +1 -1
- package/src/client/dist/pwa/assets/{fr-BVOMZ2Bl.js → fr-DAdLWjNM.js} +1 -1
- package/src/client/dist/pwa/assets/{freemarker2-39lO_dWH.js → freemarker2-DZ5Hm8UH.js} +1 -1
- package/src/client/dist/pwa/assets/{handlebars-M_0V82cD.js → handlebars-BRUGpTA7.js} +1 -1
- package/src/client/dist/pwa/assets/{html-yILqYDsl.js → html-DNOayNNs.js} +1 -1
- package/src/client/dist/pwa/assets/i18n-CBez_vip.js +1 -0
- package/src/client/dist/pwa/assets/index-VL3fI9a3.js +20 -0
- package/src/client/dist/pwa/assets/{it-CxkAoOj4.js → it-Bumaewp1.js} +1 -1
- package/src/client/dist/pwa/assets/{javascript-DrW-amDc.js → javascript-C0tDQU3z.js} +1 -1
- package/src/client/dist/pwa/assets/{liquid-D_mXmUoL.js → liquid-CN46O6OF.js} +1 -1
- package/src/client/dist/pwa/assets/{mdx-E8O3lvR5.js → mdx-DM-lrr8Q.js} +1 -1
- package/src/client/dist/pwa/assets/{monaco-contributions-C2K3sl_V.js → monaco-contributions-CkN7y-8c.js} +1 -1
- package/src/client/dist/pwa/assets/{monaco.contribution-DLhHQIJn.js → monaco.contribution-2BcAOLjc.js} +2 -2
- package/src/client/dist/pwa/assets/{network-auth-BUwWtnui.js → network-auth-KYS4snQH.js} +1 -1
- package/src/client/dist/pwa/assets/{notify-theme-1mOpY2vN.js → notify-theme-a91Tcr6o.js} +1 -1
- package/src/client/dist/pwa/assets/{pending-diff-open-BL7dKRqF.js → pending-diff-open-DOtELZfB.js} +1 -1
- package/src/client/dist/pwa/assets/{permissionModes-BtC3_P-P.js → permissionModes-C-9Crj-c.js} +1 -1
- package/src/client/dist/pwa/assets/{project-color-BFBFZWeG.js → project-color-BRe4oyNx.js} +1 -1
- package/src/client/dist/pwa/assets/{python-DoZAYim6.js → python-BRpJG6sZ.js} +1 -1
- package/src/client/dist/pwa/assets/{razor-9bZ30g2y.js → razor-CehCmvHl.js} +1 -1
- package/src/client/dist/pwa/assets/{render-chat-markdown-7EtWNjG0.js → render-chat-markdown-DlbQLZ02.js} +1 -1
- package/src/client/dist/pwa/assets/{typescript-C1CBfL3L.js → typescript-Dt_8mVuj.js} +1 -1
- package/src/client/dist/pwa/assets/{use-tours-BJ81clv6.js → use-tours-CSVM_54K.js} +1 -1
- package/src/client/dist/pwa/assets/{workspace-templates-r1-bipjM.js → workspace-templates-GCObcjO6.js} +1 -1
- package/src/client/dist/pwa/assets/{xml-COuu5isK.js → xml-_gOwdzB4.js} +1 -1
- package/src/client/dist/pwa/assets/{yaml-ChZ7WqaJ.js → yaml-BxeBqpGf.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-DZAE2X9j.js +0 -2
- package/src/client/dist/pwa/assets/ComparisonPanel-x1iuICgd.css +0 -1
- package/src/client/dist/pwa/assets/DashboardPage-DsWn5cWl.css +0 -1
- package/src/client/dist/pwa/assets/DashboardPage-eQTCXcdz.js +0 -1
- package/src/client/dist/pwa/assets/WorkspacePage-MxBE0mr3.js +0 -4
- package/src/client/dist/pwa/assets/i18n-2UeMfd5m.js +0 -1
- package/src/client/dist/pwa/assets/index-BJU5dnkF.js +0 -20
|
@@ -14,4 +14,4 @@ KOBO_PR_NUMBER — PR-/MR-Nummer auf der aufgelösten Forge (leer wenn kein
|
|
|
14
14
|
# Oder direkt über git (funktioniert auf GitHub auch nach Löschen des Branches):
|
|
15
15
|
git fetch origin pull/[pr-nummer]/head:[branch-name]
|
|
16
16
|
git worktree add [pfad] [branch-name]`,"settings.purgeDocsRestoreFootnote":`GitHub hält den PR-Head-Ref lange nach dem Löschen des Quellbranches zugänglich (Monate / Jahre). Die automatische Erkennung läuft im 30-Sekunden-Watcher — keine UI-Aktion nötig, sobald der Ordner wieder da ist.`,"settings.purgeDocsPermissionsTitle":`Berechtigungsfehler während der Bereinigung vermeiden`,"settings.purgeDocsPermissionsIntro":`Docker hinterlässt oft root-eigene Dateien in node_modules / vendor innerhalb des Worktrees. Wenn Kōbō versucht, sie zu entfernen, erhältst du EACCES / EPERM und die Bereinigung schlägt fehl. Zwei Vorbeugemöglichkeiten:`,"settings.purgeDocsPermissionsDocker":'Konfiguriere deinen Container so, dass er als dein Host-Benutzer läuft — USER-Direktive im Dockerfile oder `user: "${UID}:${GID}"` in docker-compose (mit UID/GID in deiner Shell exportiert).',"settings.purgeDocsPermissionsAcl":`Bereite das Worktrees-Root mit einer Standard-ACL vor — Sicherheitsnetz, das in den MEISTEN Fällen funktioniert (ext4/btrfs/xfs + Standard-Docker-Bind-Mount). Jede neue Datei erbt dann einen Zugriffseintrag für deinen Benutzer, zusätzlich zum nominalen Besitzer:`,"settings.purgeDocsPermissionsAclCommand":` setfacl -d -m u:$(whoami):rwX [worktrees-root]`,"settings.purgeDocsPermissionsFootnote":"ACL-Einschränkungen: funktionieren NICHT bei benannten Docker-Volumes (nutze einen Bind-Mount), Dateisystemen ohne ACL-Unterstützung (NTFS, exFAT, tmpfs), striktem SELinux mit `:Z` oder wenn Docker `userns-remap` aktiv ist. Die zuverlässigste Lösung bleibt die Konfiguration des Benutzers im Container (Option 1). Tipp: `rwX` (großes X) fügt das Ausführungsbit nur bei Verzeichnissen und bereits ausführbaren Dateien hinzu — sauberer als `rwx`, das jede Textdatei ausführbar machen würde.","settings.purgeDocsPermissionsRecoverTitle":`Einen bereits blockierten Worktree entsperren (bestehende root-eigene Dateien)`,"settings.purgeDocsPermissionsRecoverIntro":`Wenn ein Worktree bereits voll mit root-eigenen Dateien ist (Docker hat schon gelaufen, vendor / node_modules sind blockiert), reicht die präventive ACL oben nicht — du musst die BESTEHENDEN Dateien behandeln. Zwei Ansätze, beide aus dem Worktree-Ordner heraus auszuführen:`,"settings.purgeDocsPermissionsRecoverAclIntro":`Option A — Rekursive ACL (behält root-Ownership für Audit, fügt nur Zugriff für deinen Benutzer parallel hinzu):`,"settings.purgeDocsPermissionsRecoverAclCommand":`# setze Default-ACL für zukünftige Dateien UND gewähre Zugriff auf alles Bestehende
|
|
17
|
-
sudo setfacl -Rd -m u:$(whoami):rwX . && sudo setfacl -R -m u:$(whoami):rwX .`,"settings.purgeDocsPermissionsRecoverChownIntro":`Option B — Ownership übernehmen (einfacher, verliert die Spur "von root im Container erstellt", spielt in der Praxis selten eine Rolle):`,"settings.purgeDocsPermissionsRecoverChownCommand":` sudo chown -R $(whoami):$(whoami) .`,"settings.purgeDocsPermissionsRecoverFootnote":"Tipp: Du kannst diese Befehle direkt auf das Worktrees-Root anwenden (z. B. `~/.worktrees/`), um alle bestehenden UND zukünftigen Workspaces auf einmal abzudecken. Danach funktioniert die Kōbō-Bereinigung ohne Berechtigungsfehler.","contextMenu.runSetup":`Setup-Skript ausführen`,"contextMenu.exportEvents":`Events exportieren (CSV)`,"contextMenu.dismissChangesRequested":`Änderungen angefragt als gesehen markieren`,"contextMenu.dismissCiFailure":`CI-Fehler als gesehen markieren`,"contextMenu.restoreChangesRequested":`Änderungen angefragt als ungesehen markieren`,"contextMenu.restoreCiFailure":`CI-Fehler als ungesehen markieren`,"contextMenu.exportingEvents":`Export wird vorbereitet…`,"contextMenu.exportEventsError":`Event-Export fehlgeschlagen`,"contextMenu.openNotion":`In Notion öffnen`,"contextMenu.openSentry":`In Sentry öffnen`,"contextMenu.openPr":`PR öffnen`,"contextMenu.ignorePrWatch":`PR-Prüfungen ignorieren`,"contextMenu.resumePrWatch":`PR-Prüfungen fortsetzen`,"contextMenu.prWatchToggleFailed":`Aktualisierung der PR-Prüfungen fehlgeschlagen`,"workspace.favorite":`Als Favorit markieren`,"workspace.unfavorite":`Aus Favoriten entfernen`,"workspace.showFavoritesOnly":`Nur Favoriten anzeigen`,"workspace.searchArchivedToggle":`Auch in archivierten Workspaces suchen`,"workspace.descriptionPlaceholder":`Kurze Beschreibung hinzufügen`,"workspace.descriptionDialogHint":`Klartext, max. 200 Zeichen. Leer lassen, um zu löschen.`,"workspace.descriptionTooLong":`Die Beschreibung darf höchstens 200 Zeichen lang sein.`,"workspace.descriptionSaveFailed":`Beschreibung konnte nicht gespeichert werden.`,"workspace.agentDescriptionTooltip":`Live-Status, gepflegt vom Agent`,"mcp.tool.setWorkspaceDescription":`Setzt die Kurzbeschreibung des Workspace (≤ 200 Zeichen).`,"tags.manage":`Tags verwalten`,"tags.manageTitle":`Workspace-Tags verwalten`,"tags.noTagsDefined":`Keine Tags definiert. Füge welche in Einstellungen > Global > Tags hinzu.`,"tags.orphanedHint":`{count} Tag(s) sind nicht mehr im globalen Katalog. Abwählen zum Entfernen.`,"settings.tagsTitle":`Workspace-Tags`,"settings.tagsHint":`Definiere die Tags, die Workspaces zugewiesen werden können. Tippe zum Hinzufügen, klicke auf das Kreuz zum Entfernen.`,"settings.tagsLabel":`Verfügbare Tags`,"settings.branchPrefixesTitle":`Branch-Präfixe`,"settings.branchPrefixesHint":`Verwalten Sie die Git-Branch-Präfixe, die auf der Workspace-Erstellungsseite verfügbar sind. Das erste ist standardmäßig vorausgewählt.`,"settings.branchPrefixesEmpty":`Kein Branch-Präfix definiert. Fügen Sie unten mindestens eines hinzu.`,"settings.branchPrefixesAddLabel":`Neues Präfix`,"settings.branchPrefixesEditHint":`Zum Umbenennen klicken`,"settings.branchPrefixesMoveUp":`Nach oben`,"settings.branchPrefixesMoveDown":`Nach unten`,"settings.worktreesTitle":`Git-Worktrees`,"settings.worktreesHint":`Wähle aus, wo neue Workspace-Worktrees erstellt werden. Relative Pfade sind projektrelativ; absolute Linux/macOS- und Windows-Pfade, $HOME, ~ und %USERPROFILE% werden unterstützt.`,"settings.worktreesPathLabel":`Worktrees-Pfad`,"settings.worktreesPathRequired":`Worktrees-Pfad ist erforderlich.`,"settings.worktreesPrefixByProject":`Worktrees nach Projektname präfixen`,"settings.worktreesPrefixByProjectHint":`Legt jeden Worktree in einem nach dem Projekt benannten Unterordner ab, um Kollisionen zu vermeiden, wenn mehrere Projekte die gleiche Worktree-Wurzel teilen.`,"settings.shareTitle":`Konfiguration teilen`,"settings.shareHint":`Exportiere Einstellungen, Templates und Tags als JSON-Bundle. MCP-Keys werden aus Sicherheitsgründen nicht exportiert.`,"settings.exportConfig":`Exportieren`,"settings.importConfig":`Importieren`,"settings.exportSuccess":`Konfiguration exportiert`,"settings.importSuccess":`Konfiguration importiert`,"settings.importConfirmTitle":`Konfiguration importieren`,"settings.importConfirmMessage":`Dies ersetzt deine aktuellen Einstellungen, Templates und Tags. MCP-Keys bleiben erhalten. Fortfahren?`,"settings.network.title":`Netzwerkzugriff`,"settings.network.hint":`Steuere Kōbō von einem anderen Gerät in deinem vertrauenswürdigen LAN. Aus = nur localhost. An = im Netzwerk erreichbar, per Token geschützt. Starte Kōbō nach dem Umschalten neu.`,"settings.network.enable":`Netzwerkzugriff aktivieren`,"settings.network.behindProxy":`Hinter einem Reverse Proxy`,"settings.network.behindProxyHint":`Kōbō kann deinen eigenen Rechner nicht mehr von einer weitergeleiteten Anfrage unterscheiden — selbst localhost benötigt ab jetzt das Token. Aktiviere dies nur, wenn ein Reverse Proxy (Traefik, nginx, Caddy…) vor Kōbō steht.`,"settings.network.restartRequired":`Starte Kōbō neu, um die neue Bind-Adresse anzuwenden.`,"settings.network.token":`Zugriffstoken`,"settings.network.copy":`Kopieren`,"settings.network.copied":`Kopiert`,"settings.network.regenerate":`Neu generieren`,"settings.network.regenerateConfirm":`Token neu generieren? Verbundene Geräte benötigen das neue Token.`,"settings.network.urls":`LAN-URLs`,"settings.network.scan":`Zum Verbinden scannen`,"settings.network.noUrls":`Keine LAN-Adresse erkannt.`,"settings.network.loadFailed":`Netzwerkzugriff-Einstellungen konnten nicht geladen werden.`,"settings.network.updateFailed":`Netzwerkzugriff-Einstellungen konnten nicht aktualisiert werden.`,"settings.unsavedChanges.title":`Nicht gespeicherte Änderungen`,"settings.unsavedChanges.message":`Dieses Projekt hat nicht gespeicherte Änderungen. Ein Projektwechsel verwirft sie.`,"settings.unsavedChanges.discard":`Verwerfen und wechseln`,"settings.unsavedChanges.cancel":`Abbrechen`,"settings.loadFailed":`Einstellungen konnten nicht geladen werden`,"settings.loadFailedHint":`Speichern ist deaktiviert: das Formular zeigt Standardwerte, und sie zu schreiben würde deine echte Konfiguration überschreiben.`,"health.title":`Status`,"health.tooltip":`Systemstatus`,"changelog.title":`Änderungsprotokoll`,"changelog.tooltip":`Was ist neu in Kōbō`,"changelog.empty":`Kein Änderungsprotokoll verfügbar.`,"changelog.current":`aktuell`,"changelog.currentVersion":`Aktuelle Version: v{version}`,"health.envTitle":`Umgebung`,"health.version":`Version`,"health.koboHome":`Kōbō home`,"health.dbTitle":`Datenbank`,"health.dbPath":`Pfad`,"health.dbSize":`Größe`,"health.schemaVersion":`Schema-Version`,"health.settingsSchemaVersion":`Einstellungs-Schema`,"health.runtimesTitle":`Agent-Laufzeiten`,"health.claudeCliTitle":`Claude Code`,"health.claudeCliMissing":`claude nicht im PATH`,"health.codexCliTitle":`OpenAI Codex`,"health.codexCliMissing":`codex-Binärdatei nicht auflösbar`,"health.forgeCliTitle":`Forge-CLI (gh / glab)`,"health.forgeCliMissing":`Weder gh noch glab gefunden — Pull Requests und CI-Überwachung nicht verfügbar`,"health.workspacesTitle":`Workspaces`,"health.workspacesCount":`{total} gesamt, {archived} archiviert`,"health.worktreesMissing":`{count} Worktree(s) auf der Festplatte fehlen`,"health.sessionsTitle":`Agent-Sitzungen`,"health.sessionsOrphaned":`{n} verwaiste laufende Sitzung(en)`,"health.integrationsTitle":`Integrationen`,"health.integrationConfigured":`konfiguriert`,"health.integrationMissing":`nicht konfiguriert`,"health.integrationDisabled":`deaktiviert`,"settings.integrationEnabled":`Integration aktivieren`,"health.activeTitle":`Aktiver Zustand`,"health.activeQuotaBackoffs":`Ausstehende Quota-Backoffs`,"health.activeWakeups":`Geplante Aufweckungen`,"health.activeAutoLoop":`Auto-Loop läuft`,"health.activeAgentSessions":`Aktive Agent-Sessions`,"health.activeDevServers":`Laufende Dev-Server`,"health.noneActive":`Keine.`,"health.quotaResumeAt":`fortgesetzt um {time}`,"health.wakeupAt":`aufgeweckt um {time}`,"health.startedAgo":`gestartet vor {time}`,"health.autoLoopReady":`bereit, iteriert`,"health.autoLoopGrooming":`Grooming läuft`,"session.started":`Sitzung gestartet`,"session.ended":`Sitzung beendet`,"session.compacted":`Kontext komprimiert`,"session.endedCompleted":`Zug beendet — senden Sie eine Nachricht, um fortzufahren`,"session.endedKilled":`Sitzung gestoppt`,"session.endedError":`Sitzung mit einem Fehler beendet`,"session.endedWatchdog":`Sitzung nach einer Phase der Inaktivität zwangsweise geschlossen`,"tool.running":`Läuft...`,"activity.raw_lines":`Rohausgabezeilen ({n})`,"activity.loading_older":`Ältere Nachrichten werden geladen…`,"activity.compacting":`Kontext wird komprimiert…`,"activity.prev_user_message":`Vorherige Nachricht des Benutzers`,"activity.scroll_to_bottom":`Nach unten scrollen`,"activity.empty":`Noch nichts`,"activity.emptyHint":`Die Agentenausgabe erscheint hier, sobald eine Sitzung startet.`,"activity.a11y.region":`Ansagen zur Agentenaktivität`,"activity.a11y.agentSaid":`Agent: {text}`,"activity.a11y.toolStarted":`Werkzeug {name} gestartet`,"activity.a11y.toolFinished":`Werkzeug {name} beendet`,"activity.a11y.toolFailed":`Werkzeug {name} fehlgeschlagen`,"chat.systemPrompt":`System-Prompt`,"chat.agent":`Agent`,"chat.cleanupScript":`Cleanup-Skript`,"chat.archiveScript":`Archiv-Skript`,"chat.setupScript":`Setup-Skript`,"chat.hookScript":`Hook {event}`,"chat.scriptDone":`Fertig`,"chat.scriptComplete":`[{phase}] Abgeschlossen`,"chat.scriptError":`[{phase}] Fehler: {message}`,"chat.unknownError":`unbekannt`,"chat.you":`Du`,"chat.session":`Sitzung`,"chat.nActions":`{n} Aktion | {n} Aktionen`,"chat.lastUpdatedAt":`Zuletzt aktualisiert um {time}`,"chat.scrollToTurnTop":`Zum Nachrichtenanfang scrollen`,"migration.backing_up":`Datenbank wird gesichert…`,"migration.running":`Agent-Daten werden migriert — {processed}/{total}`,"migration.error":`Migration fehlgeschlagen`,"migration.backup_location":`Ein Backup wurde unter {path} gespeichert. Starte Kōbō neu, um erneut zu versuchen.`,"migration.retry":`Starte Kōbō neu, um erneut zu versuchen.`,"engine.select":`Engine`,"engine.model":`Modell`,"engine.effort":`Reasoning-Aufwand`,"wakeup.scheduledIn":`Nächste Weckung in {n}s`,"wakeup.scheduledAt":`Nächste Weckung um {time}`,"wakeup.firing":`Wecke auf...`,"wakeup.reason":`Grund: {reason}`,"wakeup.cancel":`Diese Weckung abbrechen`,"wakeup.pendingIndicator":`Weckung geplant`,"cron.pendingIndicator":`{n} Cron(s) geplant`,"schedule.tabLabel":`Zeitplan`,"schedule.panelTitle":`Automatisierung`,"schedule.panelDescription":`Diesen Workspace später wecken oder Anweisungen nach Zeitplan ausführen.`,"schedule.activeTitle":`Aktive Zeitpläne`,"schedule.emptyTitle":`Nichts geplant`,"schedule.emptyDescription":`Unten ein einmaliges Wakeup oder eine wiederkehrende Aufgabe erstellen.`,"schedule.cancelWakeup":`Dieses Wakeup abbrechen`,"schedule.cancelCron":`Diese wiederkehrende Aufgabe löschen`,"schedule.createTitle":`Zeitplan erstellen`,"schedule.createDescription":`Festlegen, wann und wie der Agent ausgeführt werden soll.`,"schedule.typeWakeup":`Einmaliges Wakeup`,"schedule.typeRecurring":`Wiederkehrende Aufgabe`,"schedule.wakeupDescription":`Den Prompt einmalig nach einer Verzögerung ausführen.`,"schedule.cronDescription":`Den Prompt regelmäßig nach einem festen Zeitplan ausführen.`,"schedule.promptHint":`Anweisungen, die an den Agenten gesendet werden`,"schedule.frequencyTitle":`Häufigkeit`,"schedule.advancedDescription":`Einen rohen Cron-Ausdruck verwenden`,"schedule.cronExpressionLabel":`Cron-Ausdruck`,"schedule.sessionModeTitle":`Ausführungssitzung`,"schedule.modeResume":`Sitzung fortsetzen`,"schedule.oneShotHint":`Diesen Zeitplan nach der ersten Ausführung entfernen.`,"schedule.wakeupTitle":`Wakeup ausstehend`,"schedule.cronsTitle":`Wiederkehrende Zeitpläne`,"schedule.noWakeup":`Kein Wakeup geplant`,"schedule.noCrons":`Kein Cron geplant`,"schedule.nextFireAt":`nächstes um {time}`,"schedule.lastFiredAt":`zuletzt vor {time}`,"schedule.addCronTitle":`Wiederkehrende Aufgabe hinzufügen`,"schedule.addWakeupTitle":`Wakeup planen`,"schedule.every":`Alle`,"schedule.unitMinutes":`Minuten`,"schedule.unitHours":`Stunden`,"schedule.unitDays":`Tage`,"schedule.daysDriftWarning":`Das Intervall kann sich am Monatsende auf 1 Tag verkürzen (Cron-Einschränkung).`,"schedule.advancedExpression":`Erweiterter Ausdruck (optional)`,"schedule.advancedHint":`Roher Cron (z. B. */15 * * * *) oder {'@'}hourly/{'@'}daily — überschreibt die Auswahl, wenn gesetzt.`,"schedule.promptLabel":`Prompt`,"schedule.labelOptional":`Bezeichnung (optional)`,"schedule.delayMinutes":`Verzögerung (Minuten)`,"schedule.modeFresh":`Neue Sitzung`,"schedule.oneShot":`Nur einmal ausführen`,"schedule.addCronBtn":`Cron hinzufügen`,"schedule.addWakeupBtn":`Wakeup planen`,"schedule.cronCreated":`Wiederkehrende Aufgabe hinzugefügt`,"schedule.wakeupCreated":`Wakeup geplant`,"askUserQuestion.title":`Der Agent stellt eine Frage`,"askUserQuestion.submit":`Antwort senden`,"askUserQuestion.multiSelectHint":`Eine oder mehrere Optionen auswählen`,"askUserQuestion.otherOption":`Sonstiges`,"askUserQuestion.otherOptionHint":`bitte in der nächsten Chat-Nachricht angeben`,"askUserQuestion.freeFormLabel":`Antwort präzisieren`,"askUserQuestion.freeFormHint":`Diese Antwort wird direkt an den Agenten gesendet.`,"askUserQuestion.noPending":`Keine offene Frage`,"askUserQuestion.next":`Weiter`,"askUserQuestion.previous":`Zurück`,"askUserQuestion.cancel":`Abbrechen`,"askUserQuestion.cancelTooltip":`Diese Frage überspringen — der Agent macht ohne Antwort weiter`,"askUserQuestion.collapse":`Fragebereich einklappen`,"askUserQuestion.expand":`Fragebereich ausklappen`,"permissionRequest.title":`Der Agent möchte ein Tool verwenden`,"permissionRequest.allow":`Erlauben`,"permissionRequest.allowOnce":`Einmal erlauben`,"permissionRequest.allowTurn":`Diesen Zug erlauben`,"permissionRequest.allowOperation":`Diese Aktion immer erlauben`,"permissionRequest.allowTool":`Dieses Tool immer erlauben`,"permissionRequest.deny":`Ablehnen`,"permissionRequest.tool":`Tool`,"permissionRequest.input":`Eingabe`,"permissionRequest.rawInput":`Technische Details`,"permissionRequest.collapse":`Berechtigungsfenster einklappen`,"permissionRequest.expand":`Berechtigungsfenster ausklappen`,"permissionRequest.denied":`vom Nutzer abgelehnt`,"workspaceStatus.created":`erstellt`,"workspaceStatus.extracting":`Extraktion`,"workspaceStatus.brainstorming":`Brainstorming`,"workspaceStatus.executing":`läuft`,"workspaceStatus.awaitingUser":`wartet auf deine Antwort`,"workspaceStatus.completed":`abgeschlossen`,"workspaceStatus.idle":`inaktiv`,"workspaceStatus.error":`Fehler`,"workspaceStatus.quota":`Kontingent erreicht`,"workspaceStatus.retrying":`automatische Wiederaufnahme`,"workspaceList.prOpen":`#{n} — Pull Request offen`,"workspaceList.prWatchDisabledIndicator":`PR-Prüfungen für diesen Workspace ignoriert`,"workspaceList.prChangesRequested":`#{n} — Änderungen angefordert`,"workspaceList.attentionCiFailed":`CI fehlgeschlagen`,"workspaceList.attentionChangesRequested":`Änderungen angefordert`,"workspaceList.attentionReadyToMerge":`Bereit zum Mergen`,"autoLoop.toggle":`Auto-Schleife`,"autoLoop.start":`Auto-Schleife starten`,"autoLoop.prepare":`Auto-Schleife vorbereiten`,"autoLoop.reprepare":`Auto-Schleife erneut vorbereiten`,"autoLoop.reprepareTooltip":`Grooming-Schritt erneut ausführen, um Aufgaben hinzuzufügen oder zu aktualisieren, bevor die Schleife neu gestartet wird`,"autoLoop.prepareBusy":`Warte, bis der Agent fertig ist, bevor du vorbereitest`,"autoLoop.forceReady":`Ich weiß, was ich tue — Grooming überspringen`,"autoLoop.forceReadyConfirm":`Grooming überspringen und Auto-Schleife als bereit markieren? Kann hängen bleiben, wenn Aufgaben nicht atomar sind.`,"autoLoop.stop":`Auto-Schleife stoppen`,"autoLoop.notReady":`Zuerst „Auto-Schleife vorbereiten" ausführen`,"autoLoop.noTasks":`Zuerst Aufgaben hinzufügen`,"autoLoop.progress":`Auto-Schleife · {done}/{total} Aufgaben`,"autoLoop.preparing":`Auto-Schleife · Vorbereitung`,"autoLoop.preparingTooltip":`Grooming läuft — der Agent erstellt / überprüft Aufgaben. Die Schleife startet, sobald mark_auto_loop_ready aufgerufen wird.`,"autoLoop.running":`Auto-Schleife läuft`,"autoLoop.startInMode":`Im Auto-Schleifen-Modus starten`,"autoLoop.brainstormModelPrefix":`Brainstorm:`,"autoLoop.brainstormModelTooltip":`Modell nur für die anfängliche Brainstorming-Sitzung — jede Aufgabe danach nutzt das oben gewählte Modell`,"autoLoop.brainstormReasoningPrefix":`Brainstorm:`,"autoLoop.brainstormReasoningTooltip":`Denkaufwand nur für die anfängliche Brainstorming-Sitzung`,"autoLoop.executionModelPrefix":`Loop:`,"autoLoop.executionModelTooltip":`Modell für jede Auto-Loop-Aufgabe nach der anfänglichen Brainstorming-Sitzung`,"autoLoop.sessionMode.perTask":`Neue Sitzung pro Aufgabe`,"autoLoop.sessionMode.label":`Sitzung:`,"autoLoop.sessionMode.perTaskTooltip":`Jede Aufgabe startet eine neue Claude-Code-Sitzung ohne Erinnerung an vorherige Aufgaben`,"autoLoop.sessionMode.continuous":`Durchgehende Sitzung`,"autoLoop.sessionMode.continuousTooltip":`Alle Aufgaben laufen in derselben Sitzung — der Agent behält den vollen Kontext, aber die Sitzung wird mit der Zeit länger`,"koboCommand.prepAutoloopDesc":`Aufgaben für Auto-Schleifen-Modus vorbereiten (auf Atomarität prüfen)`,"staleSessionBanner.title":`Auto-Schleife läuft`,"staleSessionBanner.message":`Du siehst eine ältere Sitzung — der Agent arbeitet gerade in der neuesten.`,"staleSessionBanner.staleTitle":`Ältere Sitzung`,"staleSessionBanner.staleMessage":`Du siehst eine ältere Sitzung — gesendete Nachrichten gehen an diese Sitzung, nicht an die neueste.`,"staleSessionBanner.switchToCurrent":`Zur aktuellen wechseln`,"network.login.title":`Netzwerkzugriff`,"network.login.description":`Dieses Kōbō benötigt ein Token, um über das Netzwerk gesteuert zu werden. Füge das in den Einstellungen auf dem Host angezeigte Token ein.`,"network.login.tokenLabel":`Token`,"network.login.tokenPlaceholder":`Token einfügen`,"network.login.connect":`Verbinden`,"network.login.invalid":`Ungültiges Token`,"network.login.serverError":`Serverfehler — bitte erneut versuchen.`,"network.login.unreachable":`Kōbō ist nicht erreichbar — prüfe deine Verbindung.`,"layout.toggleWorkspaces":`Workspaces-Leiste ein-/ausblenden`,"layout.togglePanel":`Seitenleiste ein-/ausblenden`,"unsaved.title":`Ohne Speichern verlassen?`,"unsaved.message":`Du hast ungespeicherte Änderungen. Diese Seite zu verlassen verwirft sie.`,"unsaved.leave":`Verlassen`,"unsaved.stay":`Bleiben`,"prCheckout.staleRetriesExhausted":`Der Repository-Status hat sich während der Anwendung deiner Auswahl immer wieder geändert. Schließe diesen Dialog und versuche es erneut über die Pull-Request-Auswahl.`,"prPicker.title":`Aus einer Pull Request importieren`,"prPicker.filterAll":`Alle`,"prPicker.filterMine":`Meine`,"prPicker.filterReviewRequested":`Review angefragt`,"prPicker.searchPlaceholder":`Pull Requests durchsuchen…`,"prPicker.loadMore":`Mehr laden`,"prPicker.empty":`Keine offene Pull Request passt.`,"prPicker.forkNotSupported":`Diese PR stammt von einem Fork; Kōbō kann sie nicht auschecken.`,"prPicker.loadFailed":`Pull Requests konnten nicht geladen werden.`,"prPicker.badge.workspaceExists":`Bereits in Kōbō geöffnet`,"prPicker.badge.worktreePresent":`Worktree vorhanden`,"prPicker.badge.localBranch":`Lokaler Branch`,"prPicker.badge.new":`Neu`,"prPicker.badge.draft":`Entwurf`,"prCheckout.title":`Worktree vorbereiten`,"prCheckout.apply":`Anwenden`,"prCheckout.cancel":`Abbrechen`,"prCheckout.retry":`Erneut versuchen`,"prCheckout.diagnoseFailed":`Die Diagnose des Pull Requests ist fehlgeschlagen.`,"prCheckout.resolveFailed":`Die Auflösung des Pull-Request-Checkouts ist fehlgeschlagen.`,"prCheckout.path.required":`Gib einen Worktree-Pfad ein, der noch nicht existiert.`,"prCheckout.workspace.restoreNotAvailable":"Das Wiederherstellen eines bereinigten Workspaces ist von hier aus noch nicht möglich. Lege den Worktree-Ordner auf der Festplatte neu an (z. B. mit `git worktree add`) — Kōbō verknüpft ihn innerhalb von etwa 30 Sekunden automatisch wieder.","prCheckout.staleReloaded":`Das Repository hat sich geändert; die Diagnose wurde aktualisiert.`,"prCheckout.step.blocked":`Fortfahren nicht möglich`,"prCheckout.step.path":`Worktree-Speicherort`,"prCheckout.step.workspace":`Bestehender Workspace`,"prCheckout.step.worktree":`Bestehende Worktree`,"prCheckout.step.operation":`Git-Vorgang läuft`,"prCheckout.step.changes":`Nicht committete Änderungen`,"prCheckout.step.divergence":`Lokaler Branch vs. origin`,"prCheckout.workspace.activeHint":`Ein Workspace namens „{name}" verfolgt diesen Branch bereits.`,"prCheckout.workspace.open":`Diesen Workspace öffnen`,"prCheckout.workspace.continue":`Mit einem anderen Pfad fortfahren`,"prCheckout.workspace.unarchive":`Entarchivieren und öffnen`,"prCheckout.workspace.restore":`Worktree wiederherstellen`,"prCheckout.worktree.orphanHint":`Auf diesem Branch existiert bereits eine Worktree unter {path}.`,"prCheckout.worktree.attach":`Anhängen`,"prCheckout.worktree.branchInUse":`Dieser Branch ist bereits ausgecheckt. Verwenden Sie seinen vorhandenen Worktree.`,"prCheckout.worktree.createElsewhere":`Eine neue an anderer Stelle erstellen`,"prCheckout.operation.hint":`In dieser Worktree läuft gerade ein {operation}.`,"prCheckout.operation.abort":`Abbrechen`,"prCheckout.operation.cancel":`Unangetastet lassen und hier stoppen`,"prCheckout.changes.hint":`{modified} geändert, {staged} vorgemerkt, {untracked} unverfolgt.`,"prCheckout.changes.stash":`Stashen`,"prCheckout.changes.commit":`Committen`,"prCheckout.changes.discard":`Verwerfen (als benannter Stash aufbewahrt)`,"prCheckout.changes.keepResetConflict":`Lokale Änderungen können bei einem Hard Reset nicht behalten werden. Zuerst Stash oder Commit wählen oder den Branch behalten.`,"prCheckout.changes.keep":`So belassen, wie sie sind`,"prCheckout.divergence.behindHint":`Dein Branch liegt {behind} Commit(s) hinter origin zurück.`,"prCheckout.divergence.aheadHint":`Dein Branch hat {ahead} nicht gepushte(n) Commit(s).`,"prCheckout.divergence.divergedHint":`{ahead} voraus, {behind} zurück gegenüber origin.`,"prCheckout.divergence.fastForward":`Fast-Forward auf origin`,"prCheckout.divergence.rebase":`Auf origin rebasen`,"prCheckout.divergence.resetHard":`Auf origin zurücksetzen (zuvor wird ein Backup-Branch erstellt)`,"prCheckout.divergence.keep":`Lokalen Stand beibehalten`,"prCheckout.blocked.forgeUnavailable":`Das Forge-CLI fehlt oder ist nicht authentifiziert.`,"prCheckout.blocked.forkPr":`Diese PR stammt von einem Fork; Kōbō kann sie nicht auschecken.`,"prCheckout.blocked.headBranchDeleted":`Der Branch existiert auf dem Remote nicht mehr.`,"prCheckout.blocked.indexLock":`Ein anderer Git-Prozess läuft gerade (index.lock ist vorhanden).`,"prCheckout.blocked.pathOccupied":`{path} existiert bereits und ist keine Worktree.`,"prCheckout.blocked.worktreeOtherBranch":`{path} ist eine Worktree auf einem anderen Branch ({branch}).`,"prCheckout.blocked.noCommonAncestor":`Es existiert bereits ein lokaler Branch namens {branch} mit unabhängiger Historie.`,"split.title":`Doppelte Workspace-Ansicht`,"split.open":`Nebeneinander öffnen`,"split.openBeside":`Daneben öffnen`,"split.close":`Doppelansicht schließen`,"split.left":`Linker Workspace`,"split.right":`Rechter Workspace`,"split.choose":`Workspace auswählen`,"split.recipient":`Senden an: {name}`,"absence.title":`Seit deinem letzten Besuch`,"absence.pending":`Änderungen prüfen`,"absence.retention":`Wichtige Aktivitäten der letzten 30 Tage, erfasst seit Installation dieser Funktion. Besuche werden nur in diesem Browser verfolgt.`,"absence.since":`Seit {date}`,"absence.error":`Aktivität konnte nicht geladen werden.`,"absence.retry":`Erneut versuchen`,"absence.empty":`Keine neue Aktivität.`,"absence.more":`Mehr laden`,"absence.markRead":`Angezeigte Ereignisse als gelesen markieren`,"absence.kind.question":`Frage gestellt`,"absence.kind.permission":`Genehmigung angefragt`,"absence.kind.completed":`Sitzung beendet`,"absence.kind.error":`Agent-Fehler`,"absence.kind.pr-merged":`PR gemergt`,"absence.kind.pr-approved":`PR genehmigt`,"absence.kind.pr-changes-requested":`Änderungen angefordert`,"absence.kind.pr-ci-failed":`CI fehlgeschlagen`,"absence.kind.pr-ci-recovered":`CI wieder erfolgreich`,"absence.kind.pr-merge-conflict":`Merge-Konflikt`,"absence.kind.pr-ready-to-merge":`PR bereit zum Merge`,"absence.kind.archived":`Workspace archiviert`,"absence.kind.purged":`Worktree bereinigt`,"absence.kind.restored":`Worktree wiederhergestellt`,"tours.split.controls.title":`Zwei unabhängige Workspaces`,"tours.split.controls.description":`Wähle einen Workspace pro Bereich. Verschiebe die Trennlinie; jede Unterhaltung behält ihren Empfänger und ihre Panels.`,"tours.home.sort.title":`Workspaces sortieren`,"tours.home.sort.description":`Wähle Reihenfolge und Richtung innerhalb jeder Gruppe. Deine Auswahl wird gespeichert.`,"tours.home.activity.title":`Aktivität nach Abwesenheit prüfen`,"tours.home.activity.description":`Unten in der linken Seitenleiste findest du Fragen, Sitzungsenden, Fehler und PR-Änderungen seit deinem letzten Besuch.`};export{e as default};
|
|
17
|
+
sudo setfacl -Rd -m u:$(whoami):rwX . && sudo setfacl -R -m u:$(whoami):rwX .`,"settings.purgeDocsPermissionsRecoverChownIntro":`Option B — Ownership übernehmen (einfacher, verliert die Spur "von root im Container erstellt", spielt in der Praxis selten eine Rolle):`,"settings.purgeDocsPermissionsRecoverChownCommand":` sudo chown -R $(whoami):$(whoami) .`,"settings.purgeDocsPermissionsRecoverFootnote":"Tipp: Du kannst diese Befehle direkt auf das Worktrees-Root anwenden (z. B. `~/.worktrees/`), um alle bestehenden UND zukünftigen Workspaces auf einmal abzudecken. Danach funktioniert die Kōbō-Bereinigung ohne Berechtigungsfehler.","contextMenu.runSetup":`Setup-Skript ausführen`,"contextMenu.exportEvents":`Events exportieren (CSV)`,"contextMenu.dismissChangesRequested":`Änderungen angefragt als gesehen markieren`,"contextMenu.dismissCiFailure":`CI-Fehler als gesehen markieren`,"contextMenu.restoreChangesRequested":`Änderungen angefragt als ungesehen markieren`,"contextMenu.restoreCiFailure":`CI-Fehler als ungesehen markieren`,"contextMenu.exportingEvents":`Export wird vorbereitet…`,"contextMenu.exportEventsError":`Event-Export fehlgeschlagen`,"contextMenu.openNotion":`In Notion öffnen`,"contextMenu.openSentry":`In Sentry öffnen`,"contextMenu.openPr":`PR öffnen`,"contextMenu.ignorePrWatch":`PR-Prüfungen ignorieren`,"contextMenu.resumePrWatch":`PR-Prüfungen fortsetzen`,"contextMenu.prWatchToggleFailed":`Aktualisierung der PR-Prüfungen fehlgeschlagen`,"workspace.favorite":`Als Favorit markieren`,"workspace.unfavorite":`Aus Favoriten entfernen`,"workspace.showFavoritesOnly":`Nur Favoriten anzeigen`,"workspace.searchArchivedToggle":`Auch in archivierten Workspaces suchen`,"workspace.descriptionPlaceholder":`Kurze Beschreibung hinzufügen`,"workspace.descriptionDialogHint":`Klartext, max. 200 Zeichen. Leer lassen, um zu löschen.`,"workspace.descriptionTooLong":`Die Beschreibung darf höchstens 200 Zeichen lang sein.`,"workspace.descriptionSaveFailed":`Beschreibung konnte nicht gespeichert werden.`,"workspace.agentDescriptionTooltip":`Live-Status, gepflegt vom Agent`,"mcp.tool.setWorkspaceDescription":`Setzt die Kurzbeschreibung des Workspace (≤ 200 Zeichen).`,"tags.manage":`Tags verwalten`,"tags.manageTitle":`Workspace-Tags verwalten`,"tags.noTagsDefined":`Keine Tags definiert. Füge welche in Einstellungen > Global > Tags hinzu.`,"tags.orphanedHint":`{count} Tag(s) sind nicht mehr im globalen Katalog. Abwählen zum Entfernen.`,"settings.tagsTitle":`Workspace-Tags`,"settings.tagsHint":`Definiere die Tags, die Workspaces zugewiesen werden können. Tippe zum Hinzufügen, klicke auf das Kreuz zum Entfernen.`,"settings.tagsLabel":`Verfügbare Tags`,"settings.branchPrefixesTitle":`Branch-Präfixe`,"settings.branchPrefixesHint":`Verwalten Sie die Git-Branch-Präfixe, die auf der Workspace-Erstellungsseite verfügbar sind. Das erste ist standardmäßig vorausgewählt.`,"settings.branchPrefixesEmpty":`Kein Branch-Präfix definiert. Fügen Sie unten mindestens eines hinzu.`,"settings.branchPrefixesAddLabel":`Neues Präfix`,"settings.branchPrefixesEditHint":`Zum Umbenennen klicken`,"settings.branchPrefixesMoveUp":`Nach oben`,"settings.branchPrefixesMoveDown":`Nach unten`,"settings.worktreesTitle":`Git-Worktrees`,"settings.worktreesHint":`Wähle aus, wo neue Workspace-Worktrees erstellt werden. Relative Pfade sind projektrelativ; absolute Linux/macOS- und Windows-Pfade, $HOME, ~ und %USERPROFILE% werden unterstützt.`,"settings.worktreesPathLabel":`Worktrees-Pfad`,"settings.worktreesPathRequired":`Worktrees-Pfad ist erforderlich.`,"settings.worktreesPrefixByProject":`Worktrees nach Projektname präfixen`,"settings.worktreesPrefixByProjectHint":`Legt jeden Worktree in einem nach dem Projekt benannten Unterordner ab, um Kollisionen zu vermeiden, wenn mehrere Projekte die gleiche Worktree-Wurzel teilen.`,"settings.shareTitle":`Konfiguration teilen`,"settings.shareHint":`Exportiere Einstellungen, Templates und Tags als JSON-Bundle. MCP-Keys werden aus Sicherheitsgründen nicht exportiert.`,"settings.exportConfig":`Exportieren`,"settings.importConfig":`Importieren`,"settings.exportSuccess":`Konfiguration exportiert`,"settings.importSuccess":`Konfiguration importiert`,"settings.importConfirmTitle":`Konfiguration importieren`,"settings.importConfirmMessage":`Dies ersetzt deine aktuellen Einstellungen, Templates und Tags. MCP-Keys bleiben erhalten. Fortfahren?`,"settings.network.title":`Netzwerkzugriff`,"settings.network.hint":`Steuere Kōbō von einem anderen Gerät in deinem vertrauenswürdigen LAN. Aus = nur localhost. An = im Netzwerk erreichbar, per Token geschützt. Starte Kōbō nach dem Umschalten neu.`,"settings.network.enable":`Netzwerkzugriff aktivieren`,"settings.network.behindProxy":`Hinter einem Reverse Proxy`,"settings.network.behindProxyHint":`Kōbō kann deinen eigenen Rechner nicht mehr von einer weitergeleiteten Anfrage unterscheiden — selbst localhost benötigt ab jetzt das Token. Aktiviere dies nur, wenn ein Reverse Proxy (Traefik, nginx, Caddy…) vor Kōbō steht.`,"settings.network.restartRequired":`Starte Kōbō neu, um die neue Bind-Adresse anzuwenden.`,"settings.network.token":`Zugriffstoken`,"settings.network.copy":`Kopieren`,"settings.network.copied":`Kopiert`,"settings.network.regenerate":`Neu generieren`,"settings.network.regenerateConfirm":`Token neu generieren? Verbundene Geräte benötigen das neue Token.`,"settings.network.urls":`LAN-URLs`,"settings.network.scan":`Zum Verbinden scannen`,"settings.network.noUrls":`Keine LAN-Adresse erkannt.`,"settings.network.loadFailed":`Netzwerkzugriff-Einstellungen konnten nicht geladen werden.`,"settings.network.updateFailed":`Netzwerkzugriff-Einstellungen konnten nicht aktualisiert werden.`,"settings.unsavedChanges.title":`Nicht gespeicherte Änderungen`,"settings.unsavedChanges.message":`Dieses Projekt hat nicht gespeicherte Änderungen. Ein Projektwechsel verwirft sie.`,"settings.unsavedChanges.discard":`Verwerfen und wechseln`,"settings.unsavedChanges.cancel":`Abbrechen`,"settings.loadFailed":`Einstellungen konnten nicht geladen werden`,"settings.loadFailedHint":`Speichern ist deaktiviert: das Formular zeigt Standardwerte, und sie zu schreiben würde deine echte Konfiguration überschreiben.`,"health.title":`Status`,"health.tooltip":`Systemstatus`,"changelog.title":`Änderungsprotokoll`,"changelog.tooltip":`Was ist neu in Kōbō`,"changelog.empty":`Kein Änderungsprotokoll verfügbar.`,"changelog.current":`aktuell`,"changelog.currentVersion":`Aktuelle Version: v{version}`,"health.envTitle":`Umgebung`,"health.version":`Version`,"health.koboHome":`Kōbō home`,"health.dbTitle":`Datenbank`,"health.dbPath":`Pfad`,"health.dbSize":`Größe`,"health.schemaVersion":`Schema-Version`,"health.settingsSchemaVersion":`Einstellungs-Schema`,"health.runtimesTitle":`Agent-Laufzeiten`,"health.claudeCliTitle":`Claude Code`,"health.claudeCliMissing":`claude nicht im PATH`,"health.codexCliTitle":`OpenAI Codex`,"health.codexCliMissing":`codex-Binärdatei nicht auflösbar`,"health.forgeCliTitle":`Forge-CLI (gh / glab)`,"health.forgeCliMissing":`Weder gh noch glab gefunden — Pull Requests und CI-Überwachung nicht verfügbar`,"health.workspacesTitle":`Workspaces`,"health.workspacesCount":`{total} gesamt, {archived} archiviert`,"health.worktreesMissing":`{count} Worktree(s) auf der Festplatte fehlen`,"health.sessionsTitle":`Agent-Sitzungen`,"health.sessionsOrphaned":`{n} verwaiste laufende Sitzung(en)`,"health.integrationsTitle":`Integrationen`,"health.integrationConfigured":`konfiguriert`,"health.integrationMissing":`nicht konfiguriert`,"health.integrationDisabled":`deaktiviert`,"settings.integrationEnabled":`Integration aktivieren`,"health.activeTitle":`Aktiver Zustand`,"health.activeQuotaBackoffs":`Ausstehende Quota-Backoffs`,"health.activeWakeups":`Geplante Aufweckungen`,"health.activeAutoLoop":`Auto-Loop läuft`,"health.activeAgentSessions":`Aktive Agent-Sessions`,"health.activeDevServers":`Laufende Dev-Server`,"health.noneActive":`Keine.`,"health.quotaResumeAt":`fortgesetzt um {time}`,"health.wakeupAt":`aufgeweckt um {time}`,"health.startedAgo":`gestartet vor {time}`,"health.autoLoopReady":`bereit, iteriert`,"health.autoLoopGrooming":`Grooming läuft`,"session.started":`Sitzung gestartet`,"session.ended":`Sitzung beendet`,"session.compacted":`Kontext komprimiert`,"session.endedCompleted":`Zug beendet — senden Sie eine Nachricht, um fortzufahren`,"session.endedKilled":`Sitzung gestoppt`,"session.endedError":`Sitzung mit einem Fehler beendet`,"session.endedWatchdog":`Sitzung nach einer Phase der Inaktivität zwangsweise geschlossen`,"tool.running":`Läuft...`,"activity.raw_lines":`Rohausgabezeilen ({n})`,"activity.loading_older":`Ältere Nachrichten werden geladen…`,"activity.compacting":`Kontext wird komprimiert…`,"activity.prev_user_message":`Vorherige Nachricht des Benutzers`,"activity.scroll_to_bottom":`Nach unten scrollen`,"activity.empty":`Noch nichts`,"activity.emptyHint":`Die Agentenausgabe erscheint hier, sobald eine Sitzung startet.`,"activity.a11y.region":`Ansagen zur Agentenaktivität`,"activity.a11y.agentSaid":`Agent: {text}`,"activity.a11y.toolStarted":`Werkzeug {name} gestartet`,"activity.a11y.toolFinished":`Werkzeug {name} beendet`,"activity.a11y.toolFailed":`Werkzeug {name} fehlgeschlagen`,"chat.systemPrompt":`System-Prompt`,"chat.agent":`Agent`,"chat.cleanupScript":`Cleanup-Skript`,"chat.archiveScript":`Archiv-Skript`,"chat.setupScript":`Setup-Skript`,"chat.hookScript":`Hook {event}`,"chat.scriptDone":`Fertig`,"chat.scriptComplete":`[{phase}] Abgeschlossen`,"chat.scriptError":`[{phase}] Fehler: {message}`,"chat.unknownError":`unbekannt`,"chat.you":`Du`,"chat.session":`Sitzung`,"chat.nActions":`{n} Aktion | {n} Aktionen`,"chat.lastUpdatedAt":`Zuletzt aktualisiert um {time}`,"chat.scrollToTurnTop":`Zum Nachrichtenanfang scrollen`,"migration.backing_up":`Datenbank wird gesichert…`,"migration.running":`Agent-Daten werden migriert — {processed}/{total}`,"migration.error":`Migration fehlgeschlagen`,"migration.backup_location":`Ein Backup wurde unter {path} gespeichert. Starte Kōbō neu, um erneut zu versuchen.`,"migration.retry":`Starte Kōbō neu, um erneut zu versuchen.`,"engine.select":`Engine`,"engine.model":`Modell`,"engine.effort":`Reasoning-Aufwand`,"wakeup.scheduledIn":`Nächste Weckung in {n}s`,"wakeup.scheduledAt":`Nächste Weckung um {time}`,"wakeup.firing":`Wecke auf...`,"wakeup.reason":`Grund: {reason}`,"wakeup.cancel":`Diese Weckung abbrechen`,"wakeup.pendingIndicator":`Weckung geplant`,"cron.pendingIndicator":`{n} Cron(s) geplant`,"schedule.tabLabel":`Zeitplan`,"schedule.panelTitle":`Automatisierung`,"schedule.panelDescription":`Diesen Workspace später wecken oder Anweisungen nach Zeitplan ausführen.`,"schedule.activeTitle":`Aktive Zeitpläne`,"schedule.emptyTitle":`Nichts geplant`,"schedule.emptyDescription":`Unten ein einmaliges Wakeup oder eine wiederkehrende Aufgabe erstellen.`,"schedule.cancelWakeup":`Dieses Wakeup abbrechen`,"schedule.cancelCron":`Diese wiederkehrende Aufgabe löschen`,"schedule.createTitle":`Zeitplan erstellen`,"schedule.createDescription":`Festlegen, wann und wie der Agent ausgeführt werden soll.`,"schedule.typeWakeup":`Einmaliges Wakeup`,"schedule.typeRecurring":`Wiederkehrende Aufgabe`,"schedule.wakeupDescription":`Den Prompt einmalig nach einer Verzögerung ausführen.`,"schedule.cronDescription":`Den Prompt regelmäßig nach einem festen Zeitplan ausführen.`,"schedule.promptHint":`Anweisungen, die an den Agenten gesendet werden`,"schedule.frequencyTitle":`Häufigkeit`,"schedule.advancedDescription":`Einen rohen Cron-Ausdruck verwenden`,"schedule.cronExpressionLabel":`Cron-Ausdruck`,"schedule.sessionModeTitle":`Ausführungssitzung`,"schedule.modeResume":`Sitzung fortsetzen`,"schedule.oneShotHint":`Diesen Zeitplan nach der ersten Ausführung entfernen.`,"schedule.wakeupTitle":`Wakeup ausstehend`,"schedule.cronsTitle":`Wiederkehrende Zeitpläne`,"schedule.noWakeup":`Kein Wakeup geplant`,"schedule.noCrons":`Kein Cron geplant`,"schedule.nextFireAt":`nächstes um {time}`,"schedule.lastFiredAt":`zuletzt vor {time}`,"schedule.addCronTitle":`Wiederkehrende Aufgabe hinzufügen`,"schedule.addWakeupTitle":`Wakeup planen`,"schedule.every":`Alle`,"schedule.unitMinutes":`Minuten`,"schedule.unitHours":`Stunden`,"schedule.unitDays":`Tage`,"schedule.daysDriftWarning":`Das Intervall kann sich am Monatsende auf 1 Tag verkürzen (Cron-Einschränkung).`,"schedule.advancedExpression":`Erweiterter Ausdruck (optional)`,"schedule.advancedHint":`Roher Cron (z. B. */15 * * * *) oder {'@'}hourly/{'@'}daily — überschreibt die Auswahl, wenn gesetzt.`,"schedule.promptLabel":`Prompt`,"schedule.labelOptional":`Bezeichnung (optional)`,"schedule.delayMinutes":`Verzögerung (Minuten)`,"schedule.modeFresh":`Neue Sitzung`,"schedule.oneShot":`Nur einmal ausführen`,"schedule.addCronBtn":`Cron hinzufügen`,"schedule.addWakeupBtn":`Wakeup planen`,"schedule.cronCreated":`Wiederkehrende Aufgabe hinzugefügt`,"schedule.wakeupCreated":`Wakeup geplant`,"askUserQuestion.title":`Der Agent stellt eine Frage`,"askUserQuestion.submit":`Antwort senden`,"askUserQuestion.multiSelectHint":`Eine oder mehrere Optionen auswählen`,"askUserQuestion.otherOption":`Sonstiges`,"askUserQuestion.otherOptionHint":`bitte in der nächsten Chat-Nachricht angeben`,"askUserQuestion.freeFormLabel":`Antwort präzisieren`,"askUserQuestion.freeFormHint":`Diese Antwort wird direkt an den Agenten gesendet.`,"askUserQuestion.noPending":`Keine offene Frage`,"askUserQuestion.next":`Weiter`,"askUserQuestion.previous":`Zurück`,"askUserQuestion.cancel":`Abbrechen`,"askUserQuestion.cancelTooltip":`Diese Frage überspringen — der Agent macht ohne Antwort weiter`,"askUserQuestion.collapse":`Fragebereich einklappen`,"askUserQuestion.expand":`Fragebereich ausklappen`,"permissionRequest.title":`Der Agent möchte ein Tool verwenden`,"permissionRequest.allow":`Erlauben`,"permissionRequest.allowOnce":`Einmal erlauben`,"permissionRequest.allowTurn":`Diesen Zug erlauben`,"permissionRequest.allowOperation":`Diese Aktion immer erlauben`,"permissionRequest.allowTool":`Dieses Tool immer erlauben`,"permissionRequest.deny":`Ablehnen`,"permissionRequest.tool":`Tool`,"permissionRequest.input":`Eingabe`,"permissionRequest.rawInput":`Technische Details`,"permissionRequest.collapse":`Berechtigungsfenster einklappen`,"permissionRequest.expand":`Berechtigungsfenster ausklappen`,"permissionRequest.denied":`vom Nutzer abgelehnt`,"workspaceStatus.created":`erstellt`,"workspaceStatus.extracting":`Extraktion`,"workspaceStatus.brainstorming":`Brainstorming`,"workspaceStatus.compacting":`Kontextkomprimierung`,"chatInput.compactingBanner":`Der Kontext wird komprimiert. Danach können Nachrichten wieder gesendet werden.`,"workspaceStatus.executing":`läuft`,"workspaceStatus.awaitingUser":`wartet auf deine Antwort`,"workspaceStatus.completed":`abgeschlossen`,"workspaceStatus.idle":`inaktiv`,"workspaceStatus.error":`Fehler`,"workspaceStatus.quota":`Kontingent erreicht`,"workspaceStatus.retrying":`automatische Wiederaufnahme`,"workspaceList.prOpen":`#{n} — Pull Request offen`,"workspaceList.prWatchDisabledIndicator":`PR-Prüfungen für diesen Workspace ignoriert`,"workspaceList.prChangesRequested":`#{n} — Änderungen angefordert`,"workspaceList.attentionCiFailed":`CI fehlgeschlagen`,"workspaceList.attentionChangesRequested":`Änderungen angefordert`,"workspaceList.attentionReadyToMerge":`Bereit zum Mergen`,"autoLoop.toggle":`Auto-Schleife`,"autoLoop.start":`Auto-Schleife starten`,"autoLoop.prepare":`Auto-Schleife vorbereiten`,"autoLoop.reprepare":`Auto-Schleife erneut vorbereiten`,"autoLoop.reprepareTooltip":`Grooming-Schritt erneut ausführen, um Aufgaben hinzuzufügen oder zu aktualisieren, bevor die Schleife neu gestartet wird`,"autoLoop.prepareBusy":`Warte, bis der Agent fertig ist, bevor du vorbereitest`,"autoLoop.forceReady":`Ich weiß, was ich tue — Grooming überspringen`,"autoLoop.forceReadyConfirm":`Grooming überspringen und Auto-Schleife als bereit markieren? Kann hängen bleiben, wenn Aufgaben nicht atomar sind.`,"autoLoop.stop":`Auto-Schleife stoppen`,"autoLoop.notReady":`Zuerst „Auto-Schleife vorbereiten" ausführen`,"autoLoop.noTasks":`Zuerst Aufgaben hinzufügen`,"autoLoop.progress":`Auto-Schleife · {done}/{total} Aufgaben`,"autoLoop.preparing":`Auto-Schleife · Vorbereitung`,"autoLoop.preparingTooltip":`Grooming läuft — der Agent erstellt / überprüft Aufgaben. Die Schleife startet, sobald mark_auto_loop_ready aufgerufen wird.`,"autoLoop.running":`Auto-Schleife läuft`,"autoLoop.startInMode":`Im Auto-Schleifen-Modus starten`,"autoLoop.brainstormModelPrefix":`Brainstorm:`,"autoLoop.brainstormModelTooltip":`Modell nur für die anfängliche Brainstorming-Sitzung — jede Aufgabe danach nutzt das oben gewählte Modell`,"autoLoop.brainstormReasoningPrefix":`Brainstorm:`,"autoLoop.brainstormReasoningTooltip":`Denkaufwand nur für die anfängliche Brainstorming-Sitzung`,"autoLoop.executionModelPrefix":`Loop:`,"autoLoop.executionModelTooltip":`Modell für jede Auto-Loop-Aufgabe nach der anfänglichen Brainstorming-Sitzung`,"autoLoop.sessionMode.perTask":`Neue Sitzung pro Aufgabe`,"autoLoop.sessionMode.label":`Sitzung:`,"autoLoop.sessionMode.perTaskTooltip":`Jede Aufgabe startet eine neue Claude-Code-Sitzung ohne Erinnerung an vorherige Aufgaben`,"autoLoop.sessionMode.continuous":`Durchgehende Sitzung`,"autoLoop.sessionMode.continuousTooltip":`Alle Aufgaben laufen in derselben Sitzung — der Agent behält den vollen Kontext, aber die Sitzung wird mit der Zeit länger`,"koboCommand.prepAutoloopDesc":`Aufgaben für Auto-Schleifen-Modus vorbereiten (auf Atomarität prüfen)`,"staleSessionBanner.title":`Auto-Schleife läuft`,"staleSessionBanner.message":`Du siehst eine ältere Sitzung — der Agent arbeitet gerade in der neuesten.`,"staleSessionBanner.staleTitle":`Ältere Sitzung`,"staleSessionBanner.staleMessage":`Du siehst eine ältere Sitzung — gesendete Nachrichten gehen an diese Sitzung, nicht an die neueste.`,"staleSessionBanner.switchToCurrent":`Zur aktuellen wechseln`,"network.login.title":`Netzwerkzugriff`,"network.login.description":`Dieses Kōbō benötigt ein Token, um über das Netzwerk gesteuert zu werden. Füge das in den Einstellungen auf dem Host angezeigte Token ein.`,"network.login.tokenLabel":`Token`,"network.login.tokenPlaceholder":`Token einfügen`,"network.login.connect":`Verbinden`,"network.login.invalid":`Ungültiges Token`,"network.login.serverError":`Serverfehler — bitte erneut versuchen.`,"network.login.unreachable":`Kōbō ist nicht erreichbar — prüfe deine Verbindung.`,"layout.toggleWorkspaces":`Workspaces-Leiste ein-/ausblenden`,"layout.togglePanel":`Seitenleiste ein-/ausblenden`,"unsaved.title":`Ohne Speichern verlassen?`,"unsaved.message":`Du hast ungespeicherte Änderungen. Diese Seite zu verlassen verwirft sie.`,"unsaved.leave":`Verlassen`,"unsaved.stay":`Bleiben`,"prCheckout.staleRetriesExhausted":`Der Repository-Status hat sich während der Anwendung deiner Auswahl immer wieder geändert. Schließe diesen Dialog und versuche es erneut über die Pull-Request-Auswahl.`,"prPicker.title":`Aus einer Pull Request importieren`,"prPicker.filterAll":`Alle`,"prPicker.filterMine":`Meine`,"prPicker.filterReviewRequested":`Review angefragt`,"prPicker.searchPlaceholder":`Pull Requests durchsuchen…`,"prPicker.loadMore":`Mehr laden`,"prPicker.empty":`Keine offene Pull Request passt.`,"prPicker.forkNotSupported":`Diese PR stammt von einem Fork; Kōbō kann sie nicht auschecken.`,"prPicker.loadFailed":`Pull Requests konnten nicht geladen werden.`,"prPicker.badge.workspaceExists":`Bereits in Kōbō geöffnet`,"prPicker.badge.worktreePresent":`Worktree vorhanden`,"prPicker.badge.localBranch":`Lokaler Branch`,"prPicker.badge.new":`Neu`,"prPicker.badge.draft":`Entwurf`,"prCheckout.title":`Worktree vorbereiten`,"prCheckout.apply":`Anwenden`,"prCheckout.cancel":`Abbrechen`,"prCheckout.retry":`Erneut versuchen`,"prCheckout.diagnoseFailed":`Die Diagnose des Pull Requests ist fehlgeschlagen.`,"prCheckout.resolveFailed":`Die Auflösung des Pull-Request-Checkouts ist fehlgeschlagen.`,"prCheckout.path.required":`Gib einen Worktree-Pfad ein, der noch nicht existiert.`,"prCheckout.workspace.restoreNotAvailable":"Das Wiederherstellen eines bereinigten Workspaces ist von hier aus noch nicht möglich. Lege den Worktree-Ordner auf der Festplatte neu an (z. B. mit `git worktree add`) — Kōbō verknüpft ihn innerhalb von etwa 30 Sekunden automatisch wieder.","prCheckout.staleReloaded":`Das Repository hat sich geändert; die Diagnose wurde aktualisiert.`,"prCheckout.step.blocked":`Fortfahren nicht möglich`,"prCheckout.step.path":`Worktree-Speicherort`,"prCheckout.step.workspace":`Bestehender Workspace`,"prCheckout.step.worktree":`Bestehende Worktree`,"prCheckout.step.operation":`Git-Vorgang läuft`,"prCheckout.step.changes":`Nicht committete Änderungen`,"prCheckout.step.divergence":`Lokaler Branch vs. origin`,"prCheckout.workspace.activeHint":`Ein Workspace namens „{name}" verfolgt diesen Branch bereits.`,"prCheckout.workspace.open":`Diesen Workspace öffnen`,"prCheckout.workspace.continue":`Mit einem anderen Pfad fortfahren`,"prCheckout.workspace.unarchive":`Entarchivieren und öffnen`,"prCheckout.workspace.restore":`Worktree wiederherstellen`,"prCheckout.worktree.orphanHint":`Auf diesem Branch existiert bereits eine Worktree unter {path}.`,"prCheckout.worktree.attach":`Anhängen`,"prCheckout.worktree.branchInUse":`Dieser Branch ist bereits ausgecheckt. Verwenden Sie seinen vorhandenen Worktree.`,"prCheckout.worktree.createElsewhere":`Eine neue an anderer Stelle erstellen`,"prCheckout.operation.hint":`In dieser Worktree läuft gerade ein {operation}.`,"prCheckout.operation.abort":`Abbrechen`,"prCheckout.operation.cancel":`Unangetastet lassen und hier stoppen`,"prCheckout.changes.hint":`{modified} geändert, {staged} vorgemerkt, {untracked} unverfolgt.`,"prCheckout.changes.stash":`Stashen`,"prCheckout.changes.commit":`Committen`,"prCheckout.changes.discard":`Verwerfen (als benannter Stash aufbewahrt)`,"prCheckout.changes.keepResetConflict":`Lokale Änderungen können bei einem Hard Reset nicht behalten werden. Zuerst Stash oder Commit wählen oder den Branch behalten.`,"prCheckout.changes.keep":`So belassen, wie sie sind`,"prCheckout.divergence.behindHint":`Dein Branch liegt {behind} Commit(s) hinter origin zurück.`,"prCheckout.divergence.aheadHint":`Dein Branch hat {ahead} nicht gepushte(n) Commit(s).`,"prCheckout.divergence.divergedHint":`{ahead} voraus, {behind} zurück gegenüber origin.`,"prCheckout.divergence.fastForward":`Fast-Forward auf origin`,"prCheckout.divergence.rebase":`Auf origin rebasen`,"prCheckout.divergence.resetHard":`Auf origin zurücksetzen (zuvor wird ein Backup-Branch erstellt)`,"prCheckout.divergence.keep":`Lokalen Stand beibehalten`,"prCheckout.blocked.forgeUnavailable":`Das Forge-CLI fehlt oder ist nicht authentifiziert.`,"prCheckout.blocked.forkPr":`Diese PR stammt von einem Fork; Kōbō kann sie nicht auschecken.`,"prCheckout.blocked.headBranchDeleted":`Der Branch existiert auf dem Remote nicht mehr.`,"prCheckout.blocked.indexLock":`Ein anderer Git-Prozess läuft gerade (index.lock ist vorhanden).`,"prCheckout.blocked.pathOccupied":`{path} existiert bereits und ist keine Worktree.`,"prCheckout.blocked.worktreeOtherBranch":`{path} ist eine Worktree auf einem anderen Branch ({branch}).`,"prCheckout.blocked.noCommonAncestor":`Es existiert bereits ein lokaler Branch namens {branch} mit unabhängiger Historie.`,"split.title":`Doppelte Workspace-Ansicht`,"split.open":`Nebeneinander öffnen`,"split.openBeside":`Daneben öffnen`,"split.close":`Doppelansicht schließen`,"split.left":`Linker Workspace`,"split.right":`Rechter Workspace`,"split.choose":`Workspace auswählen`,"split.recipient":`Senden an: {name}`,"absence.title":`Seit deinem letzten Besuch`,"absence.pending":`Änderungen prüfen`,"absence.retention":`Wichtige Aktivitäten der letzten 30 Tage, erfasst seit Installation dieser Funktion. Besuche werden nur in diesem Browser verfolgt.`,"absence.since":`Seit {date}`,"absence.error":`Aktivität konnte nicht geladen werden.`,"absence.retry":`Erneut versuchen`,"absence.empty":`Keine neue Aktivität.`,"absence.more":`Mehr laden`,"absence.markRead":`Angezeigte Ereignisse als gelesen markieren`,"absence.kind.question":`Frage gestellt`,"absence.kind.permission":`Genehmigung angefragt`,"absence.kind.completed":`Sitzung beendet`,"absence.kind.error":`Agent-Fehler`,"absence.kind.pr-merged":`PR gemergt`,"absence.kind.pr-approved":`PR genehmigt`,"absence.kind.pr-changes-requested":`Änderungen angefordert`,"absence.kind.pr-ci-failed":`CI fehlgeschlagen`,"absence.kind.pr-ci-recovered":`CI wieder erfolgreich`,"absence.kind.pr-merge-conflict":`Merge-Konflikt`,"absence.kind.pr-ready-to-merge":`PR bereit zum Merge`,"absence.kind.archived":`Workspace archiviert`,"absence.kind.purged":`Worktree bereinigt`,"absence.kind.restored":`Worktree wiederhergestellt`,"tours.split.controls.title":`Zwei unabhängige Workspaces`,"tours.split.controls.description":`Wähle einen Workspace pro Bereich. Verschiebe die Trennlinie; jede Unterhaltung behält ihren Empfänger und ihre Panels.`,"tours.home.sort.title":`Workspaces sortieren`,"tours.home.sort.description":`Wähle Reihenfolge und Richtung innerhalb jeder Gruppe. Deine Auswahl wird gespeichert.`,"tours.home.activity.title":`Aktivität nach Abwesenheit prüfen`,"tours.home.activity.description":`Unten in der linken Seitenleiste findest du Fragen, Sitzungsenden, Fehler und PR-Änderungen seit deinem letzten Besuch.`};export{e as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{v as e}from"./reactivity.esm-bundler-DEJj9cFv.js";import{J as t,O as n,P as r,b as i,j as a}from"./runtime-core.esm-bundler-CDnVUfeZ.js";import{J as o,Y as s,tt as c,y as l}from"./QBtn-CZaBclNw.js";import{n as u}from"./pinia-BKqmoVru.js";import{At as d,Mt as f,Nt as p,kt as m}from"./index-
|
|
1
|
+
import{v as e}from"./reactivity.esm-bundler-DEJj9cFv.js";import{J as t,O as n,P as r,b as i,j as a}from"./runtime-core.esm-bundler-CDnVUfeZ.js";import{J as o,Y as s,tt as c,y as l}from"./QBtn-CZaBclNw.js";import{n as u}from"./pinia-BKqmoVru.js";import{At as d,Mt as f,Nt as p,kt as m}from"./index-VL3fI9a3.js";var h=c({name:`QResizeObserver`,props:{debounce:{type:[String,Number],default:100}},emits:[`resize`],setup(e,{emit:t}){let o=null,c,l={width:-1,height:-1};function u(t){t===!0||e.debounce===0||e.debounce===`0`?d():o===null&&(o=setTimeout(d,e.debounce))}function d(){if(o!==null&&(clearTimeout(o),o=null),c){let{offsetWidth:e,offsetHeight:n}=c;(e!==l.width||n!==l.height)&&(l={width:e,height:n},t(`resize`,l))}}let{proxy:f}=i();f.trigger=u;let p,m=!1,h=e=>{m||(c=f.$el.parentNode,c?(p=new ResizeObserver(u),p.observe(c),d()):e||n(()=>{h(!0)}))};return r(()=>{h()}),a(()=>{m=!0,o!==null&&clearTimeout(o),p&&=(p.disconnect(),null)}),s}}),{passive:g}=o,_=[`both`,`horizontal`,`vertical`],v=c({name:`QScrollObserver`,props:{axis:{type:String,validator:e=>_.includes(e),default:`vertical`},debounce:[String,Number],scrollTarget:p},emits:[`scroll`],setup(e,{emit:n}){let o={position:{top:0,left:0},direction:`down`,directionChanged:!1,delta:{top:0,left:0},inflectionPoint:{top:0,left:0}},c=null,u,p;t(()=>e.scrollTarget,()=>{v(),_()});function h(){c?.();let t=Math.max(0,f(u)),r=m(u),i={top:t-o.position.top,left:r-o.position.left};if(e.axis===`vertical`&&i.top===0||e.axis===`horizontal`&&i.left===0)return;let a=Math.abs(i.top)>=Math.abs(i.left)?i.top<0?`up`:`down`:i.left<0?`left`:`right`;o.position={top:t,left:r},o.directionChanged=o.direction!==a,o.delta=i,o.directionChanged&&(o.direction=a,o.inflectionPoint=o.position),n(`scroll`,{...o})}function _(){u=d(p,e.scrollTarget),u.addEventListener(`scroll`,y,g),y(!0)}function v(){u!==void 0&&(u.removeEventListener(`scroll`,y,g),u=void 0)}function y(t){if(t===!0||e.debounce===0||e.debounce===`0`)h();else if(c===null){let[t,n]=e.debounce?[setTimeout(h,e.debounce),clearTimeout]:[requestAnimationFrame(h),cancelAnimationFrame];c=()=>{n(t),c=null}}}let{proxy:b}=i(),x=l();return t(()=>x.lang.rtl,h),r(()=>{p=b.$el.parentNode,_()}),a(()=>{c?.(),v()}),Object.assign(b,{trigger:y,getPosition:()=>o}),s}});function y(){let e=null;return{begin(){return e?.abort(),e=new AbortController,e.signal},isCurrent(t){return e!==null&&e.signal===t&&!t.aborted},abort(){e?.abort(),e=null}}}function b(e){return(e instanceof DOMException||typeof e==`object`&&!!e)&&e.name===`AbortError`}var x=u(`documents`,()=>{let t=e({}),n=e(!1),r=e(!1),i=e(null),a=e(0),o=y();function s(e){return t.value[e]??[]}async function c(e){n.value=!0;try{let n=await fetch(`/api/workspaces/${e}/documents`);if(!n.ok)throw Error(`HTTP ${n.status}`);let r=await n.json();t.value[e]=r.documents}catch(n){console.error(`[documents-store] fetchDocuments failed:`,n),t.value[e]=[]}finally{n.value=!1}}async function l(e,t){await u(e,t,o.begin())}async function u(e,t,n){r.value=!0;try{let r=await fetch(`/api/workspaces/${e}/document?path=${encodeURIComponent(t.path)}`,{signal:n});if(!r.ok)throw Error(`HTTP ${r.status}`);let a=await r.json();return o.isCurrent(n)?(i.value={path:a.path,name:t.name,content:a.content},!0):!1}catch(e){if(b(e)||!o.isCurrent(n))return!1;throw console.error(`[documents-store] openDocument failed:`,e),e}finally{o.isCurrent(n)&&(r.value=!1)}}async function d(e,n){let i=o.begin();try{let r=()=>(t.value[e]??[]).find(e=>e.path===n)??null,s=r();return s||=(await c(e),r()),!s||!o.isCurrent(i)||!await u(e,s,i)||!o.isCurrent(i)?!1:(a.value++,!0)}finally{o.isCurrent(i)&&(r.value=!1)}}function f(){o.abort(),r.value=!1,i.value=null}function p(e){delete t.value[e],f()}return{documentsByWorkspace:t,loadingList:n,loadingContent:r,selected:i,requestOpen:a,documentsFor:s,fetchDocuments:c,openDocument:l,openDocumentByPath:d,closeDocument:f,clearForWorkspace:p}});export{h as a,v as i,y as n,b as r,x as t};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{$a as e,$f as t,$i as n,$l as r,$m as i,$n as a,$o as o,$p as s,$t as c,Am as l,An as u,Ap as d,Ar as f,At as ee,B as te,Ba as p,Bc as m,Bd as h,Bi as g,Bl as _,Bp as ne,Bs as v,Bu as y,Cf as re,Ch as ie,Ci as ae,Cn as oe,Cp as se,Cr as ce,Cs as le,Cu as ue,D as de,Dc as fe,Dp as pe,Ec as me,Ef as he,Eh as ge,Ei as _e,El as ve,Em as ye,En as be,Ep as xe,Es as Se,Eu as Ce,Fc as b,Fd as we,Ff as Te,Fh as Ee,Fl as De,Fm as x,Fs as Oe,Fu as S,G as ke,Gd as Ae,Gf as je,Gh as Me,Gm as Ne,Gn as Pe,Gr as Fe,Gu as Ie,H as Le,Hd as Re,Hl as ze,Hm as C,Hn as Be,Hs as Ve,Hu as He,I as Ue,Ia as We,Ic as w,If as Ge,Ih as Ke,Il as qe,Im as T,Is as Je,Iu as Ye,J as Xe,Ja as Ze,Jd as Qe,Jf as $e,Jh as et,Jl as tt,Jm as nt,Jn as rt,Jr as it,K as at,Kd as ot,Kf as st,Kh as ct,Kl as lt,Kn as ut,Kp as dt,Kr as ft,Kt as pt,Ku as mt,La as ht,Lc as gt,Ld as _t,Lf as vt,Lh as yt,Li as bt,Lm as xt,Ln as St,Ls as Ct,Lt as wt,Lu as Tt,Mc as Et,Mi as Dt,Mn as Ot,Mo as kt,Mp as At,Mr as jt,Ms as Mt,Mu as E,N as Nt,Na as Pt,Nc as D,Nh as Ft,Nm as It,Nn as Lt,Np as Rt,Nr as zt,Ns as Bt,Oc as Vt,Oi as Ht,Ol as Ut,Op as Wt,Os as Gt,Ot as Kt,Pa as qt,Pc as Jt,Pd as Yt,Pm as Xt,Pn as Zt,Pp as Qt,Ps as $t,Pt as en,Qa as tn,Qc as nn,Qf as rn,Qh as an,Qi as on,Ql as sn,Qm as cn,Qr as ln,Qt as un,Qu as dn,Ra as fn,Rc as pn,Rd as O,Rf as mn,Rh as hn,Ri as gn,Rl as k,Rm as _n,Rn as vn,Rt as yn,Ru as bn,Sf as xn,Si as Sn,Sl as Cn,Sm as wn,Sn as Tn,So as En,Sp as Dn,Sr as On,Ss as kn,Su as An,Tc as jn,Th as Mn,Ti as Nn,Tl as Pn,Tn as Fn,Tp as In,Tt as Ln,Uc as Rn,Uf as zn,Ul as Bn,Um as A,Un as Vn,Va as Hn,Vf as Un,Vl as Wn,Vm as Gn,Vn as Kn,Vs as qn,Vu as Jn,W as Yn,Wa as Xn,Wc as Zn,Wd as Qn,Wf as $n,Wl as er,Wm as tr,Wt as nr,Wu as rr,Xa as ir,Xf as ar,Xi as or,Xm as j,Xo as sr,Xp as cr,Xr as lr,Xu as ur,Y as dr,Ya as fr,Yf as pr,Yh as mr,Yi as hr,Yl as gr,Ym as _r,Yr as vr,Za as yr,Zd as br,Zf as xr,Zh as Sr,Zl as Cr,Zm as wr,Zo as Tr,Zr as Er,_c as Dr,_d as M,_h as Or,_m as kr,_n as Ar,_o as jr,_p as Mr,_r as Nr,_t as Pr,_u as Fr,ac as Ir,af as Lr,al as Rr,am as zr,an as Br,ap as Vr,ar as Hr,bc as Ur,bd as Wr,bp as Gr,bu as Kr,cf as qr,ch as Jr,ci as Yr,cl as Xr,cm as Zr,cn as Qr,cp as $r,ct as ei,cu as ti,dd as ni,df as ri,dh as ii,di as ai,dl as oi,dn as si,dp as ci,dr as li,ds as ui,dt as di,ea as fi,ed as pi,eg as mi,eh as hi,ei as gi,em as N,en as _i,eo as vi,ep as yi,er as bi,eu as P,f as xi,fd as F,ff as Si,fh as I,fi as Ci,fm as wi,fn as Ti,fp as Ei,fr as Di,ft as Oi,fu as ki,g as Ai,gc as ji,gd as Mi,gh as Ni,gm as Pi,gn as Fi,gp as Ii,gs as Li,gt as Ri,hh as zi,hm as Bi,ho as Vi,hp as Hi,hr as Ui,hs as Wi,ht as Gi,hu as L,ia as Ki,if as qi,il as Ji,im as Yi,ip as Xi,ir as Zi,is as Qi,it as $i,iu as ea,jc as ta,ji as na,jl as ra,jm as ia,jp as aa,jr as oa,jt as sa,ju as R,kc as ca,ki as la,kl as ua,kp as da,kr as fa,kt as pa,ld as ma,lf as ha,lh as ga,lm as z,ln as _a,lp as va,lr as ya,lt as ba,lu as B,m as xa,md as Sa,mh as Ca,mm as wa,mn as Ta,mp as Ea,mr as Da,ms as Oa,mt as ka,mu as Aa,na as ja,nf as Ma,nn as Na,np as Pa,nr as Fa,nt as Ia,nu as La,of as Ra,oi as za,om as Ba,op as Va,or as Ha,ot as Ua,ou as V,pc as Wa,pf as Ga,pn as Ka,po as qa,pp as Ja,pr as Ya,pt as Xa,pu as Za,q as Qa,qc as $a,qd as eo,qf as to,ql as no,qm as ro,qt as io,qu as ao,rf as oo,rh as so,ri as co,rl as lo,rp as uo,rr as fo,ru as po,sd as mo,sf as ho,sl as go,sm as _o,sp as vo,sr as H,ss as yo,su as bo,t as xo,ta as So,td as Co,th as wo,ti as To,tm as Eo,tn as Do,to as Oo,tp as ko,tt as Ao,tu as jo,u as Mo,uc as No,uf as Po,uh as Fo,ul as Io,um as Lo,un as Ro,up as zo,ur as Bo,us as Vo,ut as Ho,uu as Uo,v as Wo,vc as Go,vl as Ko,vm as qo,vn as Jo,vp as Yo,vr as Xo,vs as Zo,vu as U,wc as Qo,wf as $o,wh as es,wi as ts,wl as ns,wm as rs,wn as is,wp as as,wr as os,ws as ss,wt as cs,xf as ls,xm as us,xn as ds,xp as fs,xs as ps,xu as ms,yd as hs,yi as gs,ym as _s,yn as vs,yp as ys,yt as bs,yu as xs,za as Ss,zc as Cs,zd as ws,zf as Ts,zl as W,zm as Es,zn as Ds,zp as Os,zs as G,zt as ks,zu as As}from"./format-Dk7O3LhA.js";import{n as js}from"./SettingsPage-CvLnT73V.js";function Ms(e,t,n){return new Ns(e,t,n)}var Ns=class extends Ct{constructor(e,t,n){super(n.worker,n.keepIdleModels||!1,e,t),this._foreignModuleHost=n.host||null,this._foreignProxy=this._getProxy().then(e=>new Proxy({},{get(t,n,r){if(n!==`then`){if(typeof n!=`string`)throw Error(`Not supported`);return(...t)=>e.$fmr(n,t)}}}))}fhr(e,t){if(!this._foreignModuleHost||typeof this._foreignModuleHost[e]!=`function`)return Promise.reject(Error(`Missing method `+e+` or missing main thread foreign host.`));try{return Promise.resolve(this._foreignModuleHost[e].apply(this._foreignModuleHost,t))}catch(e){return Promise.reject(e)}}getProxy(){return this._foreignProxy}withSyncedResources(e){return this.workerWithSyncedResources(e).then(e=>this.getProxy())}};function Ps(e){return Array.isArray(e)}function Fs(e){return!Ps(e)}function Is(e){return typeof e==`string`}function Ls(e){return!Is(e)}function Rs(e){return!e}function zs(e,t){return e.ignoreCase&&t?t.toLowerCase():t}function Bs(e){return e.replace(/[&<>'"_]/g,`-`)}function Vs(e,t){console.log(`${e.languageId}: ${t}`)}function K(e,t){return Error(`${e.languageId}: ${t}`)}function Hs(e,t,n,r,i){let a=/\$((\$)|(#)|(\d\d?)|[sS](\d\d?)|@(\w+))/g,o=null;return t.replace(a,function(t,a,s,c,l,u,d,f,ee){return Rs(s)?Rs(c)?!Rs(l)&&l<r.length?zs(e,r[l]):!Rs(d)&&e&&typeof e[d]==`string`?e[d]:(o===null&&(o=i.split(`.`),o.unshift(i)),!Rs(u)&&u<o.length?zs(e,o[u]):``):zs(e,n):`$`})}function Us(e,t,n){let r=/\$[sS](\d\d?)/g,i=null;return t.replace(r,function(t,r){return i===null&&(i=n.split(`.`),i.unshift(n)),!Rs(r)&&r<i.length?$o(zs(e,i[r])):``})}function Ws(e,t){let n=t;for(;n&&n.length>0;){let t=e.tokenizer[n];if(t)return t;let r=n.lastIndexOf(`.`);n=r<0?null:n.substr(0,r)}return null}function Gs(e,t){let n=t;for(;n&&n.length>0;){if(e.stateNames[n])return!0;let t=n.lastIndexOf(`.`);n=t<0?null:n.substr(0,t)}return!1}var Ks,qs,Js=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ys=function(e,t){return function(n,r){t(n,r,e)}},Xs,Zs=5,Qs=class{static create(e,t){return this._INSTANCE.create(e,t)}constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}create(e,t){if(e!==null&&e.depth>=this._maxCacheDepth)return new $s(e,t);let n=$s.getStackElementId(e);n.length>0&&(n+=`|`),n+=t;let r=this._entries[n];return r||(r=new $s(e,t),this._entries[n]=r,r)}};Ks=Qs,Ks._INSTANCE=new Ks(Zs);var $s=class e{constructor(e,t){this.parent=e,this.state=t,this.depth=(this.parent?this.parent.depth:0)+1}static getStackElementId(e){let t=``;for(;e!==null;)t.length>0&&(t+=`|`),t+=e.state,e=e.parent;return t}static _equals(e,t){for(;e!==null&&t!==null;){if(e===t)return!0;if(e.state!==t.state)return!1;e=e.parent,t=t.parent}return e===null&&t===null}equals(t){return e._equals(this,t)}push(e){return Qs.create(this,e)}pop(){return this.parent}popall(){let e=this;for(;e.parent;)e=e.parent;return e}switchTo(e){return Qs.create(this.parent,e)}},ec=class e{constructor(e,t){this.languageId=e,this.state=t}equals(e){return this.languageId===e.languageId&&this.state.equals(e.state)}clone(){return this.state.clone()===this.state?this:new e(this.languageId,this.state)}},tc=class{static create(e,t){return this._INSTANCE.create(e,t)}constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}create(e,t){if(t!==null||e!==null&&e.depth>=this._maxCacheDepth)return new nc(e,t);let n=$s.getStackElementId(e),r=this._entries[n];return r||(r=new nc(e,null),this._entries[n]=r,r)}};qs=tc,qs._INSTANCE=new qs(Zs);var nc=class e{constructor(e,t){this.stack=e,this.embeddedLanguageData=t}clone(){return(this.embeddedLanguageData?this.embeddedLanguageData.clone():null)===this.embeddedLanguageData?this:tc.create(this.stack,this.embeddedLanguageData)}equals(t){return!(t instanceof e)||!this.stack.equals(t.stack)?!1:this.embeddedLanguageData===null&&t.embeddedLanguageData===null?!0:this.embeddedLanguageData===null||t.embeddedLanguageData===null?!1:this.embeddedLanguageData.equals(t.embeddedLanguageData)}},rc=class{constructor(){this._tokens=[],this._languageId=null,this._lastTokenType=null,this._lastTokenLanguage=null}enterLanguage(e){this._languageId=e}emit(e,t){(this._lastTokenType!==t||this._lastTokenLanguage!==this._languageId)&&(this._lastTokenType=t,this._lastTokenLanguage=this._languageId,this._tokens.push(new s(e,t,this._languageId)))}nestedLanguageTokenize(e,t,n,r){let i=n.languageId,a=n.state,o=N.get(i);if(!o)return this.enterLanguage(i),this.emit(r,``),a;let c=o.tokenize(e,t,a);if(r!==0)for(let e of c.tokens)this._tokens.push(new s(e.offset+r,e.type,e.language));else this._tokens=this._tokens.concat(c.tokens);return this._lastTokenType=null,this._lastTokenLanguage=null,this._languageId=null,c.endState}finalize(e){return new Eo(this._tokens,e)}},ic=class e{constructor(e,t){this._languageService=e,this._theme=t,this._prependTokens=null,this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0}enterLanguage(e){this._currentLanguageId=this._languageService.languageIdCodec.encodeLanguageId(e)}emit(e,t){let n=this._theme.match(this._currentLanguageId,t)|1024;this._lastTokenMetadata!==n&&(this._lastTokenMetadata=n,this._tokens.push(e),this._tokens.push(n))}static _merge(e,t,n){let r=e===null?0:e.length,i=t.length,a=n===null?0:n.length;if(r===0&&i===0&&a===0)return new Uint32Array;if(r===0&&i===0)return n;if(i===0&&a===0)return e;let o=new Uint32Array(r+i+a);e!==null&&o.set(e);for(let e=0;e<i;e++)o[r+e]=t[e];return n!==null&&o.set(n,r+i),o}nestedLanguageTokenize(t,n,r,i){let a=r.languageId,o=r.state,s=N.get(a);if(!s)return this.enterLanguage(a),this.emit(i,``),o;let c=s.tokenizeEncoded(t,n,o);if(i!==0)for(let e=0,t=c.tokens.length;e<t;e+=2)c.tokens[e]+=i;return this._prependTokens=e._merge(this._prependTokens,this._tokens,c.tokens),this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0,c.endState}finalize(t){return new Os(e._merge(this._prependTokens,this._tokens,null),[],t)}},ac=Xs=class extends C{constructor(e,t,n,r,i){super(),this._configurationService=i,this._languageService=e,this._standaloneThemeService=t,this._languageId=n,this._lexer=r,this._embeddedLanguages=Object.create(null),this.embeddedLoaded=Promise.resolve(void 0);let a=!1;this._register(N.onDidChange(e=>{if(a)return;let t=!1;for(let n=0,r=e.changedLanguages.length;n<r;n++){let r=e.changedLanguages[n];if(this._embeddedLanguages[r]){t=!0;break}}t&&(a=!0,N.handleChange([this._languageId]),a=!1)})),this._maxTokenizationLineLength=this._configurationService.getValue(`editor.maxTokenizationLineLength`,{overrideIdentifier:this._languageId}),this._register(this._configurationService.onDidChangeConfiguration(e=>{e.affectsConfiguration(`editor.maxTokenizationLineLength`)&&(this._maxTokenizationLineLength=this._configurationService.getValue(`editor.maxTokenizationLineLength`,{overrideIdentifier:this._languageId}))}))}getLoadStatus(){let e=[];for(let t in this._embeddedLanguages){let n=N.get(t);if(n){if(n instanceof Xs){let t=n.getLoadStatus();t.loaded===!1&&e.push(t.promise)}continue}N.isResolved(t)||e.push(N.getOrCreate(t))}return e.length===0?{loaded:!0}:{loaded:!1,promise:Promise.all(e).then(e=>void 0)}}getInitialState(){let e=Qs.create(null,this._lexer.start);return tc.create(e,null)}tokenize(e,t,n){if(e.length>=this._maxTokenizationLineLength)return $t(this._languageId,n);let r=new rc,i=this._tokenize(e,t,n,r);return r.finalize(i)}tokenizeEncoded(e,t,n){if(e.length>=this._maxTokenizationLineLength)return Oe(this._languageService.languageIdCodec.encodeLanguageId(this._languageId),n);let r=new ic(this._languageService,this._standaloneThemeService.getColorTheme().tokenTheme),i=this._tokenize(e,t,n,r);return r.finalize(i)}_tokenize(e,t,n,r){return n.embeddedLanguageData?this._nestedTokenize(e,t,n,0,r):this._myTokenize(e,t,n,0,r)}_findLeavingNestedLanguageOffset(e,t){let n=this._lexer.tokenizer[t.stack.state];if(!n&&(n=Ws(this._lexer,t.stack.state),!n))throw K(this._lexer,`tokenizer state is not defined: `+t.stack.state);let r=-1,i=!1;for(let a of n){if(!Ls(a.action)||!(a.action.nextEmbedded===`@pop`||a.action.hasEmbeddedEndInCases))continue;i=!0;let n=a.resolveRegex(t.stack.state),o=n.source;if(o.substr(0,4)===`^(?:`&&o.substr(o.length-1,1)===`)`){let e=(n.ignoreCase?`i`:``)+(n.unicode?`u`:``);n=new RegExp(o.substr(4,o.length-5),e)}let s=e.search(n);s===-1||s!==0&&a.matchOnlyAtLineStart||(r===-1||s<r)&&(r=s)}if(!i)throw K(this._lexer,`no rule containing nextEmbedded: "@pop" in tokenizer embedded state: `+t.stack.state);return r}_nestedTokenize(e,t,n,r,i){let a=this._findLeavingNestedLanguageOffset(e,n);if(a===-1){let a=i.nestedLanguageTokenize(e,t,n.embeddedLanguageData,r);return tc.create(n.stack,new ec(n.embeddedLanguageData.languageId,a))}let o=e.substring(0,a);o.length>0&&i.nestedLanguageTokenize(o,!1,n.embeddedLanguageData,r);let s=e.substring(a);return this._myTokenize(s,t,n,r+a,i)}_safeRuleName(e){return e?e.name:`(unknown)`}_myTokenize(e,t,n,r,i){i.enterLanguage(this._languageId);let a=e.length,o=t&&this._lexer.includeLF?e+`
|
|
1
|
+
import{$a as e,$f as t,$i as n,$l as r,$m as i,$n as a,$o as o,$p as s,$t as c,Am as l,An as u,Ap as d,Ar as f,At as ee,B as te,Ba as p,Bc as m,Bd as h,Bi as g,Bl as _,Bp as ne,Bs as v,Bu as y,Cf as re,Ch as ie,Ci as ae,Cn as oe,Cp as se,Cr as ce,Cs as le,Cu as ue,D as de,Dc as fe,Dp as pe,Ec as me,Ef as he,Eh as ge,Ei as _e,El as ve,Em as ye,En as be,Ep as xe,Es as Se,Eu as Ce,Fc as b,Fd as we,Ff as Te,Fh as Ee,Fl as De,Fm as x,Fs as Oe,Fu as S,G as ke,Gd as Ae,Gf as je,Gh as Me,Gm as Ne,Gn as Pe,Gr as Fe,Gu as Ie,H as Le,Hd as Re,Hl as ze,Hm as C,Hn as Be,Hs as Ve,Hu as He,I as Ue,Ia as We,Ic as w,If as Ge,Ih as Ke,Il as qe,Im as T,Is as Je,Iu as Ye,J as Xe,Ja as Ze,Jd as Qe,Jf as $e,Jh as et,Jl as tt,Jm as nt,Jn as rt,Jr as it,K as at,Kd as ot,Kf as st,Kh as ct,Kl as lt,Kn as ut,Kp as dt,Kr as ft,Kt as pt,Ku as mt,La as ht,Lc as gt,Ld as _t,Lf as vt,Lh as yt,Li as bt,Lm as xt,Ln as St,Ls as Ct,Lt as wt,Lu as Tt,Mc as Et,Mi as Dt,Mn as Ot,Mo as kt,Mp as At,Mr as jt,Ms as Mt,Mu as E,N as Nt,Na as Pt,Nc as D,Nh as Ft,Nm as It,Nn as Lt,Np as Rt,Nr as zt,Ns as Bt,Oc as Vt,Oi as Ht,Ol as Ut,Op as Wt,Os as Gt,Ot as Kt,Pa as qt,Pc as Jt,Pd as Yt,Pm as Xt,Pn as Zt,Pp as Qt,Ps as $t,Pt as en,Qa as tn,Qc as nn,Qf as rn,Qh as an,Qi as on,Ql as sn,Qm as cn,Qr as ln,Qt as un,Qu as dn,Ra as fn,Rc as pn,Rd as O,Rf as mn,Rh as hn,Ri as gn,Rl as k,Rm as _n,Rn as vn,Rt as yn,Ru as bn,Sf as xn,Si as Sn,Sl as Cn,Sm as wn,Sn as Tn,So as En,Sp as Dn,Sr as On,Ss as kn,Su as An,Tc as jn,Th as Mn,Ti as Nn,Tl as Pn,Tn as Fn,Tp as In,Tt as Ln,Uc as Rn,Uf as zn,Ul as Bn,Um as A,Un as Vn,Va as Hn,Vf as Un,Vl as Wn,Vm as Gn,Vn as Kn,Vs as qn,Vu as Jn,W as Yn,Wa as Xn,Wc as Zn,Wd as Qn,Wf as $n,Wl as er,Wm as tr,Wt as nr,Wu as rr,Xa as ir,Xf as ar,Xi as or,Xm as j,Xo as sr,Xp as cr,Xr as lr,Xu as ur,Y as dr,Ya as fr,Yf as pr,Yh as mr,Yi as hr,Yl as gr,Ym as _r,Yr as vr,Za as yr,Zd as br,Zf as xr,Zh as Sr,Zl as Cr,Zm as wr,Zo as Tr,Zr as Er,_c as Dr,_d as M,_h as Or,_m as kr,_n as Ar,_o as jr,_p as Mr,_r as Nr,_t as Pr,_u as Fr,ac as Ir,af as Lr,al as Rr,am as zr,an as Br,ap as Vr,ar as Hr,bc as Ur,bd as Wr,bp as Gr,bu as Kr,cf as qr,ch as Jr,ci as Yr,cl as Xr,cm as Zr,cn as Qr,cp as $r,ct as ei,cu as ti,dd as ni,df as ri,dh as ii,di as ai,dl as oi,dn as si,dp as ci,dr as li,ds as ui,dt as di,ea as fi,ed as pi,eg as mi,eh as hi,ei as gi,em as N,en as _i,eo as vi,ep as yi,er as bi,eu as P,f as xi,fd as F,ff as Si,fh as I,fi as Ci,fm as wi,fn as Ti,fp as Ei,fr as Di,ft as Oi,fu as ki,g as Ai,gc as ji,gd as Mi,gh as Ni,gm as Pi,gn as Fi,gp as Ii,gs as Li,gt as Ri,hh as zi,hm as Bi,ho as Vi,hp as Hi,hr as Ui,hs as Wi,ht as Gi,hu as L,ia as Ki,if as qi,il as Ji,im as Yi,ip as Xi,ir as Zi,is as Qi,it as $i,iu as ea,jc as ta,ji as na,jl as ra,jm as ia,jp as aa,jr as oa,jt as sa,ju as R,kc as ca,ki as la,kl as ua,kp as da,kr as fa,kt as pa,ld as ma,lf as ha,lh as ga,lm as z,ln as _a,lp as va,lr as ya,lt as ba,lu as B,m as xa,md as Sa,mh as Ca,mm as wa,mn as Ta,mp as Ea,mr as Da,ms as Oa,mt as ka,mu as Aa,na as ja,nf as Ma,nn as Na,np as Pa,nr as Fa,nt as Ia,nu as La,of as Ra,oi as za,om as Ba,op as Va,or as Ha,ot as Ua,ou as V,pc as Wa,pf as Ga,pn as Ka,po as qa,pp as Ja,pr as Ya,pt as Xa,pu as Za,q as Qa,qc as $a,qd as eo,qf as to,ql as no,qm as ro,qt as io,qu as ao,rf as oo,rh as so,ri as co,rl as lo,rp as uo,rr as fo,ru as po,sd as mo,sf as ho,sl as go,sm as _o,sp as vo,sr as H,ss as yo,su as bo,t as xo,ta as So,td as Co,th as wo,ti as To,tm as Eo,tn as Do,to as Oo,tp as ko,tt as Ao,tu as jo,u as Mo,uc as No,uf as Po,uh as Fo,ul as Io,um as Lo,un as Ro,up as zo,ur as Bo,us as Vo,ut as Ho,uu as Uo,v as Wo,vc as Go,vl as Ko,vm as qo,vn as Jo,vp as Yo,vr as Xo,vs as Zo,vu as U,wc as Qo,wf as $o,wh as es,wi as ts,wl as ns,wm as rs,wn as is,wp as as,wr as os,ws as ss,wt as cs,xf as ls,xm as us,xn as ds,xp as fs,xs as ps,xu as ms,yd as hs,yi as gs,ym as _s,yn as vs,yp as ys,yt as bs,yu as xs,za as Ss,zc as Cs,zd as ws,zf as Ts,zl as W,zm as Es,zn as Ds,zp as Os,zs as G,zt as ks,zu as As}from"./format-BwWP6Aay.js";import{n as js}from"./SettingsPage-Jx6TnOzR.js";function Ms(e,t,n){return new Ns(e,t,n)}var Ns=class extends Ct{constructor(e,t,n){super(n.worker,n.keepIdleModels||!1,e,t),this._foreignModuleHost=n.host||null,this._foreignProxy=this._getProxy().then(e=>new Proxy({},{get(t,n,r){if(n!==`then`){if(typeof n!=`string`)throw Error(`Not supported`);return(...t)=>e.$fmr(n,t)}}}))}fhr(e,t){if(!this._foreignModuleHost||typeof this._foreignModuleHost[e]!=`function`)return Promise.reject(Error(`Missing method `+e+` or missing main thread foreign host.`));try{return Promise.resolve(this._foreignModuleHost[e].apply(this._foreignModuleHost,t))}catch(e){return Promise.reject(e)}}getProxy(){return this._foreignProxy}withSyncedResources(e){return this.workerWithSyncedResources(e).then(e=>this.getProxy())}};function Ps(e){return Array.isArray(e)}function Fs(e){return!Ps(e)}function Is(e){return typeof e==`string`}function Ls(e){return!Is(e)}function Rs(e){return!e}function zs(e,t){return e.ignoreCase&&t?t.toLowerCase():t}function Bs(e){return e.replace(/[&<>'"_]/g,`-`)}function Vs(e,t){console.log(`${e.languageId}: ${t}`)}function K(e,t){return Error(`${e.languageId}: ${t}`)}function Hs(e,t,n,r,i){let a=/\$((\$)|(#)|(\d\d?)|[sS](\d\d?)|@(\w+))/g,o=null;return t.replace(a,function(t,a,s,c,l,u,d,f,ee){return Rs(s)?Rs(c)?!Rs(l)&&l<r.length?zs(e,r[l]):!Rs(d)&&e&&typeof e[d]==`string`?e[d]:(o===null&&(o=i.split(`.`),o.unshift(i)),!Rs(u)&&u<o.length?zs(e,o[u]):``):zs(e,n):`$`})}function Us(e,t,n){let r=/\$[sS](\d\d?)/g,i=null;return t.replace(r,function(t,r){return i===null&&(i=n.split(`.`),i.unshift(n)),!Rs(r)&&r<i.length?$o(zs(e,i[r])):``})}function Ws(e,t){let n=t;for(;n&&n.length>0;){let t=e.tokenizer[n];if(t)return t;let r=n.lastIndexOf(`.`);n=r<0?null:n.substr(0,r)}return null}function Gs(e,t){let n=t;for(;n&&n.length>0;){if(e.stateNames[n])return!0;let t=n.lastIndexOf(`.`);n=t<0?null:n.substr(0,t)}return!1}var Ks,qs,Js=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ys=function(e,t){return function(n,r){t(n,r,e)}},Xs,Zs=5,Qs=class{static create(e,t){return this._INSTANCE.create(e,t)}constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}create(e,t){if(e!==null&&e.depth>=this._maxCacheDepth)return new $s(e,t);let n=$s.getStackElementId(e);n.length>0&&(n+=`|`),n+=t;let r=this._entries[n];return r||(r=new $s(e,t),this._entries[n]=r,r)}};Ks=Qs,Ks._INSTANCE=new Ks(Zs);var $s=class e{constructor(e,t){this.parent=e,this.state=t,this.depth=(this.parent?this.parent.depth:0)+1}static getStackElementId(e){let t=``;for(;e!==null;)t.length>0&&(t+=`|`),t+=e.state,e=e.parent;return t}static _equals(e,t){for(;e!==null&&t!==null;){if(e===t)return!0;if(e.state!==t.state)return!1;e=e.parent,t=t.parent}return e===null&&t===null}equals(t){return e._equals(this,t)}push(e){return Qs.create(this,e)}pop(){return this.parent}popall(){let e=this;for(;e.parent;)e=e.parent;return e}switchTo(e){return Qs.create(this.parent,e)}},ec=class e{constructor(e,t){this.languageId=e,this.state=t}equals(e){return this.languageId===e.languageId&&this.state.equals(e.state)}clone(){return this.state.clone()===this.state?this:new e(this.languageId,this.state)}},tc=class{static create(e,t){return this._INSTANCE.create(e,t)}constructor(e){this._maxCacheDepth=e,this._entries=Object.create(null)}create(e,t){if(t!==null||e!==null&&e.depth>=this._maxCacheDepth)return new nc(e,t);let n=$s.getStackElementId(e),r=this._entries[n];return r||(r=new nc(e,null),this._entries[n]=r,r)}};qs=tc,qs._INSTANCE=new qs(Zs);var nc=class e{constructor(e,t){this.stack=e,this.embeddedLanguageData=t}clone(){return(this.embeddedLanguageData?this.embeddedLanguageData.clone():null)===this.embeddedLanguageData?this:tc.create(this.stack,this.embeddedLanguageData)}equals(t){return!(t instanceof e)||!this.stack.equals(t.stack)?!1:this.embeddedLanguageData===null&&t.embeddedLanguageData===null?!0:this.embeddedLanguageData===null||t.embeddedLanguageData===null?!1:this.embeddedLanguageData.equals(t.embeddedLanguageData)}},rc=class{constructor(){this._tokens=[],this._languageId=null,this._lastTokenType=null,this._lastTokenLanguage=null}enterLanguage(e){this._languageId=e}emit(e,t){(this._lastTokenType!==t||this._lastTokenLanguage!==this._languageId)&&(this._lastTokenType=t,this._lastTokenLanguage=this._languageId,this._tokens.push(new s(e,t,this._languageId)))}nestedLanguageTokenize(e,t,n,r){let i=n.languageId,a=n.state,o=N.get(i);if(!o)return this.enterLanguage(i),this.emit(r,``),a;let c=o.tokenize(e,t,a);if(r!==0)for(let e of c.tokens)this._tokens.push(new s(e.offset+r,e.type,e.language));else this._tokens=this._tokens.concat(c.tokens);return this._lastTokenType=null,this._lastTokenLanguage=null,this._languageId=null,c.endState}finalize(e){return new Eo(this._tokens,e)}},ic=class e{constructor(e,t){this._languageService=e,this._theme=t,this._prependTokens=null,this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0}enterLanguage(e){this._currentLanguageId=this._languageService.languageIdCodec.encodeLanguageId(e)}emit(e,t){let n=this._theme.match(this._currentLanguageId,t)|1024;this._lastTokenMetadata!==n&&(this._lastTokenMetadata=n,this._tokens.push(e),this._tokens.push(n))}static _merge(e,t,n){let r=e===null?0:e.length,i=t.length,a=n===null?0:n.length;if(r===0&&i===0&&a===0)return new Uint32Array;if(r===0&&i===0)return n;if(i===0&&a===0)return e;let o=new Uint32Array(r+i+a);e!==null&&o.set(e);for(let e=0;e<i;e++)o[r+e]=t[e];return n!==null&&o.set(n,r+i),o}nestedLanguageTokenize(t,n,r,i){let a=r.languageId,o=r.state,s=N.get(a);if(!s)return this.enterLanguage(a),this.emit(i,``),o;let c=s.tokenizeEncoded(t,n,o);if(i!==0)for(let e=0,t=c.tokens.length;e<t;e+=2)c.tokens[e]+=i;return this._prependTokens=e._merge(this._prependTokens,this._tokens,c.tokens),this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0,c.endState}finalize(t){return new Os(e._merge(this._prependTokens,this._tokens,null),[],t)}},ac=Xs=class extends C{constructor(e,t,n,r,i){super(),this._configurationService=i,this._languageService=e,this._standaloneThemeService=t,this._languageId=n,this._lexer=r,this._embeddedLanguages=Object.create(null),this.embeddedLoaded=Promise.resolve(void 0);let a=!1;this._register(N.onDidChange(e=>{if(a)return;let t=!1;for(let n=0,r=e.changedLanguages.length;n<r;n++){let r=e.changedLanguages[n];if(this._embeddedLanguages[r]){t=!0;break}}t&&(a=!0,N.handleChange([this._languageId]),a=!1)})),this._maxTokenizationLineLength=this._configurationService.getValue(`editor.maxTokenizationLineLength`,{overrideIdentifier:this._languageId}),this._register(this._configurationService.onDidChangeConfiguration(e=>{e.affectsConfiguration(`editor.maxTokenizationLineLength`)&&(this._maxTokenizationLineLength=this._configurationService.getValue(`editor.maxTokenizationLineLength`,{overrideIdentifier:this._languageId}))}))}getLoadStatus(){let e=[];for(let t in this._embeddedLanguages){let n=N.get(t);if(n){if(n instanceof Xs){let t=n.getLoadStatus();t.loaded===!1&&e.push(t.promise)}continue}N.isResolved(t)||e.push(N.getOrCreate(t))}return e.length===0?{loaded:!0}:{loaded:!1,promise:Promise.all(e).then(e=>void 0)}}getInitialState(){let e=Qs.create(null,this._lexer.start);return tc.create(e,null)}tokenize(e,t,n){if(e.length>=this._maxTokenizationLineLength)return $t(this._languageId,n);let r=new rc,i=this._tokenize(e,t,n,r);return r.finalize(i)}tokenizeEncoded(e,t,n){if(e.length>=this._maxTokenizationLineLength)return Oe(this._languageService.languageIdCodec.encodeLanguageId(this._languageId),n);let r=new ic(this._languageService,this._standaloneThemeService.getColorTheme().tokenTheme),i=this._tokenize(e,t,n,r);return r.finalize(i)}_tokenize(e,t,n,r){return n.embeddedLanguageData?this._nestedTokenize(e,t,n,0,r):this._myTokenize(e,t,n,0,r)}_findLeavingNestedLanguageOffset(e,t){let n=this._lexer.tokenizer[t.stack.state];if(!n&&(n=Ws(this._lexer,t.stack.state),!n))throw K(this._lexer,`tokenizer state is not defined: `+t.stack.state);let r=-1,i=!1;for(let a of n){if(!Ls(a.action)||!(a.action.nextEmbedded===`@pop`||a.action.hasEmbeddedEndInCases))continue;i=!0;let n=a.resolveRegex(t.stack.state),o=n.source;if(o.substr(0,4)===`^(?:`&&o.substr(o.length-1,1)===`)`){let e=(n.ignoreCase?`i`:``)+(n.unicode?`u`:``);n=new RegExp(o.substr(4,o.length-5),e)}let s=e.search(n);s===-1||s!==0&&a.matchOnlyAtLineStart||(r===-1||s<r)&&(r=s)}if(!i)throw K(this._lexer,`no rule containing nextEmbedded: "@pop" in tokenizer embedded state: `+t.stack.state);return r}_nestedTokenize(e,t,n,r,i){let a=this._findLeavingNestedLanguageOffset(e,n);if(a===-1){let a=i.nestedLanguageTokenize(e,t,n.embeddedLanguageData,r);return tc.create(n.stack,new ec(n.embeddedLanguageData.languageId,a))}let o=e.substring(0,a);o.length>0&&i.nestedLanguageTokenize(o,!1,n.embeddedLanguageData,r);let s=e.substring(a);return this._myTokenize(s,t,n,r+a,i)}_safeRuleName(e){return e?e.name:`(unknown)`}_myTokenize(e,t,n,r,i){i.enterLanguage(this._languageId);let a=e.length,o=t&&this._lexer.includeLF?e+`
|
|
2
2
|
`:e,s=o.length,c=n.embeddedLanguageData,l=n.stack,u=0,d=null,f=!0;for(;f||u<s;){let n=u,ee=l.depth,te=d?d.groups.length:0,p=l.state,m=null,h=null,g=null,_=null,ne=null;if(d){m=d.matches;let e=d.groups.shift();h=e.matched,g=e.action,_=d.rule,d.groups.length===0&&(d=null)}else{if(!f&&u>=s)break;f=!1;let e=this._lexer.tokenizer[p];if(!e&&(e=Ws(this._lexer,p),!e))throw K(this._lexer,`tokenizer state is not defined: `+p);let t=o.substr(u);for(let n of e)if((u===0||!n.matchOnlyAtLineStart)&&(m=t.match(n.resolveRegex(p)),m)){h=m[0],g=n.action;break}}if(m||(m=[``],h=``),g||=(u<s&&(m=[o.charAt(u)],h=m[0]),this._lexer.defaultToken),h===null)break;for(u+=h.length;Fs(g)&&Ls(g)&&g.test;)g=g.test(h,m,p,u===s);let v=null;if(typeof g==`string`||Array.isArray(g))v=g;else if(g.group)v=g.group;else if(g.token!==null&&g.token!==void 0){if(v=g.tokenSubst?Hs(this._lexer,g.token,h,m,p):g.token,g.nextEmbedded){if(g.nextEmbedded===`@pop`){if(!c)throw K(this._lexer,`cannot pop embedded language if not inside one`);c=null}else if(c)throw K(this._lexer,`cannot enter embedded language from within an embedded language`);else ne=Hs(this._lexer,g.nextEmbedded,h,m,p)}if(g.goBack&&(u=Math.max(0,u-g.goBack)),g.switchTo&&typeof g.switchTo==`string`){let e=Hs(this._lexer,g.switchTo,h,m,p);if(e[0]===`@`&&(e=e.substr(1)),Ws(this._lexer,e))l=l.switchTo(e);else throw K(this._lexer,`trying to switch to a state '`+e+`' that is undefined in rule: `+this._safeRuleName(_))}else if(g.transform&&typeof g.transform==`function`)throw K(this._lexer,`action.transform not supported`);else if(g.next){if(g.next===`@push`){if(l.depth>=this._lexer.maxStack)throw K(this._lexer,`maximum tokenizer stack size reached: [`+l.state+`,`+l.parent.state+`,...]`);l=l.push(p)}else if(g.next===`@pop`){if(l.depth<=1)throw K(this._lexer,`trying to pop an empty stack in rule: `+this._safeRuleName(_));l=l.pop()}else if(g.next===`@popall`)l=l.popall();else{let e=Hs(this._lexer,g.next,h,m,p);if(e[0]===`@`&&(e=e.substr(1)),Ws(this._lexer,e))l=l.push(e);else throw K(this._lexer,`trying to set a next state '`+e+`' that is undefined in rule: `+this._safeRuleName(_))}}g.log&&typeof g.log==`string`&&Vs(this._lexer,this._lexer.languageId+`: `+Hs(this._lexer,g.log,h,m,p))}if(v===null)throw K(this._lexer,`lexer rule has no well-defined action in rule: `+this._safeRuleName(_));let y=n=>{let a=this._languageService.getLanguageIdByLanguageName(n)||this._languageService.getLanguageIdByMimeType(n)||n,o=this._getNestedEmbeddedLanguageData(a);if(u<s){let n=e.substr(u);return this._nestedTokenize(n,t,tc.create(l,o),r+u,i)}return tc.create(l,o)};if(Array.isArray(v)){if(d&&d.groups.length>0)throw K(this._lexer,`groups cannot be nested: `+this._safeRuleName(_));if(m.length!==v.length+1)throw K(this._lexer,`matched number of groups does not match the number of actions in rule: `+this._safeRuleName(_));let e=0;for(let t=1;t<m.length;t++)e+=m[t].length;if(e!==h.length)throw K(this._lexer,`with groups, all characters should be matched in consecutive groups in rule: `+this._safeRuleName(_));d={rule:_,matches:m,groups:[]};for(let e=0;e<v.length;e++)d.groups[e]={action:v[e],matched:m[e+1]};u-=h.length;continue}{if(v===`@rematch`&&(u-=h.length,h=``,m=null,v=``,ne!==null))return y(ne);if(h.length===0){if(s===0||ee!==l.depth||p!==l.state||(d?d.groups.length:0)!==te)continue;throw K(this._lexer,`no progress in tokenizer in rule: `+this._safeRuleName(_))}let e=null;if(Is(v)&&v.indexOf(`@brackets`)===0){let t=v.substr(9),n=oc(this._lexer,h);if(!n)throw K(this._lexer,`@brackets token returned but no bracket defined as: `+h);e=Bs(n.token+t)}else e=Bs(v===``?``:v+this._lexer.tokenPostfix);n<a&&i.emit(n+r,e)}if(ne!==null)return y(ne)}return tc.create(l,c)}_getNestedEmbeddedLanguageData(e){if(!this._languageService.isRegisteredLanguageId(e))return new ec(e,Bt);e!==this._languageId&&(this._languageService.requestBasicLanguageFeatures(e),N.getOrCreate(e),this._embeddedLanguages[e]=!0);let t=N.get(e);return t?new ec(e,t.getInitialState()):new ec(e,Bt)}};ac=Xs=Js([Ys(4,w)],ac);function oc(e,t){if(!t)return null;t=zs(e,t);let n=e.brackets;for(let e of n)if(e.open===t)return{token:e.token,bracketType:1};else if(e.close===t)return{token:e.token,bracketType:-1};return null}var sc=Mt(`standaloneColorizer`,{createHTML:e=>e}),cc=class{static colorizeElement(e,t,n,r){r||={};let i=r.theme||`vs`,a=r.mimeType||n.getAttribute(`lang`)||n.getAttribute(`data-lang`);if(!a)return console.error(`Mode not detected`),Promise.resolve();let o=t.getLanguageIdByMimeType(a)||a;e.setTheme(i);let s=n.firstChild?n.firstChild.nodeValue:``;return n.className+=` `+i,this.colorize(t,s||``,o,r).then(e=>{n.innerHTML=sc?.createHTML(e)??e},e=>console.error(e))}static async colorize(e,t,n,r){let i=e.languageIdCodec,a=4;r&&typeof r.tabSize==`number`&&(a=r.tabSize),Ts(t)&&(t=t.substr(1));let o=mn(t);if(!e.isRegisteredLanguageId(n))return uc(o,a,i);let s=await N.getOrCreate(n);return s?lc(o,a,s,i):uc(o,a,i)}static colorizeLine(e,t,n,r,i=4){let a=le.isBasicASCII(e,t),o=le.containsRTL(e,a,n);return Se(new ss(!1,!0,e,!1,a,o,0,r,[],i,0,0,0,0,-1,`none`,!1,!1,null,null,0)).html}static colorizeModelLine(e,t,n=4){let r=e.getLineContent(t);e.tokenization.forceTokenization(t);let i=e.tokenization.getLineTokens(t).inflate();return this.colorizeLine(r,e.mightContainNonBasicASCII(),e.mightContainRTL(),i,n)}};function lc(e,t,n,r){return new Promise((i,a)=>{let o=()=>{let s=dc(e,t,n,r);if(n instanceof ac){let e=n.getLoadStatus();if(e.loaded===!1){e.promise.then(o,a);return}}i(s)};o()})}function uc(e,t,n){let r=[],i=new Uint32Array(2);i[0]=0,i[1]=33587200;for(let a=0,o=e.length;a<o;a++){let o=e[a];i[0]=o.length;let s=new Gt(i,o,n),c=le.isBasicASCII(o,!0),l=le.containsRTL(o,c,!0),u=Se(new ss(!1,!0,o,!1,c,l,0,s,[],t,0,0,0,0,-1,`none`,!1,!1,null,null,0));r=r.concat(u.html),r.push(`<br/>`)}return r.join(``)}function dc(e,t,n,r){let i=[],a=n.getInitialState();for(let o=0,s=e.length;o<s;o++){let s=e[o],c=n.tokenizeEncoded(s,!0,a);Gt.convertToEndOffset(c.tokens,s.length);let l=new Gt(c.tokens,s,r),u=le.isBasicASCII(s,!0),d=le.containsRTL(s,u,!0),f=Se(new ss(!1,!0,s,!1,u,d,0,l.inflate(),[],t,0,0,0,0,-1,`none`,!1,!1,null,null,0));i=i.concat(f.html),i.push(`<br/>`),a=c.endState}return i.join(``)}var fc=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},pc=function(e,t){return function(n,r){t(n,r,e)}},mc=V,hc=class extends fn{get _targetWindow(){return R(this._target.targetElements[0])}get _targetDocumentElement(){return R(this._target.targetElements[0]).document.documentElement}get isDisposed(){return this._isDisposed}get isMouseIn(){return this._lockMouseTracker.isMouseIn}get domNode(){return this._hover.containerDomNode}get onDispose(){return this._onDispose.event}get onRequestLayout(){return this._onRequestLayout.event}get anchor(){return this._hoverPosition===2?0:1}get x(){return this._x}get y(){return this._y}get isLocked(){return this._isLocked}set isLocked(e){this._isLocked!==e&&(this._isLocked=e,this._hoverContainer.classList.toggle(`locked`,this._isLocked))}addMouseTrackingElement(e){return this._lockMouseTracker.addElement(e)}constructor(e,t,n,r,i){if(super(),this._keybindingService=t,this._configurationService=n,this._markdownRenderer=r,this._accessibilityService=i,this._messageListeners=new A,this._isDisposed=!1,this._forcePosition=!1,this._x=0,this._y=0,this._isLocked=!1,this._enableFocusTraps=!1,this._addedFocusTrap=!1,this._maxHeightRatioRelativeToWindow=.5,this._onDispose=this._register(new x),this._onRequestLayout=this._register(new x),this._linkHandler=e.linkHandler,this._target=`targetElements`in e.target?e.target:new _c(e.target),e.style)switch(e.style){case 1:e.appearance??={},e.appearance.compact??=!0,e.appearance.showPointer??=!0;break;case 2:e.appearance??={},e.appearance.compact??=!0}this._hoverPointer=e.appearance?.showPointer?mc(`div.workbench-hover-pointer`):void 0,this._hover=this._register(new ft(!e.appearance?.skipFadeInAnimation)),this._hover.containerDomNode.classList.add(`workbench-hover`),e.appearance?.compact&&this._hover.containerDomNode.classList.add(`workbench-hover`,`compact`),this._hoverPointer&&this._hover.containerDomNode.classList.add(`with-pointer`),e.additionalClasses&&this._hover.containerDomNode.classList.add(...e.additionalClasses),e.position?.forcePosition&&(this._forcePosition=!0),e.trapFocus&&(this._enableFocusTraps=!0);let a=e.appearance?.maxHeightRatio;a!==void 0&&a>0&&a<=1&&(this._maxHeightRatioRelativeToWindow=a),this._hoverPosition=e.position?.hoverPosition===void 0?3:es(e.position.hoverPosition)?e.position.hoverPosition:2,this.onmousedown(this._hover.containerDomNode,e=>e.stopPropagation()),this.onkeydown(this._hover.containerDomNode,e=>{e.equals(9)&&this.dispose()}),this._register(L(this._targetWindow,`blur`,()=>this.dispose()));let o=mc(`div.hover-row.markdown-hover`),s=mc(`div.hover-contents`);if(typeof e.content==`string`)s.textContent=e.content,s.style.whiteSpace=`pre-wrap`;else if(y(e.content)){s.appendChild(e.content),s.classList.add(`html-hover-contents`);let t=new ResizeObserver(()=>{this.layout(),this._onRequestLayout.fire()});t.observe(s),this._register(j(()=>t.disconnect()))}else{let t=e.content,{element:n}=this._register(this._markdownRenderer.render(t,{actionHandler:this._linkHandler,asyncRenderCallback:()=>{s.classList.add(`code-hover-contents`),this.layout(),this._onRequestLayout.fire()}}));s.appendChild(n)}if(o.appendChild(s),this._hover.contentsDomNode.appendChild(o),e.actions&&e.actions.length>0){let t=mc(`div.hover-row.status-bar`),n=mc(`div.actions`);e.actions.forEach(e=>{let t=this._keybindingService.lookupKeybinding(e.commandId),r=t?t.getLabel():null;this._register(Fe.render(n,{label:e.label,commandId:e.commandId,run:t=>{e.run(t),this.dispose()},iconClass:e.iconClass},r))}),t.appendChild(n),this._hover.containerDomNode.appendChild(t)}this._hoverContainer=mc(`div.workbench-hover-container`),this._hoverPointer&&this._hoverContainer.appendChild(this._hoverPointer),this._hoverContainer.appendChild(this._hover.containerDomNode);let c;if(c=e.actions&&e.actions.length>0?!1:e.persistence?.hideOnHover===void 0?typeof e.content==`string`||fa(e.content)&&!e.content.value.includes(`](`)&&!e.content.value.includes(`</a>`):e.persistence.hideOnHover,e.appearance?.showHoverHint){let e=mc(`div.hover-row.status-bar`),t=mc(`div.info`);t.textContent=I(1761,`Hold {0} key to mouse over`,so?`Option`:`Alt`),e.appendChild(t),this._hover.containerDomNode.appendChild(e)}let l=[...this._target.targetElements];c||l.push(this._hoverContainer);let u=this._mouseTracker=this._register(new gc(l));if(this._register(u.onMouseOut(()=>{this._isLocked||this.dispose()})),c){let e=[...this._target.targetElements,this._hoverContainer];this._lockMouseTracker=this._register(new gc(e)),this._register(this._lockMouseTracker.onMouseOut(()=>{this._isLocked||this.dispose()}))}else this._lockMouseTracker=u}addFocusTrap(){if(!this._enableFocusTraps||this._addedFocusTrap)return;this._addedFocusTrap=!0;let e=this._hover.containerDomNode,t=this.findLastFocusableChild(this._hover.containerDomNode);if(t){let n=mt(this._hoverContainer,mc(`div`)),r=U(this._hoverContainer,mc(`div`));n.tabIndex=0,r.tabIndex=0,this._register(L(r,`focus`,t=>{e.focus(),t.preventDefault()})),this._register(L(n,`focus`,e=>{t.focus(),e.preventDefault()}))}}findLastFocusableChild(e){if(e.hasChildNodes())for(let t=0;t<e.childNodes.length;t++){let n=e.childNodes.item(e.childNodes.length-t-1);if(n.nodeType===n.ELEMENT_NODE){let e=n;if(typeof e.tabIndex==`number`&&e.tabIndex>=0)return e}let r=this.findLastFocusableChild(n);if(r)return r}}render(e){e.appendChild(this._hoverContainer);let t=this._hoverContainer.contains(this._hoverContainer.ownerDocument.activeElement)&&it(this._configurationService.getValue(`accessibility.verbosity.hover`)===!0&&this._accessibilityService.isScreenReaderOptimized(),this._keybindingService.lookupKeybinding(`editor.action.accessibleView`)?.getAriaLabel());t&&kn(t),this.layout(),this.addFocusTrap()}layout(){this._mouseTracker?.suppressPendingMouseOut(),this._lockMouseTracker!==this._mouseTracker&&this._lockMouseTracker?.suppressPendingMouseOut(),this._hover.containerDomNode.classList.remove(`right-aligned`),this._hover.contentsDomNode.style.maxHeight=``;let e=e=>{let t=Ce(e),n=e.getBoundingClientRect();return{top:n.top*t,bottom:n.bottom*t,right:n.right*t,left:n.left*t}},{top:t,right:n,bottom:r,left:i}=this._target.targetElements.map(t=>e(t))[0],a=n-i,o=r-t,s={top:t,right:n,bottom:r,left:i,width:a,height:o,center:{x:i+a/2,y:t+o/2}};if(this.adjustHorizontalHoverPosition(s),this.adjustVerticalHoverPosition(s),this.adjustHoverMaxHeight(s),this._hoverContainer.style.padding=``,this._hoverContainer.style.margin=``,this._hoverPointer){switch(this._hoverPosition){case 1:s.left+=3,s.right+=3,this._hoverContainer.style.paddingLeft=`3px`,this._hoverContainer.style.marginLeft=`-3px`;break;case 0:s.left-=3,s.right-=3,this._hoverContainer.style.paddingRight=`3px`,this._hoverContainer.style.marginRight=`-3px`;break;case 2:s.top+=3,s.bottom+=3,this._hoverContainer.style.paddingTop=`3px`,this._hoverContainer.style.marginTop=`-3px`;break;case 3:s.top-=3,s.bottom-=3,this._hoverContainer.style.paddingBottom=`3px`,this._hoverContainer.style.marginBottom=`-3px`}s.center.x=s.left+a/2,s.center.y=s.top+o/2}this.computeXCordinate(s),this.computeYCordinate(s),this._hoverPointer&&(this._hoverPointer.classList.remove(`top`),this._hoverPointer.classList.remove(`left`),this._hoverPointer.classList.remove(`right`),this._hoverPointer.classList.remove(`bottom`),this.setHoverPointerPosition(s)),this._hover.onContentsChanged()}computeXCordinate(e){let t=this._hover.containerDomNode.clientWidth+2;this._target.x===void 0?this._hoverPosition===1?this._x=e.right:this._hoverPosition===0?this._x=e.left-t:(this._x=this._hoverPointer?e.center.x-this._hover.containerDomNode.clientWidth/2:e.left,this._x+t>=this._targetDocumentElement.clientWidth&&(this._hover.containerDomNode.classList.add(`right-aligned`),this._x=Math.max(this._targetDocumentElement.clientWidth-t-2,this._targetDocumentElement.clientLeft))):this._x=this._target.x,this._x<this._targetDocumentElement.clientLeft&&(this._x=e.left+2)}computeYCordinate(e){this._y=this._target.y===void 0?this._hoverPosition===3?e.top:this._hoverPosition===2?e.bottom-2:this._hoverPointer?e.center.y+this._hover.containerDomNode.clientHeight/2:e.bottom:this._target.y,this._y>this._targetWindow.innerHeight&&(this._y=e.bottom)}adjustHorizontalHoverPosition(e){if(this._target.x!==void 0)return;let t=this._hoverPointer?3:0;if(this._forcePosition){let n=t+2;this._hoverPosition===1?this._hover.containerDomNode.style.maxWidth=`${this._targetDocumentElement.clientWidth-e.right-n}px`:this._hoverPosition===0&&(this._hover.containerDomNode.style.maxWidth=`${e.left-n}px`);return}this._hoverPosition===1?this._targetDocumentElement.clientWidth-e.right<this._hover.containerDomNode.clientWidth+t&&(this._hoverPosition=e.left>=this._hover.containerDomNode.clientWidth+t?0:2):this._hoverPosition===0&&(e.left<this._hover.containerDomNode.clientWidth+t&&(this._hoverPosition=this._targetDocumentElement.clientWidth-e.right>=this._hover.containerDomNode.clientWidth+t?1:2),e.left-this._hover.containerDomNode.clientWidth-t<=this._targetDocumentElement.clientLeft&&(this._hoverPosition=1))}adjustVerticalHoverPosition(e){if(this._target.y!==void 0||this._forcePosition)return;let t=this._hoverPointer?3:0;this._hoverPosition===3?e.top-this._hover.containerDomNode.clientHeight-t<0&&(this._hoverPosition=2):this._hoverPosition===2&&e.bottom+this._hover.containerDomNode.offsetHeight+t>this._targetWindow.innerHeight&&(this._hoverPosition=3)}adjustHoverMaxHeight(e){let t=this._targetWindow.innerHeight*this._maxHeightRatioRelativeToWindow;if(this._forcePosition){let n=(this._hoverPointer?3:0)+2;this._hoverPosition===3?t=Math.min(t,e.top-n):this._hoverPosition===2&&(t=Math.min(t,this._targetWindow.innerHeight-e.bottom-n))}if(this._hover.containerDomNode.style.maxHeight=`${t}px`,this._hover.contentsDomNode.clientHeight<this._hover.contentsDomNode.scrollHeight){let e=`${this._hover.scrollbar.options.verticalScrollbarSize}px`;this._hover.contentsDomNode.style.paddingRight!==e&&(this._hover.contentsDomNode.style.paddingRight=e)}}setHoverPointerPosition(e){if(this._hoverPointer)switch(this._hoverPosition){case 0:case 1:{this._hoverPointer.classList.add(this._hoverPosition===0?`right`:`left`);let t=this._hover.containerDomNode.clientHeight;t>e.height?this._hoverPointer.style.top=`${e.center.y-(this._y-t)-3}px`:this._hoverPointer.style.top=`${Math.round(t/2)-3}px`;break}case 3:case 2:{this._hoverPointer.classList.add(this._hoverPosition===3?`bottom`:`top`);let t=this._hover.containerDomNode.clientWidth,n=Math.round(t/2)-3,r=this._x+n;(r<e.left||r>e.right)&&(n=e.center.x-this._x-3),this._hoverPointer.style.left=`${n}px`;break}}}focus(){this._hover.containerDomNode.focus()}dispose(){this._isDisposed||(this._onDispose.fire(),this._target.dispose?.(),this._hoverContainer.remove(),this._messageListeners.dispose(),super.dispose()),this._isDisposed=!0}};hc=fc([pc(1,na),pc(2,w),pc(3,Ui),pc(4,Wi)],hc);var gc=class extends fn{get onMouseOut(){return this._onMouseOut.event}get isMouseIn(){return this._isMouseIn}constructor(e,t=200){super(),this._elements=e,this._eventDebounceDelay=t,this._isMouseIn=!0,this._suppressNextMouseOut=!1,this._mouseTimer=this._register(new Ne),this._onMouseOut=this._register(new x);for(let e of this._elements)this.onmouseover(e,()=>this._onTargetMouseOver()),this.onmouseleave(e,()=>this._onTargetMouseLeave())}_onTargetMouseOver(){this._isMouseIn=!0,this._suppressNextMouseOut=!1,this._mouseTimer.clear()}_onTargetMouseLeave(){this._isMouseIn=!1,this._mouseTimer.value=new Qe(()=>this._fireIfMouseOutside(),this._eventDebounceDelay)}_fireIfMouseOutside(){!this._isMouseIn&&!this._suppressNextMouseOut&&this._onMouseOut.fire()}suppressPendingMouseOut(){this._isMouseIn||(this._suppressNextMouseOut=!0)}addElement(e){if(this._elements.includes(e))return C.None;this._elements.push(e);let t=new A;return t.add(L(e,B.MOUSE_OVER,()=>this._onTargetMouseOver())),t.add(L(e,B.MOUSE_LEAVE,()=>this._onTargetMouseLeave())),t.add(j(()=>{let t=this._elements.indexOf(e);t>=0&&this._elements.splice(t,1)})),t}},_c=class{constructor(e){this._element=e,this.targetElements=[this._element]}dispose(){}};function vc(e){let t=e;return typeof t==`object`&&`markdown`in t&&`markdownNotSupportedFallback`in t}var yc=class{constructor(e,t,n){this.hoverDelegate=e,this.target=t,this.fadeInAnimation=n}async update(e,t,n){if(this._cancellationTokenSource&&=(this._cancellationTokenSource.dispose(!0),void 0),this.isDisposed)return;let r;if(ge(e)||y(e)||e===void 0)r=e;else{this._cancellationTokenSource=new _s;let i=this._cancellationTokenSource.token,a;if(a=vc(e)?ie(e.markdown)?e.markdown(i).then(t=>t??e.markdownNotSupportedFallback):e.markdown??e.markdownNotSupportedFallback:e.element(i),a instanceof Promise?(this._hoverWidget||this.show(I(1762,`Loading...`),t,n),r=await a):r=a,this.isDisposed||i.isCancellationRequested)return}this.show(r,t,n)}show(e,t,n){let r=this._hoverWidget;if(this.hasContent(e)){let i={content:e,target:this.target,actions:n?.actions,linkHandler:n?.linkHandler,trapFocus:n?.trapFocus,appearance:{showPointer:this.hoverDelegate.placement===`element`,skipFadeInAnimation:!this.fadeInAnimation||!!r,showHoverHint:n?.appearance?.showHoverHint},position:{hoverPosition:2}};this._hoverWidget=this.hoverDelegate.showHover(i,t)}r?.dispose()}hasContent(e){return e?!fa(e)||!!e.value:!1}get isDisposed(){return this._hoverWidget?.isDisposed}dispose(){this._hoverWidget?.dispose(),this._cancellationTokenSource?.dispose(!0),this._cancellationTokenSource=void 0}},bc=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},xc=function(e,t){return function(n,r){t(n,r,e)}},Sc=3,Cc=class extends C{get _currentHover(){return this._hoverStack.at(-1)?.hover}get _currentHoverOptions(){return this._hoverStack.at(-1)?.options}_getContainingHoverIndex(e){let t=y(e)?[e]:e.targetElements;for(let e=this._hoverStack.length-1;e>=0;e--)for(let n of t)if(S(n,this._hoverStack[e].hover.domNode))return e;return-1}constructor(e,t,n,r,i,a){super(),this._instantiationService=e,this._configurationService=t,this._keybindingService=r,this._layoutService=i,this._accessibilityService=a,this._hoverStack=[],this._currentDelayedHoverWasShown=!1,this._delayedHovers=new Map,this._managedHovers=new Map,this._register(n.onDidShowContextMenu(()=>this.hideHover())),this._register(De.registerCommandAndKeybindingRule({id:`workbench.action.showHover`,weight:0,primary:Bi(2089,2087),handler:()=>{this._showAndFocusHoverForActiveElement()}}))}showInstantHover(e,t,n,r){let i=this._createHover(e,n);if(i)return this._showHover(i,e,t),i.hover}showDelayedHover(e,t){if(e.id===void 0&&(e.id=Tc(e.content)),!this._currentDelayedHover||this._currentDelayedHoverWasShown){if(this._currentHover?.isLocked&&this._getContainingHoverIndex(e.target)<0)return;if(wc(this._currentHoverOptions)===wc(e))return this._currentHover;if(this._currentHover&&!this._currentHover.isDisposed&&this._currentDelayedHoverGroupId!==void 0&&this._currentDelayedHoverGroupId===t?.groupId)return this.showInstantHover({...e,appearance:{...e.appearance,skipFadeInAnimation:!0}})}else if(this._currentDelayedHover&&wc(this._currentHoverOptions)===wc(e))return this._currentDelayedHover;let n=this._createHover(e,void 0);if(!n){this._currentDelayedHover=void 0,this._currentDelayedHoverWasShown=!1,this._currentDelayedHoverGroupId=void 0;return}this._currentDelayedHover=n.hover,this._currentDelayedHoverWasShown=!1,this._currentDelayedHoverGroupId=t?.groupId;let r=t?.reducedDelay?this._configurationService.getValue(`workbench.hover.reducedDelay`):this._configurationService.getValue(`workbench.hover.delay`);return Ma(r).then(()=>{n.hover&&!n.hover.isDisposed&&(this._currentDelayedHoverWasShown=!0,this._showHover(n,e))}),n.hover}setupDelayedHover(e,t,n){return this._setupDelayedHover(e,n=>{let r={...typeof t==`function`?t():t,target:e};return r.style===2&&n&&(r.target=jc(e,n)),r},n)}setupDelayedHoverAtMouse(e,t,n){return this._setupDelayedHover(e,n=>({...typeof t==`function`?t():t,target:n?jc(e,n):e}),n)}_setupDelayedHover(e,t,n){let r=new A;return r.add(L(e,B.MOUSE_OVER,e=>{this.showDelayedHover(t(e),{groupId:n?.groupId,reducedDelay:n?.reducedDelay})})),n?.setupKeyboardEvents&&r.add(L(e,B.KEY_DOWN,e=>{let n=new qi(e);(n.equals(10)||n.equals(3))&&this.showInstantHover(t(),!0)})),this._delayedHovers.set(e,{show:e=>{this.showInstantHover(t(),e)}}),r.add(j(()=>this._delayedHovers.delete(e))),r}_createHover(e,t){if(this._currentDelayedHover?.dispose(),this._currentDelayedHover=void 0,e.content===``)return;if(e.id===void 0&&(e.id=Tc(e.content)),this._getContainingHoverIndex(e.target)>=0){if(this._hoverStack.length>=Sc)return}else if(this._currentHover?.isLocked||wc(this._currentHoverOptions)===wc(e))return;this._lastHoverOptions=e;let n=e.trapFocus||this._accessibilityService.isScreenReaderOptimized(),r=ms(),i;t||n&&r&&(r.classList.contains(`monaco-hover`)||(i=r));let a=new A,o=this._instantiationService.createInstance(hc,e);if(e.persistence?.sticky&&(o.isLocked=!0),e.position?.hoverPosition&&!es(e.position.hoverPosition)&&(e.target={targetElements:y(e.target)?[e.target]:e.target.targetElements,x:e.position.hoverPosition.x+10}),o.onDispose(()=>{let e=this._hoverStack.findIndex(e=>e.hover===o);if(e>=0){let t=this._hoverStack[e];for(Ye(o.domNode)&&t.lastFocusedElementBeforeOpen&&t.lastFocusedElementBeforeOpen.focus();this._hoverStack.length>e+1;){let e=this._hoverStack.pop();e.contextView.dispose(),e.hover.dispose()}this._hoverStack.splice(e,1),t.contextView.dispose()}a.dispose()},void 0,a),!e.container){let t=y(e.target)?e.target:e.target.targetElements[0];e.container=this._layoutService.getContainer(R(t))}if(a.add(L(R(e.container).document,B.MOUSE_DOWN,e=>{S(e.target,o.domNode)||this._hideHoverAndDescendants(o)})),!e.persistence?.sticky){if(`targetElements`in e.target)for(let t of e.target.targetElements)a.add(L(t,B.CLICK,()=>this._hideHoverAndDescendants(o)));else a.add(L(e.target,B.CLICK,()=>this._hideHoverAndDescendants(o)));let t=ms();if(t){let n=R(t).document;a.add(L(t,B.KEY_DOWN,t=>this._keyDown(t,o,!!e.persistence?.hideOnKeyDown))),a.add(L(n,B.KEY_DOWN,t=>this._keyDown(t,o,!!e.persistence?.hideOnKeyDown))),a.add(L(t,B.KEY_UP,e=>this._keyUp(e,o))),a.add(L(n,B.KEY_UP,e=>this._keyUp(e,o)))}}if(`IntersectionObserver`in zn){let t=new IntersectionObserver(e=>this._intersectionChange(e,o),{threshold:0}),n=`targetElements`in e.target?e.target.targetElements[0]:e.target;t.observe(n),a.add(j(()=>t.disconnect()))}return{hover:o,lastFocusedElementBeforeOpen:i,store:a}}_showHover(e,t,n){let{hover:r,lastFocusedElementBeforeOpen:i,store:a}=e,o=this._getContainingHoverIndex(t.target),s=o>=0;if(!s)this._hideAllHovers();else{for(let e=this._hoverStack.length-1;e>o;e--)this._hoverStack[e].hover.dispose();this._hoverStack.length=o+1}if(s)for(let e=0;e<=o;e++)a.add(this._hoverStack[e].hover.addMouseTrackingElement(r.domNode));let c=t.container??this._layoutService.getContainer(R(y(t.target)?t.target:t.target.targetElements[0])),l=new li(c,1),u={hover:r,options:t,contextView:l,lastFocusedElementBeforeOpen:i};this._hoverStack.push(u);let d=new Oc(r,n,this._hoverStack.length);if(l.show(d),a.add(r.onRequestLayout(()=>l.layout())),n||t.persistence?.sticky){let e=R(c);a.add(L(e,B.RESIZE,()=>l.layout()))}if(t.onDidHide){let e=t.onDidHide;a.add(j(()=>e()))}t.onDidShow?.()}_hideHoverAndDescendants(e){let t=this._hoverStack.findIndex(t=>t.hover===e);if(!(t<0)){for(let e=this._hoverStack.length-1;e>=t;e--)this._hoverStack[e].hover.dispose();this._hoverStack.length=t}}_hideAllHovers(){for(let e=this._hoverStack.length-1;e>=0;e--)this._hoverStack[e].hover.dispose();this._hoverStack.length=0}hideHover(e){this._hoverStack.length!==0&&(e||!this._currentHover?.isLocked)&&this.doHideHover()}doHideHover(){let e=this._hoverStack.length;this._hoverStack[e-1]?.hover.dispose(),this._hoverStack.length=e-1}_intersectionChange(e,t){e[e.length-1].isIntersecting||t.dispose()}showAndFocusLastHover(){this._lastHoverOptions&&this.showInstantHover(this._lastHoverOptions,!0,!0)}_showAndFocusHoverForActiveElement(){let e=ms();for(;e;){let t=this._delayedHovers.get(e)??this._managedHovers.get(e);if(t){t.show(!0);return}e=e.parentElement}}_keyDown(e,t,n){if(e.key===`Alt`){for(let e of this._hoverStack)e.hover.isLocked=!0;return}let r=new qi(e);if(!(this._keybindingService.resolveKeyboardEvent(r).getSingleModifierDispatchChords().some(e=>!!e)||this._keybindingService.softDispatch(r,r.target).kind!==0)&&n&&(!this._currentHoverOptions?.trapFocus||e.key!==`Tab`)){let e=this._hoverStack.find(e=>e.hover===t);this._hideHoverAndDescendants(t),e?.lastFocusedElementBeforeOpen?.focus()}}_keyUp(e,t){if(e.key===`Alt`){for(let e of this._hoverStack)e.options.persistence?.sticky||(e.hover.isLocked=!1);if(!this._hoverStack.some(e=>e.hover.isMouseIn)){let e=this._hoverStack[this._hoverStack.length-1];this._hideAllHovers(),e?.lastFocusedElementBeforeOpen?.focus()}}}setupManagedHover(e,t,n,r){if(e.showNativeHover)return Dc(t,n);t.setAttribute(`custom-hover`,`true`),t.title!==``&&(console.warn(`HTML element already has a title attribute, which will conflict with the custom hover. Please remove the title attribute.`),t.title=``);let i,a,o=(t,n)=>{let r=a!==void 0;t&&(a?.dispose(),a=void 0),n&&(i?.dispose(),i=void 0),r&&(e.onDidHideHover?.(),a=void 0)},s=(i,o,s,c)=>new Qe(async()=>{(!a||a.isDisposed)&&(a=new yc(e,s||t,i>0),await a.update(typeof n==`function`?n():n,o,{...r,trapFocus:c}))},i),c=new A,l=!1;c.add(L(t,B.MOUSE_DOWN,()=>{l=!0,o(!0,!0)},!0)),c.add(L(t,B.MOUSE_UP,()=>{l=!1},!0)),c.add(L(t,B.MOUSE_LEAVE,e=>{l=!1,o(!1,e.fromElement===t)},!0)),c.add(L(t,B.MOUSE_OVER,r=>{if(i)return;let a=new A,c={targetElements:[t],dispose:()=>{}};(e.placement===void 0||e.placement===`mouse`)&&a.add(L(t,B.MOUSE_MOVE,e=>{c.x=e.x+10,kc(e,t)||o(!0,!0)},!0)),i=a,kc(r,t)&&a.add(s(typeof e.delay==`function`?e.delay(n):e.delay,!1,c))},!0)),Tt(t)||c.add(L(t,B.FOCUS,r=>{if(l||i||(a?.isDisposed&&(a=void 0),y(r.relatedTarget)&&r.relatedTarget.closest(`.monaco-hover`)||!r.relatedTarget)||!kc(r,t))return;let c={targetElements:[t],dispose:()=>{}},u=new A;u.add(L(t,B.BLUR,()=>o(!0,!0),!0)),u.add(s(typeof e.delay==`function`?e.delay(n):e.delay,!1,c)),i=u},!0));let u={show:e=>{o(!1,!0),s(0,e,void 0,e)},hide:()=>{o(!0,!0)},update:async(e,t)=>{n=e,await a?.update(n,void 0,t)},dispose:()=>{this._managedHovers.delete(t),c.dispose(),o(!0,!0)}};return this._managedHovers.set(t,u),u}showManagedHover(e){let t=this._managedHovers.get(e);t&&t.show(!0)}dispose(){this._managedHovers.forEach(e=>e.dispose()),super.dispose()}};Cc=bc([xc(0,P),xc(1,w),xc(2,vr),xc(3,na),xc(4,Bo),xc(5,Wi)],Cc);function wc(e){if(e!==void 0)return e?.id??e}function Tc(e){if(!y(e))return typeof e==`string`?e.toString():e.value}function Ec(e){let t=typeof e==`function`?e():e;if(ge(t))return zt(t);if(vc(t))return t.markdownNotSupportedFallback}function Dc(e,t){function n(t){t?e.setAttribute(`title`,t):e.removeAttribute(`title`)}return n(Ec(t)),{update:e=>n(Ec(e)),show:()=>{},hide:()=>{},dispose:()=>n(void 0)}}var Oc=class{get anchorPosition(){return this._hover.anchor}constructor(e,t=!1,n=1){this._hover=e,this._focus=t,this.layer=n}render(e){return this._hover.render(e),this._focus&&this._hover.focus(),this._hover}getAnchor(){return{x:this._hover.x,y:this._hover.y}}layout(){this._hover.layout()}};function kc(e,t){return y(e.target)&&Ac(e.target,t)===t}function Ac(e,t){for(t??=R(e).document.body;!e.hasAttribute(`custom-hover`)&&e!==t;)e=e.parentElement;return e}function jc(e,t){return{targetElements:[e],x:t.x+10}}D(Er,Cc,1),So((e,t)=>{let n=e.getColor(kt);n&&(t.addRule(`.monaco-hover.workbench-hover .hover-row:not(:first-child):not(:empty) { border-top: 1px solid ${n.transparent(.5)}; }`),t.addRule(`.monaco-hover.workbench-hover hr { border-top: 1px solid ${n.transparent(.5)}; }`))});var Mc=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Nc=function(e,t){return function(n,r){t(n,r,e)}};function Pc(e){return e.scheme===O.file?e.fsPath:e.path}var Fc=0,Ic=class{constructor(e,t,n,r,i,a,o){this.id=++Fc,this.type=0,this.actual=e,this.label=e.label,this.confirmBeforeUndo=e.confirmBeforeUndo||!1,this.resourceLabel=t,this.strResource=n,this.resourceLabels=[this.resourceLabel],this.strResources=[this.strResource],this.groupId=r,this.groupOrder=i,this.sourceId=a,this.sourceOrder=o,this.isValid=!0}setValid(e){this.isValid=e}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.isValid?` VALID`:`INVALID`}] ${this.actual.constructor.name} - ${this.actual}`}},Lc=class{constructor(e,t){this.resourceLabel=e,this.reason=t}},Rc=class{constructor(){this.elements=new Map}createMessage(){let e=[],t=[];for(let[,n]of this.elements)(n.reason===0?e:t).push(n.resourceLabel);let n=[];return e.length>0&&n.push(I(2099,`The following files have been closed and modified on disk: {0}.`,e.join(`, `))),t.length>0&&n.push(I(2100,`The following files have been modified in an incompatible way: {0}.`,t.join(`, `))),n.join(`
|
|
3
3
|
`)}get size(){return this.elements.size}has(e){return this.elements.has(e)}set(e,t){this.elements.set(e,t)}delete(e){return this.elements.delete(e)}},zc=class{constructor(e,t,n,r,i,a,o){this.id=++Fc,this.type=1,this.actual=e,this.label=e.label,this.confirmBeforeUndo=e.confirmBeforeUndo||!1,this.resourceLabels=t,this.strResources=n,this.groupId=r,this.groupOrder=i,this.sourceId=a,this.sourceOrder=o,this.removedResources=null,this.invalidatedResources=null}canSplit(){return typeof this.actual.split==`function`}removeResource(e,t,n){this.removedResources||=new Rc,this.removedResources.has(t)||this.removedResources.set(t,new Lc(e,n))}setValid(e,t,n){n?this.invalidatedResources&&(this.invalidatedResources.delete(t),this.invalidatedResources.size===0&&(this.invalidatedResources=null)):(this.invalidatedResources||=new Rc,this.invalidatedResources.has(t)||this.invalidatedResources.set(t,new Lc(e,0)))}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.invalidatedResources?`INVALID`:` VALID`}] ${this.actual.constructor.name} - ${this.actual}`}},Bc=class{constructor(e,t){this.resourceLabel=e,this.strResource=t,this._past=[],this._future=[],this.locked=!1,this.versionId=1}dispose(){for(let e of this._past)e.type===1&&e.removeResource(this.resourceLabel,this.strResource,0);for(let e of this._future)e.type===1&&e.removeResource(this.resourceLabel,this.strResource,0);this.versionId++}toString(){let e=[];e.push(`* ${this.strResource}:`);for(let t=0;t<this._past.length;t++)e.push(` * [UNDO] ${this._past[t]}`);for(let t=this._future.length-1;t>=0;t--)e.push(` * [REDO] ${this._future[t]}`);return e.join(`
|
|
4
4
|
`)}flushAllElements(){this._past=[],this._future=[],this.versionId++}_setElementValidFlag(e,t){e.type===1?e.setValid(this.resourceLabel,this.strResource,t):e.setValid(t)}setElementsValidFlag(e,t){for(let n of this._past)t(n.actual)&&this._setElementValidFlag(n,e);for(let n of this._future)t(n.actual)&&this._setElementValidFlag(n,e)}pushElement(e){for(let e of this._future)e.type===1&&e.removeResource(this.resourceLabel,this.strResource,1);this._future=[],this._past.push(e),this.versionId++}createSnapshot(e){let t=[];for(let e=0,n=this._past.length;e<n;e++)t.push(this._past[e].id);for(let e=this._future.length-1;e>=0;e--)t.push(this._future[e].id);return new ae(e,t)}restoreSnapshot(e){let t=e.elements.length,n=!0,r=0,i=-1;for(let a=0,o=this._past.length;a<o;a++,r++){let o=this._past[a];n&&(r>=t||o.id!==e.elements[r])&&(n=!1,i=a),!n&&o.type===1&&o.removeResource(this.resourceLabel,this.strResource,0)}let a=-1;for(let i=this._future.length-1;i>=0;i--,r++){let o=this._future[i];n&&(r>=t||o.id!==e.elements[r])&&(n=!1,a=i),!n&&o.type===1&&o.removeResource(this.resourceLabel,this.strResource,0)}i!==-1&&(this._past=this._past.slice(0,i)),a!==-1&&(this._future=this._future.slice(a+1)),this.versionId++}getElements(){let e=[],t=[];for(let t of this._past)e.push(t.actual);for(let e of this._future)t.push(e.actual);return{past:e,future:t}}getClosestPastElement(){return this._past.length===0?null:this._past[this._past.length-1]}getSecondClosestPastElement(){return this._past.length<2?null:this._past[this._past.length-2]}getClosestFutureElement(){return this._future.length===0?null:this._future[this._future.length-1]}hasPastElements(){return this._past.length>0}hasFutureElements(){return this._future.length>0}splitPastWorkspaceElement(e,t){for(let n=this._past.length-1;n>=0;n--)if(this._past[n]===e){t.has(this.strResource)?this._past[n]=t.get(this.strResource):this._past.splice(n,1);break}this.versionId++}splitFutureWorkspaceElement(e,t){for(let n=this._future.length-1;n>=0;n--)if(this._future[n]===e){t.has(this.strResource)?this._future[n]=t.get(this.strResource):this._future.splice(n,1);break}this.versionId++}moveBackward(e){this._past.pop(),this._future.push(e),this.versionId++}moveForward(e){this._future.pop(),this._past.push(e),this.versionId++}},Vc=class{constructor(e){this.editStacks=e,this._versionIds=[];for(let e=0,t=this.editStacks.length;e<t;e++)this._versionIds[e]=this.editStacks[e].versionId}isValid(){for(let e=0,t=this.editStacks.length;e<t;e++)if(this._versionIds[e]!==this.editStacks[e].versionId)return!1;return!0}},Hc=new Bc(``,``);Hc.locked=!0;var Uc=class{constructor(e,t){this._dialogService=e,this._notificationService=t,this._editStacks=new Map,this._uriComparisonKeyComputers=[]}getUriComparisonKey(e){for(let t of this._uriComparisonKeyComputers)if(t[0]===e.scheme)return t[1].getComparisonKey(e);return e.toString()}_print(e){console.log(`------------------------------------`),console.log(`AFTER ${e}: `);let t=[];for(let e of this._editStacks)t.push(e[1].toString());console.log(t.join(`
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{v as e}from"./reactivity.esm-bundler-DEJj9cFv.js";import{C as t,J as n,b as r,i,l as a}from"./runtime-core.esm-bundler-CDnVUfeZ.js";import{J as o,Q as s,S as c,X as l,Y as u,at as d,ct as f,et as p,h as m,nt as h,q as g,y as _}from"./QBtn-CZaBclNw.js";import{C as ee}from"./use-id-BIuaWKkB.js";import{k as v}from"./index-
|
|
1
|
+
import{v as e}from"./reactivity.esm-bundler-DEJj9cFv.js";import{C as t,J as n,b as r,i,l as a}from"./runtime-core.esm-bundler-CDnVUfeZ.js";import{J as o,Q as s,S as c,X as l,Y as u,at as d,ct as f,et as p,h as m,nt as h,q as g,y as _}from"./QBtn-CZaBclNw.js";import{C as ee}from"./use-id-BIuaWKkB.js";import{k as v}from"./index-VL3fI9a3.js";import{a as y,o as b}from"./QSelect-xd-AlGo_.js";import{u as x}from"./permissionModes-C-9Crj-c.js";import{p as S}from"./use-tours-CSVM_54K.js";x(`superpowers`);function C(e,t){let n=["1. Call `kobo__list_tasks` FIRST to inspect any pre-existing tasks (they may have been seeded from Notion, a template, or the CreatePage form).","2. If tasks already exist: DO NOT delete or recreate them from scratch. Read each one, judge whether it is atomic and implementable in one session with clear completion criteria. Improve them in place:\n - Use `kobo__update_task` to rename unclear titles, add completion criteria, or flip `is_acceptance_criterion` when needed.\n - Use `kobo__create_task` to SPLIT a task that is too large into smaller atomic pieces (keep the original only if it still makes sense, otherwise update it to one of the split pieces and create the rest).\n - Use `kobo__create_task` to ADD missing acceptance criteria or missing implementation steps the plan requires.","3. If no tasks exist:\n - If a plan file exists in `docs/superpowers/plans/` or similar, read it and derive the task list from it.\n - If no plan exists, ask the user what the workspace goal is and propose tasks accordingly.\n - Create the tasks via `kobo__create_task`. For each task, decide `is_acceptance_criterion` appropriately."],r=4;if(e.framework){let t=e.skill?`Use the \`${e.skill}\` skill for this task. `:``,i=e.prompt?`Additional guidance: ${e.prompt}`:``;n.push(`${r}. **E2E review**: walk the task list and identify which tasks produce user-visible behavior (UI flows, form submissions, page renders, etc.). For each one that warrants regression coverage, INSERT a follow-up sub-task with title prefixed \`[E2E] \` describing the test to write. Place it in \`sort_order\` directly after the parent task. Skip tasks that don't produce user-visible behavior (refactors, infra, internal services) and briefly justify your choices in chat. The project uses \`${e.framework}\`. ${t}${i}`.trim()),r++}return t.prompt&&(n.push(`${r}. **Finalization task**: create ONE task with title prefixed \`[FINAL] <descriptive title>\`. Place it at the END of the task list (sort_order = max + 1, AFTER any [E2E] tasks). The agent will execute this task using the project's finalization prompt — do NOT inline the prompt content into the task title or description.`),r++),n.push(`${r}. Call \`kobo__mark_auto_loop_ready\`. This will automatically start the auto-loop, which will pick up the tasks one by one in fresh sessions.`),n.join(`
|
|
2
2
|
`)}var w=C({framework:``,skill:``,prompt:``},{prompt:``}),T="Hard rules:\n- Do NOT touch any source file. No Edit, no Write, no Bash that changes the repo.\n- Do NOT run `kill`, `pkill`, `killall`, `pgrep -k`, or any process-killing command — you may tear down the Kōbō server itself or sibling dev servers.\n- Do NOT start implementation even if a plan is ready — auto-loop will drive that afterwards, one task per iteration.\n- If the user asks for changes, re-apply via MCP and re-check. Do NOT mark ready until they approve.",E=`Review your progress on the tasks and acceptance criteria. Use the kobo-tasks MCP server: call list_tasks() to check the current status, then update any tasks you have completed using mark_task_done(). Report what is done and what remains.
|
|
3
3
|
|
|
4
4
|
Then suggest concrete next actions. Format them exactly like this so I can click on them:
|
package/src/client/dist/pwa/assets/{engineFeatures-DVB2rklO.js → engineFeatures-CAVMDawq.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as e,ut as t}from"./reactivity.esm-bundler-DEJj9cFv.js";import{L as n,Y as r,_ as i,d as a,f as o,g as s,l as c,y as l}from"./runtime-core.esm-bundler-CDnVUfeZ.js";import{y as u}from"./QBtn-CZaBclNw.js";import{f as d,p as f,xt as p}from"./index-
|
|
1
|
+
import{j as e,ut as t}from"./reactivity.esm-bundler-DEJj9cFv.js";import{L as n,Y as r,_ as i,d as a,f as o,g as s,l as c,y as l}from"./runtime-core.esm-bundler-CDnVUfeZ.js";import{y as u}from"./QBtn-CZaBclNw.js";import{f as d,p as f,xt as p}from"./index-VL3fI9a3.js";import{t as m}from"./QTooltip-CwcCGSWq.js";import{t as h}from"./QChip-owciRuZu.js";var g=l({__name:`AutoLoopChip`,props:{workspace:{default:null}},setup(l){let u=l,{t:d}=p(),g=f(),_=c(()=>u.workspace??g.selectedWorkspace),v=c(()=>_.value?.id??null),y=c(()=>v.value?g.autoLoopStates[v.value]??null:null),b=c(()=>!!y.value?.auto_loop),x=c(()=>!!y.value?.auto_loop_ready),S=c(()=>v.value!==null&&g.selectedWorkspaceId===v.value),C=c(()=>S.value?g.tasks.filter(e=>e.status===`done`).length:y.value?.tasks_done??0),w=c(()=>S.value?g.tasks.length:y.value?.tasks_total??0);return(c,l)=>b.value&&!x.value?(n(),a(h,{key:0,dense:``,square:``,size:`sm`,color:`primary`,"text-color":`white`,icon:`hourglass_top`,class:`q-ml-sm`},{default:r(()=>[s(t(e(d)(`autoLoop.preparing`))+` `,1),i(m,null,{default:r(()=>[s(t(e(d)(`autoLoop.preparingTooltip`)),1)]),_:1})]),_:1})):b.value?(n(),a(h,{key:1,dense:``,square:``,size:`sm`,color:`amber-9`,"text-color":`white`,icon:`autorenew`,class:`q-ml-sm`},{default:r(()=>[s(t(e(d)(`autoLoop.progress`,{done:C.value,total:w.value})),1)]),_:1})):o(``,!0)}});function _(e,t){if(e===``)return 0;let n=e.toLowerCase(),r=t.toLowerCase(),i=0,a=0,o=-2;for(let e of n){let t=-1;for(let n=a;n<r.length;n++)if(r[n]===e){t=n;break}if(t===-1)return null;i+=t===o+1?5:1;let n=t>0?r[t-1]:``;(t===0||n===`/`||n===`-`||n===`_`||n===`.`)&&(i+=2),o=t,a=t+1}return i-t.length*.01}function v(e,t,n,r=_){if(n<=0)return[];let i=[];for(let a of t){let t=r(e,a);if(t===null||i.length===n&&t<=i[n-1].score)continue;let o=i.length;for(;o>0&&i[o-1].score<t;)o--;i.splice(o,0,{item:a,score:t}),i.length>n&&i.pop()}return i.map(e=>e.item)}var y=new Set([`not-found`,`not-purged`,`workspace-busy`,`worktree-not-owned`,`project-unavailable`,`path-conflict`,`branch-in-use`,`recovery-source-unavailable`,`git-failed`]),b=`https://github.com/loicngr/kobo/blob/develop/CONFIGURATION.md#restoring-a-purged-workspace`;function x(){let e=f(),t=u(),{t:n}=p();async function r(r){if(!e.restoringWorktreeIds.includes(r))try{await e.restoreWorktree(r),t.notify({type:`positive`,message:n(`workspacePage.worktreeRestoreSuccess`),position:`top`})}catch(e){let r=e instanceof d&&e.code&&y.has(e.code)?e.code:`git-failed`;t.notify({type:`negative`,message:n(`workspacePage.restoreError.${r}`),position:`top`,actions:[{label:n(`common.details`),handler:()=>window.open(b,`_blank`,`noopener,noreferrer`)}]})}}return{restoreWorktree:r}}var S={"claude-code":!0,codex:!0};function C(e){return e?S[e]??!0:!0}var w={"claude-code":!0,codex:!0};function T(e){return e?w[e]??!0:!0}var E={"claude-code":!0,codex:!0};function D(e){return e?E[e]??!1:!1}export{_ as a,x as i,T as n,v as o,C as r,g as s,D as t};
|
|
@@ -14,4 +14,4 @@ KOBO_PR_NUMBER — número de PR/MR en la forge resuelta (vacío si no hay
|
|
|
14
14
|
# O directamente con git (funciona en GitHub aunque la rama se haya borrado):
|
|
15
15
|
git fetch origin pull/[número-pr]/head:[nombre-rama]
|
|
16
16
|
git worktree add [ruta] [nombre-rama]`,"settings.purgeDocsRestoreFootnote":`GitHub mantiene la ref HEAD de la PR accesible mucho tiempo después de borrar la rama origen (meses / años). La autodetección corre en el watcher de 30 s — no hay que tocar la UI una vez que la carpeta vuelve a existir.`,"settings.purgeDocsPermissionsTitle":`Evitar errores de permisos durante el borrado`,"settings.purgeDocsPermissionsIntro":`Docker suele dejar archivos root-owned en node_modules / vendor dentro del worktree. Cuando Kōbō intenta borrarlos, te topas con EACCES / EPERM y el borrado falla. Dos formas de prevenirlo:`,"settings.purgeDocsPermissionsDocker":'Configurar tu contenedor para que se ejecute como tu usuario host — directiva USER en el Dockerfile, o `user: "${UID}:${GID}"` en docker-compose (con UID/GID exportados en tu shell).',"settings.purgeDocsPermissionsAcl":`Pre-establecer una ACL por defecto en la raíz de los worktrees — red de seguridad que funciona en la MAYORÍA de los casos (ext4/btrfs/xfs + bind mount Docker clásico). Cada archivo nuevo hereda entonces una entrada de acceso para tu usuario, además del propietario nominal:`,"settings.purgeDocsPermissionsAclCommand":` setfacl -d -m u:$(whoami):rwX [raíz-worktrees]`,"settings.purgeDocsPermissionsFootnote":"Limitaciones de las ACL: NO funcionan con volúmenes Docker con nombre (usa un bind mount), sistemas de archivos sin soporte ACL (NTFS, exFAT, tmpfs), SELinux estricto con `:Z`, o cuando Docker `userns-remap` está activado. La solución más fiable sigue siendo configurar el usuario dentro del contenedor (opción 1). Consejo: `rwX` (X mayúscula) solo añade el bit de ejecución en directorios y archivos ya ejecutables — más limpio que `rwx` que haría ejecutable cualquier archivo de texto.","settings.purgeDocsPermissionsRecoverTitle":`Desbloquear un worktree ya roto (archivos root-owned existentes)`,"settings.purgeDocsPermissionsRecoverIntro":`Si te encuentras con un worktree ya lleno de archivos root-owned (Docker ya ha ejecutado, vendor / node_modules están bloqueados), las ACL preventivas de arriba no son suficientes — hay que tratar los archivos EXISTENTES. Dos enfoques, a ejecutar dentro de la carpeta del worktree:`,"settings.purgeDocsPermissionsRecoverAclIntro":`Opción A — ACL recursiva (preserva la propiedad root para auditoría, solo añade acceso para tu usuario en paralelo):`,"settings.purgeDocsPermissionsRecoverAclCommand":`# establece ACL por defecto para archivos futuros Y otorga acceso a todo lo existente
|
|
17
|
-
sudo setfacl -Rd -m u:$(whoami):rwX . && sudo setfacl -R -m u:$(whoami):rwX .`,"settings.purgeDocsPermissionsRecoverChownIntro":`Opción B — Tomar la propiedad (más simple, pierde la huella "creado por root en el contenedor" pero rara vez importa):`,"settings.purgeDocsPermissionsRecoverChownCommand":` sudo chown -R $(whoami):$(whoami) .`,"settings.purgeDocsPermissionsRecoverFootnote":"Consejo: puedes ejecutar estos comandos directamente sobre la raíz de tus worktrees (ej. `~/.worktrees/`) para cubrir todos los workspaces existentes Y futuros de una sola vez. Una vez hecho, el borrado de Kōbō funcionará sin errores de permisos.","contextMenu.runSetup":`Ejecutar script de setup`,"contextMenu.exportEvents":`Exportar eventos (CSV)`,"contextMenu.dismissChangesRequested":`Marcar «Cambios solicitados» como visto`,"contextMenu.dismissCiFailure":`Marcar «CI en error» como visto`,"contextMenu.restoreChangesRequested":`Marcar «Cambios solicitados» como no visto`,"contextMenu.restoreCiFailure":`Marcar «CI en error» como no visto`,"contextMenu.exportingEvents":`Preparando la exportación…`,"contextMenu.exportEventsError":`Error al exportar los eventos`,"contextMenu.openNotion":`Abrir en Notion`,"contextMenu.openSentry":`Abrir en Sentry`,"contextMenu.openPr":`Abrir PR`,"contextMenu.ignorePrWatch":`Ignorar comprobaciones de PR`,"contextMenu.resumePrWatch":`Reanudar comprobaciones de PR`,"contextMenu.prWatchToggleFailed":`Error al actualizar las comprobaciones de PR`,"workspace.favorite":`Marcar como favorito`,"workspace.unfavorite":`Quitar de favoritos`,"workspace.showFavoritesOnly":`Mostrar solo favoritos`,"workspace.searchArchivedToggle":`Buscar también en workspaces archivados`,"workspace.descriptionPlaceholder":`Añadir una breve descripción`,"workspace.descriptionDialogHint":`Texto sin formato, máximo 200 caracteres. Dejar vacío para borrar.`,"workspace.descriptionTooLong":`La descripción debe tener 200 caracteres o menos.`,"workspace.descriptionSaveFailed":`No se pudo guardar la descripción.`,"workspace.agentDescriptionTooltip":`Estado en vivo mantenido por el agente`,"mcp.tool.setWorkspaceDescription":`Establece la breve descripción del workspace (≤ 200 caracteres).`,"tags.manage":`Gestionar etiquetas`,"tags.manageTitle":`Gestionar etiquetas del workspace`,"tags.noTagsDefined":`Sin etiquetas. Añádelas en Ajustes > Global > Etiquetas.`,"tags.orphanedHint":`{count} etiqueta(s) ya no están en el catálogo global. Desmárcalas para quitarlas.`,"settings.tagsTitle":`Etiquetas de workspace`,"settings.tagsHint":`Define las etiquetas asignables a los workspaces. Escribe para añadir, clic en la cruz para quitar.`,"settings.tagsLabel":`Etiquetas disponibles`,"settings.branchPrefixesTitle":`Prefijos de rama`,"settings.branchPrefixesHint":`Gestiona los prefijos de rama de Git disponibles en la página de creación de workspaces. El primero se preselecciona por defecto.`,"settings.branchPrefixesEmpty":`No hay ningún prefijo de rama definido. Añade al menos uno abajo.`,"settings.branchPrefixesAddLabel":`Nuevo prefijo`,"settings.branchPrefixesEditHint":`Haz clic para renombrar`,"settings.branchPrefixesMoveUp":`Subir`,"settings.branchPrefixesMoveDown":`Bajar`,"settings.worktreesTitle":`Worktrees Git`,"settings.worktreesHint":`Elige dónde se crean los worktrees de nuevos workspaces. Las rutas relativas se resuelven desde el proyecto; se admiten rutas absolutas Linux/macOS y Windows, $HOME, ~ y %USERPROFILE%.`,"settings.worktreesPathLabel":`Ruta de worktrees`,"settings.worktreesPathRequired":`La ruta de worktrees es obligatoria.`,"settings.worktreesPrefixByProject":`Prefijar los worktrees con el nombre del proyecto`,"settings.worktreesPrefixByProjectHint":`Coloca cada worktree en un subdirectorio con el nombre del proyecto para evitar colisiones cuando varios proyectos comparten la misma raíz.`,"settings.shareTitle":`Compartir configuración`,"settings.shareHint":`Exporta tus ajustes, plantillas y etiquetas en un bundle JSON. Las claves MCP no se incluyen por seguridad.`,"settings.exportConfig":`Exportar`,"settings.importConfig":`Importar`,"settings.exportSuccess":`Configuración exportada`,"settings.importSuccess":`Configuración importada`,"settings.importConfirmTitle":`Importar configuración`,"settings.importConfirmMessage":`Esto reemplazará tus ajustes, plantillas y etiquetas actuales. Las claves MCP se conservan. ¿Continuar?`,"settings.network.title":`Acceso de red`,"settings.network.hint":`Controla Kōbō desde otro dispositivo de tu LAN de confianza. Off = solo localhost. On = accesible en tu red, protegido por un token. Reinicia Kōbō tras cambiar.`,"settings.network.enable":`Activar acceso de red`,"settings.network.behindProxy":`Detrás de un reverse proxy`,"settings.network.behindProxyHint":`Kōbō ya no puede distinguir tu propia máquina de una solicitud reenviada — incluso localhost necesitará el token a partir de ahora. Actívalo solo si un reverse proxy (Traefik, nginx, Caddy…) está delante de Kōbō.`,"settings.network.restartRequired":`Reinicia Kōbō para aplicar la nueva dirección de bind.`,"settings.network.token":`Token de acceso`,"settings.network.copy":`Copiar`,"settings.network.copied":`Copiado`,"settings.network.regenerate":`Regenerar`,"settings.network.regenerateConfirm":`¿Regenerar el token? Los dispositivos conectados necesitarán el nuevo token.`,"settings.network.urls":`URLs de LAN`,"settings.network.scan":`Escanea para conectar`,"settings.network.noUrls":`No se detectó ninguna dirección LAN.`,"settings.network.loadFailed":`No se pudieron cargar los ajustes de acceso de red.`,"settings.network.updateFailed":`No se pudieron actualizar los ajustes de acceso de red.`,"settings.unsavedChanges.title":`Cambios sin guardar`,"settings.unsavedChanges.message":`Este proyecto tiene cambios sin guardar. Cambiar de proyecto los descartará.`,"settings.unsavedChanges.discard":`Descartar y cambiar`,"settings.unsavedChanges.cancel":`Cancelar`,"settings.loadFailed":`No se pudieron cargar los ajustes`,"settings.loadFailedHint":`Guardar está desactivado: el formulario muestra valores por defecto y escribirlos sobrescribiría tu configuración real.`,"health.title":`Salud`,"health.tooltip":`Estado del sistema`,"changelog.title":`Changelog`,"changelog.tooltip":`Novedades de Kōbō`,"changelog.empty":`Ningún changelog disponible.`,"changelog.current":`actual`,"changelog.currentVersion":`Versión actual: v{version}`,"health.envTitle":`Entorno`,"health.version":`Versión`,"health.koboHome":`Kōbō home`,"health.dbTitle":`Base de datos`,"health.dbPath":`Ruta`,"health.dbSize":`Tamaño`,"health.schemaVersion":`Versión del esquema`,"health.settingsSchemaVersion":`Esquema de ajustes`,"health.runtimesTitle":`Motores de agente`,"health.claudeCliTitle":`Claude Code`,"health.claudeCliMissing":`claude no encontrado en PATH`,"health.codexCliTitle":`OpenAI Codex`,"health.codexCliMissing":`binario codex no resoluble`,"health.forgeCliTitle":`CLI de forge (gh / glab)`,"health.forgeCliMissing":`No se encontró ni gh ni glab — pull requests y vigilancia de CI no disponibles`,"health.workspacesTitle":`Workspaces`,"health.workspacesCount":`{total} en total, {archived} archivados`,"health.worktreesMissing":`{count} worktree(s) faltan en el disco`,"health.sessionsTitle":`Sesiones de agente`,"health.sessionsOrphaned":`{n} sesión/sesiones huérfana(s) en ejecución`,"health.integrationsTitle":`Integraciones`,"health.integrationConfigured":`configurada`,"health.integrationMissing":`sin configurar`,"health.integrationDisabled":`desactivada`,"settings.integrationEnabled":`Activar integración`,"health.activeTitle":`Estado activo`,"health.activeQuotaBackoffs":`Quota backoffs pendientes`,"health.activeWakeups":`Despertares programados`,"health.activeAutoLoop":`Auto-loop en ejecución`,"health.activeAgentSessions":`Sesiones de agente activas`,"health.activeDevServers":`Servidores de desarrollo activos`,"health.noneActive":`Ninguno.`,"health.quotaResumeAt":`reanuda a las {time}`,"health.wakeupAt":`despierta a las {time}`,"health.startedAgo":`iniciada hace {time}`,"health.autoLoopReady":`listo, iterando`,"health.autoLoopGrooming":`grooming en curso`,"session.started":`Sesión iniciada`,"session.ended":`Sesión finalizada`,"session.compacted":`Contexto compactado`,"session.endedCompleted":`Turno finalizado: envía un mensaje para continuar`,"session.endedKilled":`Sesión detenida`,"session.endedError":`La sesión terminó con un error`,"session.endedWatchdog":`Sesión cerrada a la fuerza tras un periodo de inactividad`,"tool.running":`Ejecutando...`,"activity.raw_lines":`Líneas de salida brutas ({n})`,"activity.loading_older":`Cargando mensajes anteriores…`,"activity.compacting":`Compactando el contexto…`,"activity.prev_user_message":`Mensaje anterior del usuario`,"activity.scroll_to_bottom":`Desplazar al final`,"activity.empty":`Nada todavía`,"activity.emptyHint":`La salida del agente aparecerá aquí en cuanto arranque una sesión.`,"activity.a11y.region":`Anuncios de actividad del agente`,"activity.a11y.agentSaid":`Agente: {text}`,"activity.a11y.toolStarted":`Herramienta {name} iniciada`,"activity.a11y.toolFinished":`Herramienta {name} finalizada`,"activity.a11y.toolFailed":`Herramienta {name} falló`,"chat.systemPrompt":`Prompt del sistema`,"chat.agent":`Agente`,"chat.cleanupScript":`Script de limpieza`,"chat.archiveScript":`Script de archivado`,"chat.setupScript":`Script de setup`,"chat.hookScript":`Hook {event}`,"chat.scriptDone":`Hecho`,"chat.scriptComplete":`[{phase}] Completado`,"chat.scriptError":`[{phase}] Error: {message}`,"chat.unknownError":`desconocido`,"chat.you":`Tú`,"chat.session":`Sesión`,"chat.nActions":`{n} acción | {n} acciones`,"chat.lastUpdatedAt":`Última actualización a las {time}`,"chat.scrollToTurnTop":`Desplazar al inicio del mensaje`,"migration.backing_up":`Haciendo copia de seguridad de la base de datos…`,"migration.running":`Migrando datos del agente — {processed}/{total}`,"migration.error":`La migración falló`,"migration.backup_location":`Se guardó una copia de seguridad en {path}. Reinicia Kōbō para reintentar.`,"migration.retry":`Reinicia Kōbō para reintentar.`,"engine.select":`Motor`,"engine.model":`Modelo`,"engine.effort":`Esfuerzo de razonamiento`,"wakeup.scheduledIn":`Próximo despertar en {n}s`,"wakeup.scheduledAt":`Próximo despertar a las {time}`,"wakeup.firing":`Despertando...`,"wakeup.reason":`Razón: {reason}`,"wakeup.cancel":`Cancelar este despertar`,"wakeup.pendingIndicator":`Despertar programado`,"cron.pendingIndicator":`{n} cron(s) programado(s)`,"schedule.tabLabel":`Programación`,"schedule.panelTitle":`Automatización`,"schedule.panelDescription":`Despertar este workspace más tarde o ejecutar instrucciones según una programación.`,"schedule.activeTitle":`Programaciones activas`,"schedule.emptyTitle":`Nada programado`,"schedule.emptyDescription":`Crea un wakeup puntual o una tarea recurrente abajo.`,"schedule.cancelWakeup":`Cancelar este wakeup`,"schedule.cancelCron":`Eliminar esta tarea recurrente`,"schedule.createTitle":`Crear una programación`,"schedule.createDescription":`Elige cuándo y cómo debe ejecutarse el agente.`,"schedule.typeWakeup":`Wakeup puntual`,"schedule.typeRecurring":`Tarea recurrente`,"schedule.wakeupDescription":`Ejecutar el prompt una vez después de un retraso.`,"schedule.cronDescription":`Ejecutar el prompt periódicamente con una frecuencia fija.`,"schedule.promptHint":`Instrucciones que se enviarán al agente`,"schedule.frequencyTitle":`Frecuencia`,"schedule.advancedDescription":`Usar una expresión cron sin procesar`,"schedule.cronExpressionLabel":`Expresión cron`,"schedule.sessionModeTitle":`Sesión de ejecución`,"schedule.modeResume":`Reanudar sesión`,"schedule.oneShotHint":`Eliminar esta programación después de su primera ejecución.`,"schedule.wakeupTitle":`Wakeup pendiente`,"schedule.cronsTitle":`Programaciones recurrentes`,"schedule.noWakeup":`Sin wakeup programado`,"schedule.noCrons":`Sin cron programado`,"schedule.nextFireAt":`próximo a las {time}`,"schedule.lastFiredAt":`último hace {time}`,"schedule.addCronTitle":`Añadir una tarea recurrente`,"schedule.addWakeupTitle":`Programar un wakeup`,"schedule.every":`Cada`,"schedule.unitMinutes":`minutos`,"schedule.unitHours":`horas`,"schedule.unitDays":`días`,"schedule.daysDriftWarning":`El intervalo puede reducirse a 1 día a fin de mes (limitación de cron).`,"schedule.advancedExpression":`Expresión avanzada (opcional)`,"schedule.advancedHint":`Cron sin procesar (p. ej. */15 * * * *) o {'@'}hourly/{'@'}daily — anula el selector si se rellena.`,"schedule.promptLabel":`Prompt`,"schedule.labelOptional":`Etiqueta (opcional)`,"schedule.delayMinutes":`Retraso (minutos)`,"schedule.modeFresh":`Nueva sesión`,"schedule.oneShot":`Ejecutar solo una vez`,"schedule.addCronBtn":`Añadir cron`,"schedule.addWakeupBtn":`Programar wakeup`,"schedule.cronCreated":`Tarea recurrente añadida`,"schedule.wakeupCreated":`Wakeup programado`,"askUserQuestion.title":`El agente hace una pregunta`,"askUserQuestion.submit":`Enviar respuesta`,"askUserQuestion.multiSelectHint":`Selecciona una o más opciones`,"askUserQuestion.otherOption":`Otro`,"askUserQuestion.otherOptionHint":`especifíquelo en su próximo mensaje`,"askUserQuestion.freeFormLabel":`Especifique su respuesta`,"askUserQuestion.freeFormHint":`Esta respuesta se enviará directamente al agente.`,"askUserQuestion.noPending":`Ninguna pregunta pendiente`,"askUserQuestion.next":`Siguiente`,"askUserQuestion.previous":`Anterior`,"askUserQuestion.cancel":`Cancelar`,"askUserQuestion.cancelTooltip":`Saltar esta pregunta — el agente continuará sin respuesta`,"askUserQuestion.collapse":`Contraer el panel de pregunta`,"askUserQuestion.expand":`Expandir el panel de pregunta`,"permissionRequest.title":`El agente quiere usar una herramienta`,"permissionRequest.allow":`Permitir`,"permissionRequest.allowOnce":`Permitir una vez`,"permissionRequest.allowTurn":`Permitir este turno`,"permissionRequest.allowOperation":`Permitir siempre esta operación`,"permissionRequest.allowTool":`Permitir siempre esta herramienta`,"permissionRequest.deny":`Denegar`,"permissionRequest.tool":`Herramienta`,"permissionRequest.input":`Entrada`,"permissionRequest.rawInput":`Detalles técnicos`,"permissionRequest.collapse":`Contraer el panel de permisos`,"permissionRequest.expand":`Expandir el panel de permisos`,"permissionRequest.denied":`denegado por el usuario`,"workspaceStatus.created":`creado`,"workspaceStatus.extracting":`extracción`,"workspaceStatus.brainstorming":`brainstorming`,"workspaceStatus.executing":`en curso`,"workspaceStatus.awaitingUser":`esperando tu respuesta`,"workspaceStatus.completed":`completado`,"workspaceStatus.idle":`inactivo`,"workspaceStatus.error":`error`,"workspaceStatus.quota":`cuota alcanzada`,"workspaceStatus.retrying":`reanudación automática`,"workspaceList.prOpen":`#{n} — Pull request abierta`,"workspaceList.prWatchDisabledIndicator":`Comprobaciones de PR ignoradas para este workspace`,"workspaceList.prChangesRequested":`#{n} — Cambios solicitados`,"workspaceList.attentionCiFailed":`CI fallida`,"workspaceList.attentionChangesRequested":`Cambios solicitados`,"workspaceList.attentionReadyToMerge":`Listo para merge`,"autoLoop.toggle":`Auto-loop`,"autoLoop.start":`Iniciar auto-loop`,"autoLoop.prepare":`Preparar para auto-loop`,"autoLoop.reprepare":`Volver a preparar para auto-loop`,"autoLoop.reprepareTooltip":`Volver a ejecutar la fase de grooming para añadir o refrescar tareas antes de reanudar el bucle`,"autoLoop.prepareBusy":`Espera a que el agente termine antes de preparar`,"autoLoop.forceReady":`Sé lo que hago — omitir preparación`,"autoLoop.forceReadyConfirm":`¿Omitir la preparación y marcar auto-loop listo? El loop puede quedarse bloqueado si las tareas no son atómicas.`,"autoLoop.stop":`Detener auto-loop`,"autoLoop.notReady":`Ejecute primero 'Preparar para auto-loop'`,"autoLoop.noTasks":`Añada tareas primero`,"autoLoop.progress":`Auto-loop · {done}/{total} tareas`,"autoLoop.preparing":`Auto-loop · preparando`,"autoLoop.preparingTooltip":`Preparación en curso — el agente está creando / revisando tareas. El bucle arrancará cuando llame a mark_auto_loop_ready.`,"autoLoop.running":`Auto-loop en ejecución`,"autoLoop.startInMode":`Iniciar en modo auto-loop`,"autoLoop.brainstormModelPrefix":`Brainstorm:`,"autoLoop.brainstormModelTooltip":`Modelo usado solo para la sesión de brainstorming inicial — cada tarea posterior usa el modelo elegido arriba`,"autoLoop.brainstormReasoningPrefix":`Brainstorm:`,"autoLoop.brainstormReasoningTooltip":`Nivel de razonamiento usado solo para la sesión de brainstorming inicial`,"autoLoop.executionModelPrefix":`Loop:`,"autoLoop.executionModelTooltip":`Modelo usado para cada tarea del auto-loop tras la sesión de brainstorming inicial`,"autoLoop.sessionMode.perTask":`Nueva sesión por tarea`,"autoLoop.sessionMode.label":`Sesión:`,"autoLoop.sessionMode.perTaskTooltip":`Cada tarea inicia una sesión nueva de Claude Code sin memoria de tareas anteriores`,"autoLoop.sessionMode.continuous":`Sesión continua`,"autoLoop.sessionMode.continuousTooltip":`Todas las tareas se encadenan en la misma sesión — el agente conserva todo el contexto, pero la sesión se alarga con el tiempo`,"koboCommand.prepAutoloopDesc":`Preparar tareas para modo auto-loop (atomicidad)`,"staleSessionBanner.title":`Auto-loop en curso`,"staleSessionBanner.message":`Estás viendo una sesión anterior — el agente está trabajando en la más reciente.`,"staleSessionBanner.staleTitle":`Sesión anterior`,"staleSessionBanner.staleMessage":`Estás viendo una sesión anterior — los mensajes que envíes irán a esta sesión, no a la más reciente.`,"staleSessionBanner.switchToCurrent":`Cambiar a la actual`,"network.login.title":`Acceso de red`,"network.login.description":`Este Kōbō requiere un token para controlarse desde la red. Pega el token que aparece en Ajustes en la máquina anfitriona.`,"network.login.tokenLabel":`Token`,"network.login.tokenPlaceholder":`Pega tu token`,"network.login.connect":`Conectar`,"network.login.invalid":`Token no válido`,"network.login.serverError":`Error del servidor — inténtalo de nuevo.`,"network.login.unreachable":`Kōbō no es accesible — comprueba tu conexión.`,"layout.toggleWorkspaces":`Mostrar/ocultar el panel de espacios`,"layout.togglePanel":`Mostrar/ocultar el panel lateral`,"unsaved.title":`¿Salir sin guardar?`,"unsaved.message":`Tienes cambios sin guardar. Salir de esta página los descarta.`,"unsaved.leave":`Salir`,"unsaved.stay":`Quedarme`,"prCheckout.staleRetriesExhausted":`El estado del repositorio siguió cambiando mientras intentábamos aplicar tus decisiones. Cierra este diálogo e inténtalo de nuevo desde el selector de pull requests.`,"prPicker.title":`Importar desde una pull request`,"prPicker.filterAll":`Todas`,"prPicker.filterMine":`Las mías`,"prPicker.filterReviewRequested":`Revisión solicitada`,"prPicker.searchPlaceholder":`Buscar pull requests…`,"prPicker.loadMore":`Cargar más`,"prPicker.empty":`Ninguna pull request abierta coincide.`,"prPicker.forkNotSupported":`Esta PR proviene de un fork; Kōbō no puede hacerle checkout.`,"prPicker.loadFailed":`Error al cargar las pull requests.`,"prPicker.badge.workspaceExists":`Ya abierta en Kōbō`,"prPicker.badge.worktreePresent":`Worktree presente`,"prPicker.badge.localBranch":`Branch local`,"prPicker.badge.new":`Nueva`,"prPicker.badge.draft":`Borrador`,"prCheckout.title":`Preparar la worktree`,"prCheckout.apply":`Aplicar`,"prCheckout.cancel":`Cancelar`,"prCheckout.retry":`Reintentar`,"prCheckout.diagnoseFailed":`Error al diagnosticar la pull request.`,"prCheckout.resolveFailed":`Error al resolver el checkout de la pull request.`,"prCheckout.path.required":`Introduce una ruta de worktree que aún no exista.`,"prCheckout.workspace.restoreNotAvailable":"Restaurar un workspace purgado no está disponible todavía desde aquí. Vuelve a crear su carpeta de worktree en disco (por ejemplo, con `git worktree add`) y Kōbō la reconectará automáticamente en unos 30 segundos.","prCheckout.staleReloaded":`El repositorio cambió; el diagnóstico se ha actualizado.`,"prCheckout.step.blocked":`No se puede continuar`,"prCheckout.step.path":`Ubicación de la worktree`,"prCheckout.step.workspace":`Workspace existente`,"prCheckout.step.worktree":`Worktree existente`,"prCheckout.step.operation":`Operación git en curso`,"prCheckout.step.changes":`Cambios sin commitear`,"prCheckout.step.divergence":`Branch local vs origin`,"prCheckout.workspace.activeHint":`Un workspace llamado "{name}" ya sigue este branch.`,"prCheckout.workspace.open":`Abrir ese workspace`,"prCheckout.workspace.continue":`Continuar por otra ruta`,"prCheckout.workspace.unarchive":`Desarchivar y abrirlo`,"prCheckout.workspace.restore":`Recrear su worktree`,"prCheckout.worktree.orphanHint":`Ya existe una worktree en este branch en {path}.`,"prCheckout.worktree.attach":`Adjuntarla`,"prCheckout.worktree.branchInUse":`Esta rama ya está extraída. Adjunte su worktree existente.`,"prCheckout.worktree.createElsewhere":`Crear otra en otro lugar`,"prCheckout.operation.hint":`Hay un {operation} en curso en esa worktree.`,"prCheckout.operation.abort":`Abortarlo`,"prCheckout.operation.cancel":`Dejarlo tal cual y detenerse aquí`,"prCheckout.changes.hint":`{modified} modificado(s), {staged} en stage, {untracked} sin seguimiento.`,"prCheckout.changes.stash":`Guardarlos en un stash`,"prCheckout.changes.commit":`Commitearlos`,"prCheckout.changes.discard":`Descartarlos (se conservan en un stash etiquetado)`,"prCheckout.changes.keepResetConflict":`Conservar cambios locales es incompatible con un reset. Usa stash o commit, o conserva la rama.`,"prCheckout.changes.keep":`Dejarlos como están`,"prCheckout.divergence.behindHint":`Tu branch está {behind} commit(s) por detrás de origin.`,"prCheckout.divergence.aheadHint":`Tu branch tiene {ahead} commit(s) sin pushear.`,"prCheckout.divergence.divergedHint":`{ahead} por delante, {behind} por detrás de origin.`,"prCheckout.divergence.fastForward":`Fast-forward hacia origin`,"prCheckout.divergence.rebase":`Rebase sobre origin`,"prCheckout.divergence.resetHard":`Restablecer a origin (se crea antes un branch de respaldo)`,"prCheckout.divergence.keep":`Mantener el estado local`,"prCheckout.blocked.forgeUnavailable":`Falta el CLI de la forge o no está autenticado.`,"prCheckout.blocked.forkPr":`Esta PR proviene de un fork; Kōbō no puede hacerle checkout.`,"prCheckout.blocked.headBranchDeleted":`El branch ya no existe en el remote.`,"prCheckout.blocked.indexLock":`Hay otro proceso git en curso (index.lock está presente).`,"prCheckout.blocked.pathOccupied":`{path} ya existe y no es una worktree.`,"prCheckout.blocked.worktreeOtherBranch":`{path} es una worktree en otro branch ({branch}).`,"prCheckout.blocked.noCommonAncestor":`Ya existe un branch local llamado {branch} con un historial sin relación.`,"split.title":`Vista doble de workspaces`,"split.open":`Abrir en paralelo`,"split.openBeside":`Abrir al lado`,"split.close":`Cerrar vista doble`,"split.left":`Workspace izquierdo`,"split.right":`Workspace derecho`,"split.choose":`Elegir un workspace`,"split.recipient":`Enviar a: {name}`,"absence.title":`Desde tu última visita`,"absence.pending":`Cambios por revisar`,"absence.retention":`Actividad importante de los últimos 30 días, registrada desde la instalación de esta función. Las visitas se guardan solo en este navegador.`,"absence.since":`Desde {date}`,"absence.error":`No se pudo cargar la actividad.`,"absence.retry":`Reintentar`,"absence.empty":`No hay actividad nueva.`,"absence.more":`Cargar más`,"absence.markRead":`Marcar los eventos mostrados como leídos`,"absence.kind.question":`Pregunta realizada`,"absence.kind.permission":`Aprobación solicitada`,"absence.kind.completed":`Sesión finalizada`,"absence.kind.error":`Error del agente`,"absence.kind.pr-merged":`PR fusionada`,"absence.kind.pr-approved":`PR aprobada`,"absence.kind.pr-changes-requested":`Cambios solicitados`,"absence.kind.pr-ci-failed":`CI fallida`,"absence.kind.pr-ci-recovered":`CI recuperada`,"absence.kind.pr-merge-conflict":`Conflicto de merge`,"absence.kind.pr-ready-to-merge":`PR lista para merge`,"absence.kind.archived":`Workspace archivado`,"absence.kind.purged":`Worktree purgado`,"absence.kind.restored":`Worktree restaurado`,"tours.split.controls.title":`Dos workspaces independientes`,"tours.split.controls.description":`Elige un workspace por panel. Ajusta la separación; cada conversación conserva su destinatario y sus paneles.`,"tours.home.sort.title":`Ordenar workspaces`,"tours.home.sort.description":`Elige el orden y la dirección dentro de cada grupo. Tu selección se guarda.`,"tours.home.activity.title":`Revisar la actividad tras una ausencia`,"tours.home.activity.description":`Al pie del panel izquierdo encontrarás preguntas, sesiones finalizadas, errores y cambios de PR desde tu última visita.`};export{e as default};
|
|
17
|
+
sudo setfacl -Rd -m u:$(whoami):rwX . && sudo setfacl -R -m u:$(whoami):rwX .`,"settings.purgeDocsPermissionsRecoverChownIntro":`Opción B — Tomar la propiedad (más simple, pierde la huella "creado por root en el contenedor" pero rara vez importa):`,"settings.purgeDocsPermissionsRecoverChownCommand":` sudo chown -R $(whoami):$(whoami) .`,"settings.purgeDocsPermissionsRecoverFootnote":"Consejo: puedes ejecutar estos comandos directamente sobre la raíz de tus worktrees (ej. `~/.worktrees/`) para cubrir todos los workspaces existentes Y futuros de una sola vez. Una vez hecho, el borrado de Kōbō funcionará sin errores de permisos.","contextMenu.runSetup":`Ejecutar script de setup`,"contextMenu.exportEvents":`Exportar eventos (CSV)`,"contextMenu.dismissChangesRequested":`Marcar «Cambios solicitados» como visto`,"contextMenu.dismissCiFailure":`Marcar «CI en error» como visto`,"contextMenu.restoreChangesRequested":`Marcar «Cambios solicitados» como no visto`,"contextMenu.restoreCiFailure":`Marcar «CI en error» como no visto`,"contextMenu.exportingEvents":`Preparando la exportación…`,"contextMenu.exportEventsError":`Error al exportar los eventos`,"contextMenu.openNotion":`Abrir en Notion`,"contextMenu.openSentry":`Abrir en Sentry`,"contextMenu.openPr":`Abrir PR`,"contextMenu.ignorePrWatch":`Ignorar comprobaciones de PR`,"contextMenu.resumePrWatch":`Reanudar comprobaciones de PR`,"contextMenu.prWatchToggleFailed":`Error al actualizar las comprobaciones de PR`,"workspace.favorite":`Marcar como favorito`,"workspace.unfavorite":`Quitar de favoritos`,"workspace.showFavoritesOnly":`Mostrar solo favoritos`,"workspace.searchArchivedToggle":`Buscar también en workspaces archivados`,"workspace.descriptionPlaceholder":`Añadir una breve descripción`,"workspace.descriptionDialogHint":`Texto sin formato, máximo 200 caracteres. Dejar vacío para borrar.`,"workspace.descriptionTooLong":`La descripción debe tener 200 caracteres o menos.`,"workspace.descriptionSaveFailed":`No se pudo guardar la descripción.`,"workspace.agentDescriptionTooltip":`Estado en vivo mantenido por el agente`,"mcp.tool.setWorkspaceDescription":`Establece la breve descripción del workspace (≤ 200 caracteres).`,"tags.manage":`Gestionar etiquetas`,"tags.manageTitle":`Gestionar etiquetas del workspace`,"tags.noTagsDefined":`Sin etiquetas. Añádelas en Ajustes > Global > Etiquetas.`,"tags.orphanedHint":`{count} etiqueta(s) ya no están en el catálogo global. Desmárcalas para quitarlas.`,"settings.tagsTitle":`Etiquetas de workspace`,"settings.tagsHint":`Define las etiquetas asignables a los workspaces. Escribe para añadir, clic en la cruz para quitar.`,"settings.tagsLabel":`Etiquetas disponibles`,"settings.branchPrefixesTitle":`Prefijos de rama`,"settings.branchPrefixesHint":`Gestiona los prefijos de rama de Git disponibles en la página de creación de workspaces. El primero se preselecciona por defecto.`,"settings.branchPrefixesEmpty":`No hay ningún prefijo de rama definido. Añade al menos uno abajo.`,"settings.branchPrefixesAddLabel":`Nuevo prefijo`,"settings.branchPrefixesEditHint":`Haz clic para renombrar`,"settings.branchPrefixesMoveUp":`Subir`,"settings.branchPrefixesMoveDown":`Bajar`,"settings.worktreesTitle":`Worktrees Git`,"settings.worktreesHint":`Elige dónde se crean los worktrees de nuevos workspaces. Las rutas relativas se resuelven desde el proyecto; se admiten rutas absolutas Linux/macOS y Windows, $HOME, ~ y %USERPROFILE%.`,"settings.worktreesPathLabel":`Ruta de worktrees`,"settings.worktreesPathRequired":`La ruta de worktrees es obligatoria.`,"settings.worktreesPrefixByProject":`Prefijar los worktrees con el nombre del proyecto`,"settings.worktreesPrefixByProjectHint":`Coloca cada worktree en un subdirectorio con el nombre del proyecto para evitar colisiones cuando varios proyectos comparten la misma raíz.`,"settings.shareTitle":`Compartir configuración`,"settings.shareHint":`Exporta tus ajustes, plantillas y etiquetas en un bundle JSON. Las claves MCP no se incluyen por seguridad.`,"settings.exportConfig":`Exportar`,"settings.importConfig":`Importar`,"settings.exportSuccess":`Configuración exportada`,"settings.importSuccess":`Configuración importada`,"settings.importConfirmTitle":`Importar configuración`,"settings.importConfirmMessage":`Esto reemplazará tus ajustes, plantillas y etiquetas actuales. Las claves MCP se conservan. ¿Continuar?`,"settings.network.title":`Acceso de red`,"settings.network.hint":`Controla Kōbō desde otro dispositivo de tu LAN de confianza. Off = solo localhost. On = accesible en tu red, protegido por un token. Reinicia Kōbō tras cambiar.`,"settings.network.enable":`Activar acceso de red`,"settings.network.behindProxy":`Detrás de un reverse proxy`,"settings.network.behindProxyHint":`Kōbō ya no puede distinguir tu propia máquina de una solicitud reenviada — incluso localhost necesitará el token a partir de ahora. Actívalo solo si un reverse proxy (Traefik, nginx, Caddy…) está delante de Kōbō.`,"settings.network.restartRequired":`Reinicia Kōbō para aplicar la nueva dirección de bind.`,"settings.network.token":`Token de acceso`,"settings.network.copy":`Copiar`,"settings.network.copied":`Copiado`,"settings.network.regenerate":`Regenerar`,"settings.network.regenerateConfirm":`¿Regenerar el token? Los dispositivos conectados necesitarán el nuevo token.`,"settings.network.urls":`URLs de LAN`,"settings.network.scan":`Escanea para conectar`,"settings.network.noUrls":`No se detectó ninguna dirección LAN.`,"settings.network.loadFailed":`No se pudieron cargar los ajustes de acceso de red.`,"settings.network.updateFailed":`No se pudieron actualizar los ajustes de acceso de red.`,"settings.unsavedChanges.title":`Cambios sin guardar`,"settings.unsavedChanges.message":`Este proyecto tiene cambios sin guardar. Cambiar de proyecto los descartará.`,"settings.unsavedChanges.discard":`Descartar y cambiar`,"settings.unsavedChanges.cancel":`Cancelar`,"settings.loadFailed":`No se pudieron cargar los ajustes`,"settings.loadFailedHint":`Guardar está desactivado: el formulario muestra valores por defecto y escribirlos sobrescribiría tu configuración real.`,"health.title":`Salud`,"health.tooltip":`Estado del sistema`,"changelog.title":`Changelog`,"changelog.tooltip":`Novedades de Kōbō`,"changelog.empty":`Ningún changelog disponible.`,"changelog.current":`actual`,"changelog.currentVersion":`Versión actual: v{version}`,"health.envTitle":`Entorno`,"health.version":`Versión`,"health.koboHome":`Kōbō home`,"health.dbTitle":`Base de datos`,"health.dbPath":`Ruta`,"health.dbSize":`Tamaño`,"health.schemaVersion":`Versión del esquema`,"health.settingsSchemaVersion":`Esquema de ajustes`,"health.runtimesTitle":`Motores de agente`,"health.claudeCliTitle":`Claude Code`,"health.claudeCliMissing":`claude no encontrado en PATH`,"health.codexCliTitle":`OpenAI Codex`,"health.codexCliMissing":`binario codex no resoluble`,"health.forgeCliTitle":`CLI de forge (gh / glab)`,"health.forgeCliMissing":`No se encontró ni gh ni glab — pull requests y vigilancia de CI no disponibles`,"health.workspacesTitle":`Workspaces`,"health.workspacesCount":`{total} en total, {archived} archivados`,"health.worktreesMissing":`{count} worktree(s) faltan en el disco`,"health.sessionsTitle":`Sesiones de agente`,"health.sessionsOrphaned":`{n} sesión/sesiones huérfana(s) en ejecución`,"health.integrationsTitle":`Integraciones`,"health.integrationConfigured":`configurada`,"health.integrationMissing":`sin configurar`,"health.integrationDisabled":`desactivada`,"settings.integrationEnabled":`Activar integración`,"health.activeTitle":`Estado activo`,"health.activeQuotaBackoffs":`Quota backoffs pendientes`,"health.activeWakeups":`Despertares programados`,"health.activeAutoLoop":`Auto-loop en ejecución`,"health.activeAgentSessions":`Sesiones de agente activas`,"health.activeDevServers":`Servidores de desarrollo activos`,"health.noneActive":`Ninguno.`,"health.quotaResumeAt":`reanuda a las {time}`,"health.wakeupAt":`despierta a las {time}`,"health.startedAgo":`iniciada hace {time}`,"health.autoLoopReady":`listo, iterando`,"health.autoLoopGrooming":`grooming en curso`,"session.started":`Sesión iniciada`,"session.ended":`Sesión finalizada`,"session.compacted":`Contexto compactado`,"session.endedCompleted":`Turno finalizado: envía un mensaje para continuar`,"session.endedKilled":`Sesión detenida`,"session.endedError":`La sesión terminó con un error`,"session.endedWatchdog":`Sesión cerrada a la fuerza tras un periodo de inactividad`,"tool.running":`Ejecutando...`,"activity.raw_lines":`Líneas de salida brutas ({n})`,"activity.loading_older":`Cargando mensajes anteriores…`,"activity.compacting":`Compactando el contexto…`,"activity.prev_user_message":`Mensaje anterior del usuario`,"activity.scroll_to_bottom":`Desplazar al final`,"activity.empty":`Nada todavía`,"activity.emptyHint":`La salida del agente aparecerá aquí en cuanto arranque una sesión.`,"activity.a11y.region":`Anuncios de actividad del agente`,"activity.a11y.agentSaid":`Agente: {text}`,"activity.a11y.toolStarted":`Herramienta {name} iniciada`,"activity.a11y.toolFinished":`Herramienta {name} finalizada`,"activity.a11y.toolFailed":`Herramienta {name} falló`,"chat.systemPrompt":`Prompt del sistema`,"chat.agent":`Agente`,"chat.cleanupScript":`Script de limpieza`,"chat.archiveScript":`Script de archivado`,"chat.setupScript":`Script de setup`,"chat.hookScript":`Hook {event}`,"chat.scriptDone":`Hecho`,"chat.scriptComplete":`[{phase}] Completado`,"chat.scriptError":`[{phase}] Error: {message}`,"chat.unknownError":`desconocido`,"chat.you":`Tú`,"chat.session":`Sesión`,"chat.nActions":`{n} acción | {n} acciones`,"chat.lastUpdatedAt":`Última actualización a las {time}`,"chat.scrollToTurnTop":`Desplazar al inicio del mensaje`,"migration.backing_up":`Haciendo copia de seguridad de la base de datos…`,"migration.running":`Migrando datos del agente — {processed}/{total}`,"migration.error":`La migración falló`,"migration.backup_location":`Se guardó una copia de seguridad en {path}. Reinicia Kōbō para reintentar.`,"migration.retry":`Reinicia Kōbō para reintentar.`,"engine.select":`Motor`,"engine.model":`Modelo`,"engine.effort":`Esfuerzo de razonamiento`,"wakeup.scheduledIn":`Próximo despertar en {n}s`,"wakeup.scheduledAt":`Próximo despertar a las {time}`,"wakeup.firing":`Despertando...`,"wakeup.reason":`Razón: {reason}`,"wakeup.cancel":`Cancelar este despertar`,"wakeup.pendingIndicator":`Despertar programado`,"cron.pendingIndicator":`{n} cron(s) programado(s)`,"schedule.tabLabel":`Programación`,"schedule.panelTitle":`Automatización`,"schedule.panelDescription":`Despertar este workspace más tarde o ejecutar instrucciones según una programación.`,"schedule.activeTitle":`Programaciones activas`,"schedule.emptyTitle":`Nada programado`,"schedule.emptyDescription":`Crea un wakeup puntual o una tarea recurrente abajo.`,"schedule.cancelWakeup":`Cancelar este wakeup`,"schedule.cancelCron":`Eliminar esta tarea recurrente`,"schedule.createTitle":`Crear una programación`,"schedule.createDescription":`Elige cuándo y cómo debe ejecutarse el agente.`,"schedule.typeWakeup":`Wakeup puntual`,"schedule.typeRecurring":`Tarea recurrente`,"schedule.wakeupDescription":`Ejecutar el prompt una vez después de un retraso.`,"schedule.cronDescription":`Ejecutar el prompt periódicamente con una frecuencia fija.`,"schedule.promptHint":`Instrucciones que se enviarán al agente`,"schedule.frequencyTitle":`Frecuencia`,"schedule.advancedDescription":`Usar una expresión cron sin procesar`,"schedule.cronExpressionLabel":`Expresión cron`,"schedule.sessionModeTitle":`Sesión de ejecución`,"schedule.modeResume":`Reanudar sesión`,"schedule.oneShotHint":`Eliminar esta programación después de su primera ejecución.`,"schedule.wakeupTitle":`Wakeup pendiente`,"schedule.cronsTitle":`Programaciones recurrentes`,"schedule.noWakeup":`Sin wakeup programado`,"schedule.noCrons":`Sin cron programado`,"schedule.nextFireAt":`próximo a las {time}`,"schedule.lastFiredAt":`último hace {time}`,"schedule.addCronTitle":`Añadir una tarea recurrente`,"schedule.addWakeupTitle":`Programar un wakeup`,"schedule.every":`Cada`,"schedule.unitMinutes":`minutos`,"schedule.unitHours":`horas`,"schedule.unitDays":`días`,"schedule.daysDriftWarning":`El intervalo puede reducirse a 1 día a fin de mes (limitación de cron).`,"schedule.advancedExpression":`Expresión avanzada (opcional)`,"schedule.advancedHint":`Cron sin procesar (p. ej. */15 * * * *) o {'@'}hourly/{'@'}daily — anula el selector si se rellena.`,"schedule.promptLabel":`Prompt`,"schedule.labelOptional":`Etiqueta (opcional)`,"schedule.delayMinutes":`Retraso (minutos)`,"schedule.modeFresh":`Nueva sesión`,"schedule.oneShot":`Ejecutar solo una vez`,"schedule.addCronBtn":`Añadir cron`,"schedule.addWakeupBtn":`Programar wakeup`,"schedule.cronCreated":`Tarea recurrente añadida`,"schedule.wakeupCreated":`Wakeup programado`,"askUserQuestion.title":`El agente hace una pregunta`,"askUserQuestion.submit":`Enviar respuesta`,"askUserQuestion.multiSelectHint":`Selecciona una o más opciones`,"askUserQuestion.otherOption":`Otro`,"askUserQuestion.otherOptionHint":`especifíquelo en su próximo mensaje`,"askUserQuestion.freeFormLabel":`Especifique su respuesta`,"askUserQuestion.freeFormHint":`Esta respuesta se enviará directamente al agente.`,"askUserQuestion.noPending":`Ninguna pregunta pendiente`,"askUserQuestion.next":`Siguiente`,"askUserQuestion.previous":`Anterior`,"askUserQuestion.cancel":`Cancelar`,"askUserQuestion.cancelTooltip":`Saltar esta pregunta — el agente continuará sin respuesta`,"askUserQuestion.collapse":`Contraer el panel de pregunta`,"askUserQuestion.expand":`Expandir el panel de pregunta`,"permissionRequest.title":`El agente quiere usar una herramienta`,"permissionRequest.allow":`Permitir`,"permissionRequest.allowOnce":`Permitir una vez`,"permissionRequest.allowTurn":`Permitir este turno`,"permissionRequest.allowOperation":`Permitir siempre esta operación`,"permissionRequest.allowTool":`Permitir siempre esta herramienta`,"permissionRequest.deny":`Denegar`,"permissionRequest.tool":`Herramienta`,"permissionRequest.input":`Entrada`,"permissionRequest.rawInput":`Detalles técnicos`,"permissionRequest.collapse":`Contraer el panel de permisos`,"permissionRequest.expand":`Expandir el panel de permisos`,"permissionRequest.denied":`denegado por el usuario`,"workspaceStatus.created":`creado`,"workspaceStatus.extracting":`extracción`,"workspaceStatus.brainstorming":`brainstorming`,"workspaceStatus.compacting":`compactando`,"chatInput.compactingBanner":`Compactando el contexto. Podrás enviar mensajes cuando termine.`,"workspaceStatus.executing":`en curso`,"workspaceStatus.awaitingUser":`esperando tu respuesta`,"workspaceStatus.completed":`completado`,"workspaceStatus.idle":`inactivo`,"workspaceStatus.error":`error`,"workspaceStatus.quota":`cuota alcanzada`,"workspaceStatus.retrying":`reanudación automática`,"workspaceList.prOpen":`#{n} — Pull request abierta`,"workspaceList.prWatchDisabledIndicator":`Comprobaciones de PR ignoradas para este workspace`,"workspaceList.prChangesRequested":`#{n} — Cambios solicitados`,"workspaceList.attentionCiFailed":`CI fallida`,"workspaceList.attentionChangesRequested":`Cambios solicitados`,"workspaceList.attentionReadyToMerge":`Listo para merge`,"autoLoop.toggle":`Auto-loop`,"autoLoop.start":`Iniciar auto-loop`,"autoLoop.prepare":`Preparar para auto-loop`,"autoLoop.reprepare":`Volver a preparar para auto-loop`,"autoLoop.reprepareTooltip":`Volver a ejecutar la fase de grooming para añadir o refrescar tareas antes de reanudar el bucle`,"autoLoop.prepareBusy":`Espera a que el agente termine antes de preparar`,"autoLoop.forceReady":`Sé lo que hago — omitir preparación`,"autoLoop.forceReadyConfirm":`¿Omitir la preparación y marcar auto-loop listo? El loop puede quedarse bloqueado si las tareas no son atómicas.`,"autoLoop.stop":`Detener auto-loop`,"autoLoop.notReady":`Ejecute primero 'Preparar para auto-loop'`,"autoLoop.noTasks":`Añada tareas primero`,"autoLoop.progress":`Auto-loop · {done}/{total} tareas`,"autoLoop.preparing":`Auto-loop · preparando`,"autoLoop.preparingTooltip":`Preparación en curso — el agente está creando / revisando tareas. El bucle arrancará cuando llame a mark_auto_loop_ready.`,"autoLoop.running":`Auto-loop en ejecución`,"autoLoop.startInMode":`Iniciar en modo auto-loop`,"autoLoop.brainstormModelPrefix":`Brainstorm:`,"autoLoop.brainstormModelTooltip":`Modelo usado solo para la sesión de brainstorming inicial — cada tarea posterior usa el modelo elegido arriba`,"autoLoop.brainstormReasoningPrefix":`Brainstorm:`,"autoLoop.brainstormReasoningTooltip":`Nivel de razonamiento usado solo para la sesión de brainstorming inicial`,"autoLoop.executionModelPrefix":`Loop:`,"autoLoop.executionModelTooltip":`Modelo usado para cada tarea del auto-loop tras la sesión de brainstorming inicial`,"autoLoop.sessionMode.perTask":`Nueva sesión por tarea`,"autoLoop.sessionMode.label":`Sesión:`,"autoLoop.sessionMode.perTaskTooltip":`Cada tarea inicia una sesión nueva de Claude Code sin memoria de tareas anteriores`,"autoLoop.sessionMode.continuous":`Sesión continua`,"autoLoop.sessionMode.continuousTooltip":`Todas las tareas se encadenan en la misma sesión — el agente conserva todo el contexto, pero la sesión se alarga con el tiempo`,"koboCommand.prepAutoloopDesc":`Preparar tareas para modo auto-loop (atomicidad)`,"staleSessionBanner.title":`Auto-loop en curso`,"staleSessionBanner.message":`Estás viendo una sesión anterior — el agente está trabajando en la más reciente.`,"staleSessionBanner.staleTitle":`Sesión anterior`,"staleSessionBanner.staleMessage":`Estás viendo una sesión anterior — los mensajes que envíes irán a esta sesión, no a la más reciente.`,"staleSessionBanner.switchToCurrent":`Cambiar a la actual`,"network.login.title":`Acceso de red`,"network.login.description":`Este Kōbō requiere un token para controlarse desde la red. Pega el token que aparece en Ajustes en la máquina anfitriona.`,"network.login.tokenLabel":`Token`,"network.login.tokenPlaceholder":`Pega tu token`,"network.login.connect":`Conectar`,"network.login.invalid":`Token no válido`,"network.login.serverError":`Error del servidor — inténtalo de nuevo.`,"network.login.unreachable":`Kōbō no es accesible — comprueba tu conexión.`,"layout.toggleWorkspaces":`Mostrar/ocultar el panel de espacios`,"layout.togglePanel":`Mostrar/ocultar el panel lateral`,"unsaved.title":`¿Salir sin guardar?`,"unsaved.message":`Tienes cambios sin guardar. Salir de esta página los descarta.`,"unsaved.leave":`Salir`,"unsaved.stay":`Quedarme`,"prCheckout.staleRetriesExhausted":`El estado del repositorio siguió cambiando mientras intentábamos aplicar tus decisiones. Cierra este diálogo e inténtalo de nuevo desde el selector de pull requests.`,"prPicker.title":`Importar desde una pull request`,"prPicker.filterAll":`Todas`,"prPicker.filterMine":`Las mías`,"prPicker.filterReviewRequested":`Revisión solicitada`,"prPicker.searchPlaceholder":`Buscar pull requests…`,"prPicker.loadMore":`Cargar más`,"prPicker.empty":`Ninguna pull request abierta coincide.`,"prPicker.forkNotSupported":`Esta PR proviene de un fork; Kōbō no puede hacerle checkout.`,"prPicker.loadFailed":`Error al cargar las pull requests.`,"prPicker.badge.workspaceExists":`Ya abierta en Kōbō`,"prPicker.badge.worktreePresent":`Worktree presente`,"prPicker.badge.localBranch":`Branch local`,"prPicker.badge.new":`Nueva`,"prPicker.badge.draft":`Borrador`,"prCheckout.title":`Preparar la worktree`,"prCheckout.apply":`Aplicar`,"prCheckout.cancel":`Cancelar`,"prCheckout.retry":`Reintentar`,"prCheckout.diagnoseFailed":`Error al diagnosticar la pull request.`,"prCheckout.resolveFailed":`Error al resolver el checkout de la pull request.`,"prCheckout.path.required":`Introduce una ruta de worktree que aún no exista.`,"prCheckout.workspace.restoreNotAvailable":"Restaurar un workspace purgado no está disponible todavía desde aquí. Vuelve a crear su carpeta de worktree en disco (por ejemplo, con `git worktree add`) y Kōbō la reconectará automáticamente en unos 30 segundos.","prCheckout.staleReloaded":`El repositorio cambió; el diagnóstico se ha actualizado.`,"prCheckout.step.blocked":`No se puede continuar`,"prCheckout.step.path":`Ubicación de la worktree`,"prCheckout.step.workspace":`Workspace existente`,"prCheckout.step.worktree":`Worktree existente`,"prCheckout.step.operation":`Operación git en curso`,"prCheckout.step.changes":`Cambios sin commitear`,"prCheckout.step.divergence":`Branch local vs origin`,"prCheckout.workspace.activeHint":`Un workspace llamado "{name}" ya sigue este branch.`,"prCheckout.workspace.open":`Abrir ese workspace`,"prCheckout.workspace.continue":`Continuar por otra ruta`,"prCheckout.workspace.unarchive":`Desarchivar y abrirlo`,"prCheckout.workspace.restore":`Recrear su worktree`,"prCheckout.worktree.orphanHint":`Ya existe una worktree en este branch en {path}.`,"prCheckout.worktree.attach":`Adjuntarla`,"prCheckout.worktree.branchInUse":`Esta rama ya está extraída. Adjunte su worktree existente.`,"prCheckout.worktree.createElsewhere":`Crear otra en otro lugar`,"prCheckout.operation.hint":`Hay un {operation} en curso en esa worktree.`,"prCheckout.operation.abort":`Abortarlo`,"prCheckout.operation.cancel":`Dejarlo tal cual y detenerse aquí`,"prCheckout.changes.hint":`{modified} modificado(s), {staged} en stage, {untracked} sin seguimiento.`,"prCheckout.changes.stash":`Guardarlos en un stash`,"prCheckout.changes.commit":`Commitearlos`,"prCheckout.changes.discard":`Descartarlos (se conservan en un stash etiquetado)`,"prCheckout.changes.keepResetConflict":`Conservar cambios locales es incompatible con un reset. Usa stash o commit, o conserva la rama.`,"prCheckout.changes.keep":`Dejarlos como están`,"prCheckout.divergence.behindHint":`Tu branch está {behind} commit(s) por detrás de origin.`,"prCheckout.divergence.aheadHint":`Tu branch tiene {ahead} commit(s) sin pushear.`,"prCheckout.divergence.divergedHint":`{ahead} por delante, {behind} por detrás de origin.`,"prCheckout.divergence.fastForward":`Fast-forward hacia origin`,"prCheckout.divergence.rebase":`Rebase sobre origin`,"prCheckout.divergence.resetHard":`Restablecer a origin (se crea antes un branch de respaldo)`,"prCheckout.divergence.keep":`Mantener el estado local`,"prCheckout.blocked.forgeUnavailable":`Falta el CLI de la forge o no está autenticado.`,"prCheckout.blocked.forkPr":`Esta PR proviene de un fork; Kōbō no puede hacerle checkout.`,"prCheckout.blocked.headBranchDeleted":`El branch ya no existe en el remote.`,"prCheckout.blocked.indexLock":`Hay otro proceso git en curso (index.lock está presente).`,"prCheckout.blocked.pathOccupied":`{path} ya existe y no es una worktree.`,"prCheckout.blocked.worktreeOtherBranch":`{path} es una worktree en otro branch ({branch}).`,"prCheckout.blocked.noCommonAncestor":`Ya existe un branch local llamado {branch} con un historial sin relación.`,"split.title":`Vista doble de workspaces`,"split.open":`Abrir en paralelo`,"split.openBeside":`Abrir al lado`,"split.close":`Cerrar vista doble`,"split.left":`Workspace izquierdo`,"split.right":`Workspace derecho`,"split.choose":`Elegir un workspace`,"split.recipient":`Enviar a: {name}`,"absence.title":`Desde tu última visita`,"absence.pending":`Cambios por revisar`,"absence.retention":`Actividad importante de los últimos 30 días, registrada desde la instalación de esta función. Las visitas se guardan solo en este navegador.`,"absence.since":`Desde {date}`,"absence.error":`No se pudo cargar la actividad.`,"absence.retry":`Reintentar`,"absence.empty":`No hay actividad nueva.`,"absence.more":`Cargar más`,"absence.markRead":`Marcar los eventos mostrados como leídos`,"absence.kind.question":`Pregunta realizada`,"absence.kind.permission":`Aprobación solicitada`,"absence.kind.completed":`Sesión finalizada`,"absence.kind.error":`Error del agente`,"absence.kind.pr-merged":`PR fusionada`,"absence.kind.pr-approved":`PR aprobada`,"absence.kind.pr-changes-requested":`Cambios solicitados`,"absence.kind.pr-ci-failed":`CI fallida`,"absence.kind.pr-ci-recovered":`CI recuperada`,"absence.kind.pr-merge-conflict":`Conflicto de merge`,"absence.kind.pr-ready-to-merge":`PR lista para merge`,"absence.kind.archived":`Workspace archivado`,"absence.kind.purged":`Worktree purgado`,"absence.kind.restored":`Worktree restaurado`,"tours.split.controls.title":`Dos workspaces independientes`,"tours.split.controls.description":`Elige un workspace por panel. Ajusta la separación; cada conversación conserva su destinatario y sus paneles.`,"tours.home.sort.title":`Ordenar workspaces`,"tours.home.sort.description":`Elige el orden y la dirección dentro de cada grupo. Tu selección se guarda.`,"tours.home.activity.title":`Revisar la actividad tras una ausencia`,"tours.home.activity.description":`Al pie del panel izquierdo encontrarás preguntas, sesiones finalizadas, errores y cambios de PR desde tu última visita.`};export{e as default};
|
package/src/client/dist/pwa/assets/{expand-template-Cj82YE-O.js → expand-template-B6xAlAaM.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{S as e,j as t,ot as n,ut as r,v as i}from"./reactivity.esm-bundler-DEJj9cFv.js";import{C as a,J as o,L as s,R as c,T as l,X as u,_ as d,f,i as p,l as m,p as h,r as g,u as _,y as v,z as y}from"./runtime-core.esm-bundler-CDnVUfeZ.js";import{P as b,S as x,b as S,c as C,et as w,l as T,pt as E,tt as D,y as O,z as k}from"./QBtn-CZaBclNw.js";import{a as A,i as j}from"./pinia-BKqmoVru.js";import{ot as ee,xt as M}from"./index-BJU5dnkF.js";import{f as N}from"./permissionModes-BtC3_P-P.js";import{a as P}from"./use-tours-BJ81clv6.js";import{a as F,i as I,n as L,o as R,r as z,s as B}from"./efforts-BPlRSHXp.js";function V(e){e.keyCode===32&&w(e)}var H=D({name:`StepHeader`,props:{stepper:{},step:{},goToPanel:Function},setup(t,{attrs:n}){let r=O(),i=e(null),o=m(()=>t.stepper.modelValue===t.step.name),s=m(()=>{let e=t.step.disable;return e===!0||e===``}),c=m(()=>{let e=t.step.error;return e===!0||e===``}),l=m(()=>{let e=t.step.done;return!s.value&&(e===!0||e===``)}),d=m(()=>{let e=t.step.headerNav;return t.stepper.headerNav===!0&&(e===!0||e===``||e===void 0)}),f=m(()=>!s.value&&d.value),p=m(()=>t.step.prefix&&(!o.value||t.stepper.activeIcon===`none`)&&(!c.value||t.stepper.errorIcon===`none`)&&(!l.value||t.stepper.doneIcon===`none`)),h=m(()=>{let e=t.step.icon||t.stepper.inactiveIcon;if(o.value){let n=t.step.activeIcon||t.stepper.activeIcon;return n===`none`?e:n||r.iconSet.stepper.active}if(c.value){let n=t.step.errorIcon||t.stepper.errorIcon;return n===`none`?e:n||r.iconSet.stepper.error}if(!s.value&&l.value){let n=t.step.doneIcon||t.stepper.doneIcon;return n===`none`?e:n||r.iconSet.stepper.done}return e}),g=m(()=>{let e=c.value?t.step.errorColor||t.stepper.errorColor:void 0;if(o.value){let n=t.step.activeColor||t.stepper.activeColor||t.step.color;return n===void 0?e:n}return e===void 0?!s.value&&l.value?t.step.doneColor||t.stepper.doneColor||t.step.color||t.stepper.inactiveColor:t.step.color||t.stepper.inactiveColor:e}),_=m(()=>`q-stepper__tab col-grow flex items-center no-wrap relative-position`+(g.value===void 0?``:` text-${g.value}`)+(c.value?` q-stepper__tab--error q-stepper__tab--error-with-`+(p.value?`prefix`:`icon`):``)+(o.value?` q-stepper__tab--active`:``)+(l.value?` q-stepper__tab--done`:``)+(f.value?` q-stepper__tab--navigation q-focusable q-hoverable`:``)+(s.value?` q-stepper__tab--disabled`:``)),v=m(()=>t.stepper.headerNav&&f.value);function y(){i.value?.focus({preventScroll:!0}),o.value||t.goToPanel(t.step.name)}function b(e){[13,32].includes(e.keyCode)&&(o.value||t.goToPanel(t.step.name),w(e))}return()=>{let e={class:_.value,"aria-current":o.value?`step`:void 0};d.value&&(e.role=`button`,s.value?(e.tabindex=-1,e[`aria-disabled`]=`true`):(e.onClick=y,e.onKeydown=V,e.onKeyup=b,e.tabindex=n.tabindex||0));let r=[a(`div`,{class:`q-focus-helper`,tabindex:-1,ref:i}),a(`div`,{class:`q-stepper__dot row flex-center q-stepper__line relative-position`},[a(`span`,{class:`row flex-center`},[p.value?t.step.prefix:a(T,{name:h.value})])])];if(t.step.title!==void 0&&t.step.title!==null){let e=[a(`div`,{class:`q-stepper__title`},t.step.title)];t.step.caption!==void 0&&t.step.caption!==null&&e.push(a(`div`,{class:`q-stepper__caption`},t.step.caption)),r.push(a(`div`,{class:`q-stepper__label q-stepper__line relative-position`},e))}return u(a(`div`,e,r),[[C,v.value]])}}});function U(e){return a(`div`,{class:`q-stepper__step-content`},[a(`div`,{class:`q-stepper__step-inner`},x(e.default))])}var W={setup(e,{slots:t}){return()=>U(t)}},G=D({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(t,{slots:n,emit:r}){let i=O(),o=l(k,b);if(o===b)return console.error(`QStep needs to be a child of QStepper`),b;let{getCache:s}=R(),c=e(null),u=m(()=>o.value.modelValue===t.name),d=m(()=>!i.platform.is.ios&&i.platform.is.chrome||!u.value||!o.value.vertical?{}:{onScroll(e){let{target:n}=e;n.scrollTop>0&&(n.scrollTop=0),t.onScroll!==void 0&&r(`scroll`,e)}}),f=m(()=>typeof t.name==`string`||typeof t.name==`number`?t.name:String(t.name));function h(){let e=o.value.vertical;return e&&o.value.keepAlive?a(p,o.value.keepAliveProps.value,u.value?[a(o.value.needsUniqueKeepAliveWrapper.value?s(f.value,()=>({...W,name:f.value})):W,{key:f.value},n.default)]:void 0):!e||u.value?U(n):void 0}return()=>a(`div`,{ref:c,class:`q-stepper__step`,role:`group`,"aria-label":t.title,...d.value},o.value.vertical?[a(H,{stepper:o.value,step:t,goToPanel:o.value.goToPanel}),o.value.animated?a(N,h):h()]:[h()])}}),K=/(-\w)/g;function q(e){let t={};for(let n in e){let r=n.replace(K,e=>e[1].toUpperCase());t[r]=e[n]}return t}var te=D({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=O(),r=j(e,n),{updatePanelsList:i,isValidPanelName:o,updatePanelIndex:s,getPanelContent:l,getPanels:d,panelDirectives:f,goToPanel:p,keepAliveProps:h,needsUniqueKeepAliveWrapper:g}=L();c(k,m(()=>({goToPanel:p,keepAliveProps:h,needsUniqueKeepAliveWrapper:g,...e})));let _=m(()=>`q-stepper q-stepper--${e.vertical?`vertical`:`horizontal`}`+(e.flat?` q-stepper--flat`:``)+(e.bordered?` q-stepper--bordered`:``)+(r()?` q-stepper--dark q-dark`:``)),v=m(()=>`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=x(t.message,[]);if(e.vertical){o(e.modelValue)&&s();let r=a(`div`,{class:`q-stepper__content`},x(t.default));return n===void 0?[r]:n.concat(r)}return[a(`div`,{class:v.value},d().map(t=>{let n=q(t.props);return a(H,{key:n.name,stepper:e,step:n,goToPanel:p})})),n,u(a(`div`,{class:`q-stepper__content q-panel-parent`},l()),f.value)]}return()=>(i(t),a(`div`,{class:_.value},S(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(v({__name:`SlashSuggestionsPopup`,props:{groupedDropdown:{},flatDropdown:{},selectedIndex:{}},emits:[`select`],setup(e,{emit:i}){let{t:a}=M(),o=i;function c(e){let t=B[`/${e}`];if(!t)return``;let n=t.descriptionKey,r=a(n);return r===n?``:r}return(i,l)=>(s(),h(`div`,J,[e.groupedDropdown.skills.length>0?(s(),h(g,{key:0},[_(`div`,Y,r(t(a)(`chatInput.dropdownSkills`)),1),(s(!0),h(g,null,y(e.groupedDropdown.skills,t=>(s(),h(`div`,{key:`skill-${t.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":e.flatDropdown.indexOf(t)===e.selectedIndex}]),onMousedown:E(e=>o(`select`,t),[`prevent`])},[d(T,{name:`bolt`,size:`12px`,color:`primary`,class:`q-mr-xs`}),_(`span`,Z,r(t.name),1)],42,X))),128))],64)):f(``,!0),e.groupedDropdown.kobo.length>0?(s(),h(g,{key:1},[_(`div`,Q,r(t(a)(`chatInput.dropdownKobo`)),1),(s(!0),h(g,null,y(e.groupedDropdown.kobo,t=>(s(),h(`div`,{key:`kobo-${t.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":e.flatDropdown.indexOf(t)===e.selectedIndex}]),onMousedown:E(e=>o(`select`,t),[`prevent`])},[d(T,{name:`terminal`,size:`12px`,color:`teal-4`,class:`q-mr-xs`}),_(`span`,re,`/`+r(t.name),1),c(t.name)?(s(),h(`span`,ie,`— `+r(c(t.name)),1)):f(``,!0)],42,ne))),128))],64)):f(``,!0),e.groupedDropdown.templates.length>0?(s(),h(g,{key:2},[_(`div`,ae,r(t(a)(`chatInput.dropdownTemplates`)),1),(s(!0),h(g,null,y(e.groupedDropdown.templates,t=>(s(),h(`div`,{key:`tpl-${t.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":e.flatDropdown.indexOf(t)===e.selectedIndex}]),onMousedown:E(e=>o(`select`,t),[`prevent`])},[d(T,{name:`description`,size:`12px`,color:`amber-4`,class:`q-mr-xs`}),_(`span`,$,`/`+r(t.name),1),t.description?(s(),h(`span`,se,`— `+r(t.description),1)):f(``,!0)],42,oe))),128))],64)):f(``,!0)]))}}),[[`__scopeId`,`data-v-931c9d69`]]);function le(e,t,n={}){let r=ee(),a=i([]),s=i(!1),c=i(``),l=i(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 n=t();if(!n)return null;let r=n.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(n){let r=t();if(!r){e.value=n;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=n;return}let c=s.index??i;e.value=e.value.slice(0,c)+n+o}let _=m(()=>{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:n.excludeKoboCommands?[]:Object.keys(B).map(e=>e.replace(/^\//,``)).filter(e=>t(e)).map(e=>({type:`kobo`,name:e})),templates:r.templates.filter(e=>t(e.slug)).map(e=>({type:`template`,name:e.slug,description:e.description}))}}),v=m(()=>[..._.value.skills,..._.value.kobo,..._.value.templates]);return o(()=>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{te as a,ce as i,ue as n,G as o,le as r,de as t};
|
|
1
|
+
import{S as e,j as t,ot as n,ut as r,v as i}from"./reactivity.esm-bundler-DEJj9cFv.js";import{C as a,J as o,L as s,R as c,T as l,X as u,_ as d,f,i as p,l as m,p as h,r as g,u as _,y as v,z as y}from"./runtime-core.esm-bundler-CDnVUfeZ.js";import{P as b,S as x,b as S,c as C,et as w,l as T,pt as E,tt as D,y as O,z as k}from"./QBtn-CZaBclNw.js";import{a as A,i as j}from"./pinia-BKqmoVru.js";import{ot as ee,xt as M}from"./index-VL3fI9a3.js";import{f as N}from"./permissionModes-C-9Crj-c.js";import{a as P}from"./use-tours-CSVM_54K.js";import{a as F,i as I,n as L,o as R,r as z,s as B}from"./efforts-C5ZZgCH4.js";function V(e){e.keyCode===32&&w(e)}var H=D({name:`StepHeader`,props:{stepper:{},step:{},goToPanel:Function},setup(t,{attrs:n}){let r=O(),i=e(null),o=m(()=>t.stepper.modelValue===t.step.name),s=m(()=>{let e=t.step.disable;return e===!0||e===``}),c=m(()=>{let e=t.step.error;return e===!0||e===``}),l=m(()=>{let e=t.step.done;return!s.value&&(e===!0||e===``)}),d=m(()=>{let e=t.step.headerNav;return t.stepper.headerNav===!0&&(e===!0||e===``||e===void 0)}),f=m(()=>!s.value&&d.value),p=m(()=>t.step.prefix&&(!o.value||t.stepper.activeIcon===`none`)&&(!c.value||t.stepper.errorIcon===`none`)&&(!l.value||t.stepper.doneIcon===`none`)),h=m(()=>{let e=t.step.icon||t.stepper.inactiveIcon;if(o.value){let n=t.step.activeIcon||t.stepper.activeIcon;return n===`none`?e:n||r.iconSet.stepper.active}if(c.value){let n=t.step.errorIcon||t.stepper.errorIcon;return n===`none`?e:n||r.iconSet.stepper.error}if(!s.value&&l.value){let n=t.step.doneIcon||t.stepper.doneIcon;return n===`none`?e:n||r.iconSet.stepper.done}return e}),g=m(()=>{let e=c.value?t.step.errorColor||t.stepper.errorColor:void 0;if(o.value){let n=t.step.activeColor||t.stepper.activeColor||t.step.color;return n===void 0?e:n}return e===void 0?!s.value&&l.value?t.step.doneColor||t.stepper.doneColor||t.step.color||t.stepper.inactiveColor:t.step.color||t.stepper.inactiveColor:e}),_=m(()=>`q-stepper__tab col-grow flex items-center no-wrap relative-position`+(g.value===void 0?``:` text-${g.value}`)+(c.value?` q-stepper__tab--error q-stepper__tab--error-with-`+(p.value?`prefix`:`icon`):``)+(o.value?` q-stepper__tab--active`:``)+(l.value?` q-stepper__tab--done`:``)+(f.value?` q-stepper__tab--navigation q-focusable q-hoverable`:``)+(s.value?` q-stepper__tab--disabled`:``)),v=m(()=>t.stepper.headerNav&&f.value);function y(){i.value?.focus({preventScroll:!0}),o.value||t.goToPanel(t.step.name)}function b(e){[13,32].includes(e.keyCode)&&(o.value||t.goToPanel(t.step.name),w(e))}return()=>{let e={class:_.value,"aria-current":o.value?`step`:void 0};d.value&&(e.role=`button`,s.value?(e.tabindex=-1,e[`aria-disabled`]=`true`):(e.onClick=y,e.onKeydown=V,e.onKeyup=b,e.tabindex=n.tabindex||0));let r=[a(`div`,{class:`q-focus-helper`,tabindex:-1,ref:i}),a(`div`,{class:`q-stepper__dot row flex-center q-stepper__line relative-position`},[a(`span`,{class:`row flex-center`},[p.value?t.step.prefix:a(T,{name:h.value})])])];if(t.step.title!==void 0&&t.step.title!==null){let e=[a(`div`,{class:`q-stepper__title`},t.step.title)];t.step.caption!==void 0&&t.step.caption!==null&&e.push(a(`div`,{class:`q-stepper__caption`},t.step.caption)),r.push(a(`div`,{class:`q-stepper__label q-stepper__line relative-position`},e))}return u(a(`div`,e,r),[[C,v.value]])}}});function U(e){return a(`div`,{class:`q-stepper__step-content`},[a(`div`,{class:`q-stepper__step-inner`},x(e.default))])}var W={setup(e,{slots:t}){return()=>U(t)}},G=D({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(t,{slots:n,emit:r}){let i=O(),o=l(k,b);if(o===b)return console.error(`QStep needs to be a child of QStepper`),b;let{getCache:s}=R(),c=e(null),u=m(()=>o.value.modelValue===t.name),d=m(()=>!i.platform.is.ios&&i.platform.is.chrome||!u.value||!o.value.vertical?{}:{onScroll(e){let{target:n}=e;n.scrollTop>0&&(n.scrollTop=0),t.onScroll!==void 0&&r(`scroll`,e)}}),f=m(()=>typeof t.name==`string`||typeof t.name==`number`?t.name:String(t.name));function h(){let e=o.value.vertical;return e&&o.value.keepAlive?a(p,o.value.keepAliveProps.value,u.value?[a(o.value.needsUniqueKeepAliveWrapper.value?s(f.value,()=>({...W,name:f.value})):W,{key:f.value},n.default)]:void 0):!e||u.value?U(n):void 0}return()=>a(`div`,{ref:c,class:`q-stepper__step`,role:`group`,"aria-label":t.title,...d.value},o.value.vertical?[a(H,{stepper:o.value,step:t,goToPanel:o.value.goToPanel}),o.value.animated?a(N,h):h()]:[h()])}}),K=/(-\w)/g;function q(e){let t={};for(let n in e){let r=n.replace(K,e=>e[1].toUpperCase());t[r]=e[n]}return t}var te=D({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=O(),r=j(e,n),{updatePanelsList:i,isValidPanelName:o,updatePanelIndex:s,getPanelContent:l,getPanels:d,panelDirectives:f,goToPanel:p,keepAliveProps:h,needsUniqueKeepAliveWrapper:g}=L();c(k,m(()=>({goToPanel:p,keepAliveProps:h,needsUniqueKeepAliveWrapper:g,...e})));let _=m(()=>`q-stepper q-stepper--${e.vertical?`vertical`:`horizontal`}`+(e.flat?` q-stepper--flat`:``)+(e.bordered?` q-stepper--bordered`:``)+(r()?` q-stepper--dark q-dark`:``)),v=m(()=>`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=x(t.message,[]);if(e.vertical){o(e.modelValue)&&s();let r=a(`div`,{class:`q-stepper__content`},x(t.default));return n===void 0?[r]:n.concat(r)}return[a(`div`,{class:v.value},d().map(t=>{let n=q(t.props);return a(H,{key:n.name,stepper:e,step:n,goToPanel:p})})),n,u(a(`div`,{class:`q-stepper__content q-panel-parent`},l()),f.value)]}return()=>(i(t),a(`div`,{class:_.value},S(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(v({__name:`SlashSuggestionsPopup`,props:{groupedDropdown:{},flatDropdown:{},selectedIndex:{}},emits:[`select`],setup(e,{emit:i}){let{t:a}=M(),o=i;function c(e){let t=B[`/${e}`];if(!t)return``;let n=t.descriptionKey,r=a(n);return r===n?``:r}return(i,l)=>(s(),h(`div`,J,[e.groupedDropdown.skills.length>0?(s(),h(g,{key:0},[_(`div`,Y,r(t(a)(`chatInput.dropdownSkills`)),1),(s(!0),h(g,null,y(e.groupedDropdown.skills,t=>(s(),h(`div`,{key:`skill-${t.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":e.flatDropdown.indexOf(t)===e.selectedIndex}]),onMousedown:E(e=>o(`select`,t),[`prevent`])},[d(T,{name:`bolt`,size:`12px`,color:`primary`,class:`q-mr-xs`}),_(`span`,Z,r(t.name),1)],42,X))),128))],64)):f(``,!0),e.groupedDropdown.kobo.length>0?(s(),h(g,{key:1},[_(`div`,Q,r(t(a)(`chatInput.dropdownKobo`)),1),(s(!0),h(g,null,y(e.groupedDropdown.kobo,t=>(s(),h(`div`,{key:`kobo-${t.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":e.flatDropdown.indexOf(t)===e.selectedIndex}]),onMousedown:E(e=>o(`select`,t),[`prevent`])},[d(T,{name:`terminal`,size:`12px`,color:`teal-4`,class:`q-mr-xs`}),_(`span`,re,`/`+r(t.name),1),c(t.name)?(s(),h(`span`,ie,`— `+r(c(t.name)),1)):f(``,!0)],42,ne))),128))],64)):f(``,!0),e.groupedDropdown.templates.length>0?(s(),h(g,{key:2},[_(`div`,ae,r(t(a)(`chatInput.dropdownTemplates`)),1),(s(!0),h(g,null,y(e.groupedDropdown.templates,t=>(s(),h(`div`,{key:`tpl-${t.name}`,class:n([`slash-item row items-center q-px-sm q-py-xs cursor-pointer`,{"slash-item--active":e.flatDropdown.indexOf(t)===e.selectedIndex}]),onMousedown:E(e=>o(`select`,t),[`prevent`])},[d(T,{name:`description`,size:`12px`,color:`amber-4`,class:`q-mr-xs`}),_(`span`,$,`/`+r(t.name),1),t.description?(s(),h(`span`,se,`— `+r(t.description),1)):f(``,!0)],42,oe))),128))],64)):f(``,!0)]))}}),[[`__scopeId`,`data-v-931c9d69`]]);function le(e,t,n={}){let r=ee(),a=i([]),s=i(!1),c=i(``),l=i(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 n=t();if(!n)return null;let r=n.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(n){let r=t();if(!r){e.value=n;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=n;return}let c=s.index??i;e.value=e.value.slice(0,c)+n+o}let _=m(()=>{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:n.excludeKoboCommands?[]:Object.keys(B).map(e=>e.replace(/^\//,``)).filter(e=>t(e)).map(e=>({type:`kobo`,name:e})),templates:r.templates.filter(e=>t(e.slug)).map(e=>({type:`template`,name:e.slug,description:e.description}))}}),v=m(()=>[..._.value.skills,..._.value.kobo,..._.value.templates]);return o(()=>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{te as a,ce as i,ue as n,G as o,le as r,de as t};
|