reasonix 0.50.0 → 0.51.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/dashboard/dist/app.css +1 -1
  2. package/dashboard/dist/app.js +24 -22
  3. package/dashboard/dist/app.js.map +1 -1
  4. package/dist/cli/{acp-6B25WIFF.js → acp-XEUHGG7X.js} +34 -31
  5. package/dist/cli/acp-XEUHGG7X.js.map +1 -0
  6. package/dist/cli/chat-NJ2Q5KHG.js +50 -0
  7. package/dist/cli/{chunk-OPGWCKKU.js → chunk-2HVTBFCI.js} +3 -3
  8. package/dist/cli/{chunk-AJIZ5KFK.js → chunk-2WUEAI2I.js} +3 -3
  9. package/dist/cli/{chunk-I4Q3QT4W.js → chunk-36BM7INR.js} +2 -2
  10. package/dist/cli/{chunk-3RNFYDDM.js → chunk-3BTK5BHI.js} +11 -7
  11. package/dist/cli/chunk-3BTK5BHI.js.map +1 -0
  12. package/dist/cli/{chunk-GMSAB2TC.js → chunk-3YRTIWFX.js} +2 -2
  13. package/dist/cli/{chunk-NLRC3DWQ.js → chunk-544J4PXD.js} +5 -5
  14. package/dist/cli/{chunk-7WITYWKN.js → chunk-5AIDYVH2.js} +2 -2
  15. package/dist/cli/{chunk-ALCOQP6R.js → chunk-5BBC6YMV.js} +5 -5
  16. package/dist/cli/{chunk-S4XVGLRW.js → chunk-6UNHNVJR.js} +72 -5
  17. package/dist/cli/chunk-6UNHNVJR.js.map +1 -0
  18. package/dist/cli/{chunk-IK6WWRIX.js → chunk-6XWXIVQ3.js} +38 -22
  19. package/dist/cli/chunk-6XWXIVQ3.js.map +1 -0
  20. package/dist/cli/{chunk-AAHB2PFX.js → chunk-7YB26OQO.js} +4 -4
  21. package/dist/cli/chunk-7YB26OQO.js.map +1 -0
  22. package/dist/cli/{chunk-MXWPAPZW.js → chunk-A5PBEIJ7.js} +53 -10
  23. package/dist/cli/chunk-A5PBEIJ7.js.map +1 -0
  24. package/dist/cli/{chunk-FQSQFCBI.js → chunk-BA5R6BAE.js} +2 -2
  25. package/dist/cli/{chunk-XWPZHWC2.js → chunk-BM6BBFAV.js} +2 -2
  26. package/dist/cli/{chunk-CAGKEGNE.js → chunk-BOWSNGQC.js} +52 -140
  27. package/dist/cli/chunk-BOWSNGQC.js.map +1 -0
  28. package/dist/cli/{chunk-EZ57UEZQ.js → chunk-C2MRSJTV.js} +2 -2
  29. package/dist/cli/{chunk-PYIZZAVQ.js → chunk-DVD67FXQ.js} +1716 -4
  30. package/dist/cli/chunk-DVD67FXQ.js.map +1 -0
  31. package/dist/cli/{chunk-ZAXMJANP.js → chunk-EAMXOWUW.js} +3 -3
  32. package/dist/cli/{chunk-TX652NBA.js → chunk-EWVFGYT6.js} +2 -2
  33. package/dist/cli/{chunk-IBRTU5WO.js → chunk-FP7IOWBQ.js} +18 -1182
  34. package/dist/cli/chunk-FP7IOWBQ.js.map +1 -0
  35. package/dist/cli/{chunk-I6FBSTTR.js → chunk-HGK57NBN.js} +9 -353
  36. package/dist/cli/chunk-HGK57NBN.js.map +1 -0
  37. package/dist/cli/chunk-JHWQDJZA.js +80 -0
  38. package/dist/cli/chunk-JHWQDJZA.js.map +1 -0
  39. package/dist/cli/{chunk-X2BQZQEE.js → chunk-K3QJ3GKI.js} +3 -3
  40. package/dist/cli/{chunk-GPUH2BNM.js → chunk-K4YQFULP.js} +612 -254
  41. package/dist/cli/chunk-K4YQFULP.js.map +1 -0
  42. package/dist/cli/chunk-L3VPEESB.js +31 -0
  43. package/dist/cli/chunk-L3VPEESB.js.map +1 -0
  44. package/dist/cli/{chunk-ENFBF6HI.js → chunk-N4SEBLU4.js} +383 -5
  45. package/dist/cli/chunk-N4SEBLU4.js.map +1 -0
  46. package/dist/cli/chunk-NRROJXXT.js +879 -0
  47. package/dist/cli/chunk-NRROJXXT.js.map +1 -0
  48. package/dist/cli/{chunk-3KRRTLC5.js → chunk-R6KIHEF3.js} +1619 -1036
  49. package/dist/cli/chunk-R6KIHEF3.js.map +1 -0
  50. package/dist/cli/{chunk-VVMY4M7J.js → chunk-SBHF5NWD.js} +27 -4
  51. package/dist/cli/chunk-SBHF5NWD.js.map +1 -0
  52. package/dist/cli/{chunk-OWA42BKS.js → chunk-SXSAWOB7.js} +14 -14
  53. package/dist/cli/{chunk-6IUMTRFP.js → chunk-UMZ6KHTS.js} +2 -2
  54. package/dist/cli/{chunk-7X4JJOO7.js → chunk-UO6E7FN3.js} +69 -5
  55. package/dist/cli/{chunk-7X4JJOO7.js.map → chunk-UO6E7FN3.js.map} +1 -1
  56. package/dist/cli/{chunk-3ZZXQ3CZ.js → chunk-UPW544V3.js} +2 -2
  57. package/dist/cli/{chunk-XJZWMU5P.js → chunk-WPOKBW5E.js} +2 -2
  58. package/dist/cli/{chunk-WSBFVOCO.js → chunk-Z3MKG7MQ.js} +2 -2
  59. package/dist/cli/{code-TBK2TASK.js → code-BMXLBC7D.js} +37 -36
  60. package/dist/cli/{code-TBK2TASK.js.map → code-BMXLBC7D.js.map} +1 -1
  61. package/dist/cli/{commands-NXTKSQTN.js → commands-E4RZXMF6.js} +5 -5
  62. package/dist/cli/{commit-IR5SPP7A.js → commit-KSRQ64IL.js} +3 -3
  63. package/dist/cli/{config-XK5WQGTS.js → config-QNDONOTU.js} +4 -2
  64. package/dist/cli/{desktop-5NTQBADL.js → desktop-H3ZHIMDA.js} +83 -37
  65. package/dist/cli/desktop-H3ZHIMDA.js.map +1 -0
  66. package/dist/cli/{diff-JNYX5BSZ.js → diff-I4PYI43W.js} +9 -9
  67. package/dist/cli/{doctor-IKYLUFXX.js → doctor-Y2E4MY2F.js} +12 -12
  68. package/dist/cli/{events-HSC57ONU.js → events-47HOT7ZA.js} +5 -5
  69. package/dist/cli/find-in-code-YLEIK5FK.js +145 -0
  70. package/dist/cli/find-in-code-YLEIK5FK.js.map +1 -0
  71. package/dist/cli/index.js +95 -44
  72. package/dist/cli/index.js.map +1 -1
  73. package/dist/cli/{mcp-BDJJWOCD.js → mcp-76DK63ZB.js} +3 -3
  74. package/dist/cli/{mcp-browse-NJRZDI6V.js → mcp-browse-SDNUGO74.js} +3 -3
  75. package/dist/cli/{mcp-inspect-Y62NWZQL.js → mcp-inspect-BL5DEO5M.js} +3 -3
  76. package/dist/cli/{prompt-UTOIFUQC.js → prompt-JLATI3P7.js} +5 -5
  77. package/dist/cli/{prune-sessions-UCUD4XAP.js → prune-sessions-WHZDFUKD.js} +4 -4
  78. package/dist/cli/{replay-VVIN64MN.js → replay-MHXS7C7Z.js} +10 -10
  79. package/dist/cli/{run-76OBDZFB.js → run-SXNCPRJE.js} +22 -22
  80. package/dist/cli/{server-SZZDKTH2.js → server-GEHOE6CO.js} +61 -35
  81. package/dist/cli/server-GEHOE6CO.js.map +1 -0
  82. package/dist/cli/{sessions-FZTGRCM5.js → sessions-EPBFYISL.js} +18 -18
  83. package/dist/cli/{setup-4UNENGOE.js → setup-IW2XR5XI.js} +8 -7
  84. package/dist/cli/setup-IW2XR5XI.js.map +1 -0
  85. package/dist/cli/{stats-F4NDOD7D.js → stats-4WB4XHBP.js} +6 -6
  86. package/dist/cli/symbols-UQ274IOB.js +167 -0
  87. package/dist/cli/symbols-UQ274IOB.js.map +1 -0
  88. package/dist/cli/version-4SP3DLLH.js +33 -0
  89. package/dist/index.d.ts +25 -6
  90. package/dist/index.js +2700 -578
  91. package/dist/index.js.map +1 -1
  92. package/package.json +6 -3
  93. package/scripts/postinstall.mjs +10 -0
  94. package/dist/cli/acp-6B25WIFF.js.map +0 -1
  95. package/dist/cli/chat-7WASPB4O.js +0 -50
  96. package/dist/cli/chunk-3KRRTLC5.js.map +0 -1
  97. package/dist/cli/chunk-3RNFYDDM.js.map +0 -1
  98. package/dist/cli/chunk-AAHB2PFX.js.map +0 -1
  99. package/dist/cli/chunk-CAGKEGNE.js.map +0 -1
  100. package/dist/cli/chunk-ENFBF6HI.js.map +0 -1
  101. package/dist/cli/chunk-GPUH2BNM.js.map +0 -1
  102. package/dist/cli/chunk-I6FBSTTR.js.map +0 -1
  103. package/dist/cli/chunk-IBRTU5WO.js.map +0 -1
  104. package/dist/cli/chunk-IK6WWRIX.js.map +0 -1
  105. package/dist/cli/chunk-MXWPAPZW.js.map +0 -1
  106. package/dist/cli/chunk-PYIZZAVQ.js.map +0 -1
  107. package/dist/cli/chunk-S4XVGLRW.js.map +0 -1
  108. package/dist/cli/chunk-VVMY4M7J.js.map +0 -1
  109. package/dist/cli/desktop-5NTQBADL.js.map +0 -1
  110. package/dist/cli/server-SZZDKTH2.js.map +0 -1
  111. package/dist/cli/setup-4UNENGOE.js.map +0 -1
  112. package/dist/cli/version-LUVTWHLL.js +0 -33
  113. /package/dist/cli/{chat-7WASPB4O.js.map → chat-NJ2Q5KHG.js.map} +0 -0
  114. /package/dist/cli/{chunk-OPGWCKKU.js.map → chunk-2HVTBFCI.js.map} +0 -0
  115. /package/dist/cli/{chunk-AJIZ5KFK.js.map → chunk-2WUEAI2I.js.map} +0 -0
  116. /package/dist/cli/{chunk-I4Q3QT4W.js.map → chunk-36BM7INR.js.map} +0 -0
  117. /package/dist/cli/{chunk-GMSAB2TC.js.map → chunk-3YRTIWFX.js.map} +0 -0
  118. /package/dist/cli/{chunk-NLRC3DWQ.js.map → chunk-544J4PXD.js.map} +0 -0
  119. /package/dist/cli/{chunk-7WITYWKN.js.map → chunk-5AIDYVH2.js.map} +0 -0
  120. /package/dist/cli/{chunk-ALCOQP6R.js.map → chunk-5BBC6YMV.js.map} +0 -0
  121. /package/dist/cli/{chunk-FQSQFCBI.js.map → chunk-BA5R6BAE.js.map} +0 -0
  122. /package/dist/cli/{chunk-XWPZHWC2.js.map → chunk-BM6BBFAV.js.map} +0 -0
  123. /package/dist/cli/{chunk-EZ57UEZQ.js.map → chunk-C2MRSJTV.js.map} +0 -0
  124. /package/dist/cli/{chunk-ZAXMJANP.js.map → chunk-EAMXOWUW.js.map} +0 -0
  125. /package/dist/cli/{chunk-TX652NBA.js.map → chunk-EWVFGYT6.js.map} +0 -0
  126. /package/dist/cli/{chunk-X2BQZQEE.js.map → chunk-K3QJ3GKI.js.map} +0 -0
  127. /package/dist/cli/{chunk-OWA42BKS.js.map → chunk-SXSAWOB7.js.map} +0 -0
  128. /package/dist/cli/{chunk-6IUMTRFP.js.map → chunk-UMZ6KHTS.js.map} +0 -0
  129. /package/dist/cli/{chunk-3ZZXQ3CZ.js.map → chunk-UPW544V3.js.map} +0 -0
  130. /package/dist/cli/{chunk-XJZWMU5P.js.map → chunk-WPOKBW5E.js.map} +0 -0
  131. /package/dist/cli/{chunk-WSBFVOCO.js.map → chunk-Z3MKG7MQ.js.map} +0 -0
  132. /package/dist/cli/{commands-NXTKSQTN.js.map → commands-E4RZXMF6.js.map} +0 -0
  133. /package/dist/cli/{commit-IR5SPP7A.js.map → commit-KSRQ64IL.js.map} +0 -0
  134. /package/dist/cli/{config-XK5WQGTS.js.map → config-QNDONOTU.js.map} +0 -0
  135. /package/dist/cli/{diff-JNYX5BSZ.js.map → diff-I4PYI43W.js.map} +0 -0
  136. /package/dist/cli/{doctor-IKYLUFXX.js.map → doctor-Y2E4MY2F.js.map} +0 -0
  137. /package/dist/cli/{events-HSC57ONU.js.map → events-47HOT7ZA.js.map} +0 -0
  138. /package/dist/cli/{mcp-BDJJWOCD.js.map → mcp-76DK63ZB.js.map} +0 -0
  139. /package/dist/cli/{mcp-browse-NJRZDI6V.js.map → mcp-browse-SDNUGO74.js.map} +0 -0
  140. /package/dist/cli/{mcp-inspect-Y62NWZQL.js.map → mcp-inspect-BL5DEO5M.js.map} +0 -0
  141. /package/dist/cli/{prompt-UTOIFUQC.js.map → prompt-JLATI3P7.js.map} +0 -0
  142. /package/dist/cli/{prune-sessions-UCUD4XAP.js.map → prune-sessions-WHZDFUKD.js.map} +0 -0
  143. /package/dist/cli/{replay-VVIN64MN.js.map → replay-MHXS7C7Z.js.map} +0 -0
  144. /package/dist/cli/{run-76OBDZFB.js.map → run-SXNCPRJE.js.map} +0 -0
  145. /package/dist/cli/{sessions-FZTGRCM5.js.map → sessions-EPBFYISL.js.map} +0 -0
  146. /package/dist/cli/{stats-F4NDOD7D.js.map → stats-4WB4XHBP.js.map} +0 -0
  147. /package/dist/cli/{version-LUVTWHLL.js.map → version-4SP3DLLH.js.map} +0 -0
@@ -3,7 +3,7 @@ import { createRequire as __cr } from 'node:module'; if (typeof globalThis.requi
3
3
  import {
4
4
  loadLanguage,
5
5
  saveLanguage
6
- } from "./chunk-MXWPAPZW.js";
6
+ } from "./chunk-A5PBEIJ7.js";
7
7
 
8
8
  // src/i18n/EN.ts
9
9
  var EN = {
@@ -664,6 +664,8 @@ var EN = {
664
664
  deepseek5xxUnreachable: " DeepSeek API is unreachable from your network \u2014 could be a wider DS outage or a local network issue.",
665
665
  deepseek5xxActionNetwork: " Try: (1) check your network, (2) wait 30s and retry, (3) status page: https://status.deepseek.com.",
666
666
  deepseek5xxActionRetry: " Try: (1) wait 30s and retry, (2) /model to switch model, (3) status page: https://status.deepseek.com.",
667
+ upstream5xxHead: "Upstream service unavailable ({status}) at {host} \u2014 the configured API endpoint returned a server error, not a Reasonix bug. Already retried 4\xD7 with backoff.",
668
+ upstream5xxActionRetry: " Try: (1) check that the local/proxy model server is up, (2) wait and retry, (3) /model to switch model.",
667
669
  innerNoMessage: "(no message)",
668
670
  reasonAborted: "[aborted by user (Esc) \u2014 summarizing what I found so far]",
669
671
  reasonContextGuard: "[context budget running low \u2014 summarizing before the next call would overflow]",
@@ -844,6 +846,7 @@ var EN = {
844
846
  modelSet: "model \u2192 {id}",
845
847
  effortStatus: "effort \u2192 {current} (pick: {list})",
846
848
  effortUsage: "usage: /effort <{list}> (high is the safe default; max is a DeepSeek extension)",
849
+ effortUsageNoMax: "usage: /effort <{list}>",
847
850
  effortSet: "effort \u2192 {effort}",
848
851
  budgetNoCap: "no session budget set \u2014 Reasonix will keep going until you stop it. Set one with: /budget <usd> (e.g. /budget 5)",
849
852
  budgetStatus: "budget: ${spent} of ${cap} ({pct}%) \xB7 /budget off to clear, /budget <usd> to change",
@@ -1656,6 +1659,1707 @@ var EN = {
1656
1659
  }
1657
1660
  };
1658
1661
 
1662
+ // src/i18n/de.ts
1663
+ var de = {
1664
+ ...EN,
1665
+ common: {
1666
+ ...EN.common,
1667
+ error: "Fehler",
1668
+ warning: "Warnung",
1669
+ loading: "Wird geladen...",
1670
+ done: "Fertig",
1671
+ cancel: "Abbrechen",
1672
+ confirm: "Best\xE4tigen",
1673
+ back: "Zur\xFCck",
1674
+ next: "Weiter",
1675
+ tool: "Werkzeug",
1676
+ running: "l\xE4uft",
1677
+ noTurns: "(noch keine Turns)"
1678
+ },
1679
+ cli: {
1680
+ ...EN.cli,
1681
+ description: "DeepSeek-natives Agent-Framework, gebaut f\xFCr Cache-Treffer und g\xFCnstige Tokens.",
1682
+ continue: "Die zuletzt verwendete Chat-Sitzung fortsetzen, ohne die Auswahl anzuzeigen.",
1683
+ setup: "Interaktiver Assistent f\xFCr API-Schl\xFCssel und MCP-Server. Jederzeit erneut ausf\xFChrbar.",
1684
+ chat: "Interaktive Ink-TUI mit Live-Cache- und Kostenanzeige.",
1685
+ run: "Eine einzelne Aufgabe nicht-interaktiv ausf\xFChren, Ausgabe wird gestreamt.",
1686
+ stats: "Nutzungsdashboard anzeigen.",
1687
+ doctor: "Gesundheitscheck mit einem Befehl.",
1688
+ code: "Code-Editor-Chat \u2014 Dateisystem-Werkzeuge mit Wurzel in <dir> (Standard: cwd), Coding-System-Prompt, v4-flash-Baseline.",
1689
+ commit: "Commit-Nachricht aus der gestagten Diff entwerfen.",
1690
+ sessions: "Gespeicherte Chat-Sitzungen auflisten oder nach Name anzeigen.",
1691
+ pruneSessions: "Inaktive Sitzungen ab N Tagen l\xF6schen (Standard 90). Mit --dry-run zur Vorschau.",
1692
+ events: "Kernel-Event-Log-Seite lesbar ausgeben.",
1693
+ replay: "Interaktive Ink-TUI zum Durchbl\xE4ttern eines Transkripts.",
1694
+ diff: "Zwei Transkripte in einer geteilten Ink-TUI vergleichen.",
1695
+ mcp: "Model-Context-Protocol-Hilfsprogramme \u2014 Server entdecken, Setup testen.",
1696
+ index: "Lokalen semantischen Suchindex erstellen (oder inkrementell aktualisieren).",
1697
+ version: "Reasonix-Version ausgeben.",
1698
+ update: "Nach einer neueren Reasonix-Version suchen und installieren."
1699
+ },
1700
+ stats: {
1701
+ ...EN.stats,
1702
+ usageHint: "F\xFChre `reasonix chat`, `reasonix code` oder `reasonix run <task>` aus \u2013 jeden Turn",
1703
+ usageDetail: "H\xE4ngt eine Zeile an das Log an; `reasonix stats` fasst sie zusammen."
1704
+ },
1705
+ run: {
1706
+ ...EN.run,
1707
+ missingApiKey: "DEEPSEEK_API_KEY ist nicht gesetzt und stdin ist kein TTY (Nachfrage nicht m\xF6glich).\nSetze die Umgebungsvariable oder starte einmal interaktiv `reasonix chat`, um einen Schl\xFCssel zu speichern.\n"
1708
+ },
1709
+ sessions: {
1710
+ ...EN.sessions,
1711
+ emptyHint: "noch keine gespeicherten Sitzungen \u2013 starte `reasonix chat` (Sitzungen werden automatisch gespeichert, au\xDFer mit --no-session).",
1712
+ listHeader: "Gespeicherte Sitzungen (~/.reasonix/sessions/):",
1713
+ inspectHint: "Ansehen: reasonix sessions <name>",
1714
+ resumeHint: "Fortsetzen: reasonix chat --session <name>",
1715
+ noSession: 'keine Sitzung namens "{name}" (oder sie ist leer).',
1716
+ lookedAt: "Angesehen: {path}",
1717
+ noIdleSessions: "Keine Sitzungen seit >= {days} Tagen inaktiv. Nichts bereinigt.",
1718
+ wouldPrune: "W\xFCrde {count} Sitzung(en) bereinigen, die >= {days} Tage inaktiv sind:",
1719
+ dryRunHint: "Ohne --dry-run erneut ausf\xFChren, um wirklich zu l\xF6schen.",
1720
+ prunedCount: "{count} Sitzung(en) bereinigt, die >= {days} Tage inaktiv waren:",
1721
+ daysInvalid: "--days muss eine positive ganze Zahl sein (erhalten: {days})."
1722
+ },
1723
+ ui: {
1724
+ ...EN.ui,
1725
+ tipShownOnce: "einmal angezeigt",
1726
+ modelOverride: "das Standardmodell \xFCberschreiben",
1727
+ noSession: "Sitzungsspeicherung f\xFCr diesen Durchlauf deaktivieren",
1728
+ noMouseHint: "SGR-Mausverfolgung deaktivieren; stellt die native Auswahl per Ziehen und Rechtsklick wieder her",
1729
+ noProxyHint: "HTTPS_PROXY / HTTP_PROXY f\xFCr diesen Durchlauf ignorieren; direkt verbinden",
1730
+ resumeHint: "die angegebene Sitzung zwangsweise fortsetzen (auch wenn sie inaktiv ist)",
1731
+ newHint: "Eine neue Sitzung erzwingen (--session / --continue ignorieren)",
1732
+ transcriptHint: "Pfad zum Speichern der JSONL-Ausgabe",
1733
+ budgetHint: "Sitzungs-USD-Obergrenze \u2013 warnt bei 80 %, verweigert den n\xE4chsten Zug bei 100 %",
1734
+ modelIdHint: "DeepSeek-Modell-ID (z. B. deepseek-v4-flash)",
1735
+ systemPromptHint: "die Standard-Systemeingabeaufforderung \xFCberschreiben",
1736
+ effortHint: "Denkaufwand \u2013 niedrig|mittel|hoch|maximal",
1737
+ sessionNameHint: "Sitzungsname (Standard: \u201Edefault\u201C)",
1738
+ ephemeralHint: "Sitzungsspeicherung f\xFCr diesen Durchlauf deaktivieren",
1739
+ mcpSpecHint: "MCP-Server-Spezifikation (wiederholbar)",
1740
+ mcpPrefixHint: "Stelle diesen String vor die Namen der MCP-Tools",
1741
+ noConfigHint: "Ignoriere bei diesem Durchlauf die Datei ~/.reasonix/config.json",
1742
+ effortHintShort: "Denkaufwand \u2013 niedrig|mittel|hoch|maximal",
1743
+ budgetHintShort: "Sitzungs-USD-Obergrenze",
1744
+ transcriptHintShort: "Pfad zum JSONL-Transkript",
1745
+ mcpSpecHintShort: "MCP-Server-Spezifikation (wiederholbar)",
1746
+ mcpPrefixHintShort: "Pr\xE4fix f\xFCr MCP-Toolnamen",
1747
+ dryRunHint: "anzeigen, was installiert w\xFCrde, ohne es tats\xE4chlich zu installieren",
1748
+ rebuildHint: "den Index komplett neu erstellen",
1749
+ embedModelHint: "Name des Einbettungsmodells",
1750
+ projectDirHint: "Projektstammverzeichnis",
1751
+ ollamaUrlHint: "Ollama-Server-URL",
1752
+ skipPromptsHint: "Best\xE4tigungsaufforderungen \xFCberspringen",
1753
+ verboseHint: "Alle Metadaten der Sitzung anzeigen",
1754
+ pruneDaysHint: "Sitzungen l\xF6schen, die seit mindestens dieser Anzahl von Tagen inaktiv sind (Standard: 90)",
1755
+ pruneDryRunHint: "Liste auf, was gel\xF6scht w\xFCrde, ohne etwas zu entfernen",
1756
+ eventTypeHint: "Nach Veranstaltungstyp filtern",
1757
+ eventSinceHint: "Beginne mit dieser Ereignis-ID",
1758
+ eventTailHint: "Nur die letzten N Ereignisse anzeigen",
1759
+ jsonHint: "Ausgabe als JSON",
1760
+ projectionHint: "Zeige den voraussichtlichen Zustand bei jedem Ereignis an",
1761
+ printHint: "Anzeige \xFCber stdout statt \xFCber die TUI",
1762
+ headHint: "Zeige nur die ersten N Ereignisse an",
1763
+ tailHint: "Nur die letzten N Ereignisse anzeigen",
1764
+ mdReportHint: "Erstelle einen Markdown-Diff-Bericht unter diesem Pfad",
1765
+ printHintTable: "Eine Tabelle auf die Standardausgabe ausgeben",
1766
+ tuiHint: "\xD6ffne die interaktive TUI",
1767
+ labelAHint: "Bezeichnung f\xFCr den linken Bereich",
1768
+ labelBHint: "Bezeichnung f\xFCr den rechten Bereich",
1769
+ mcpListDescription: "Durchsuche das MCP-Register (offiziell \u2192 smithery \u2192 lokaler Fallback)",
1770
+ mcpInspectDescription: "die Spezifikationen eines MCP-Servers pr\xFCfen (Tools, Ressourcen, Eingabeaufforderungen)",
1771
+ mcpSearchDescription: "Suche in der MCP-Registrierung nach Servern, die einer Suchanfrage entsprechen",
1772
+ mcpInstallDescription: "Einen MCP-Server anhand seines Namens installieren (schreibt dessen Spezifikation in deine Konfiguration)",
1773
+ mcpBrowseDescription: "Interaktiver Marktplatz-Browser \u2013 tippe, um zu filtern, dr\xFCcke die Eingabetaste, um zu installieren",
1774
+ mcpLocalHint: "Nur den mitgelieferten Offline-Katalog anzeigen",
1775
+ mcpRefreshHint: "den 24-Stunden-Cache umgehen und neu abrufen",
1776
+ mcpLimitHint: "Maximale Anzahl der anzuzeigenden Eintr\xE4ge",
1777
+ mcpPagesHint: "Lade gleich so viele Seiten (Standard: 1)",
1778
+ mcpAllHint: "Jede Seite laden (beim ersten Mal etwas langsam)",
1779
+ mcpMaxPagesHint: "Begrenze die Anzahl der Seiten, die bei der Suche durchsucht werden sollen (Standard: 20)",
1780
+ jsonHintCatalog: "Ausgabe als JSON",
1781
+ jsonHintReport: "Gib den Inspektionsbericht als JSON aus",
1782
+ modelOverrideFlash: "das Modell \xFCberschreiben (Standard: deepseek-v4-flash)",
1783
+ skipConfirmHint: "Die Best\xE4tigungsabfrage \xFCberspringen",
1784
+ welcome: "Starte jederzeit `reasonix`, um zu chatten \u2013 deine Einstellungen bleiben gespeichert.",
1785
+ taglineChat: "DeepSeek-nativer Agent",
1786
+ taglineCode: "DeepSeek-nativer Coding-Agent",
1787
+ taglineSub: "cache-first \xB7 flash-first",
1788
+ startSessionHint: "Tippe eine Nachricht, um deine Sitzung zu starten",
1789
+ inputPlaceholder: "Frag etwas... (tippe / f\xFCr Befehle, @ f\xFCr Dateien)",
1790
+ busy: "Denke nach...",
1791
+ thinking: "\u25B8 denke nach...",
1792
+ undo: "R\xFCckg\xE4ngig",
1793
+ undoHint: "Dr\xFCcke innerhalb von 5s zum R\xFCckg\xE4ngig machen",
1794
+ applied: "angewendet",
1795
+ rejected: "abgelehnt",
1796
+ noDashboard: "Automatisch gestartetes eingebettetes Web-Dashboard unterdr\xFCcken.",
1797
+ openDashboardHint: "Dashboard-URL sofort im Standard-Browser \xF6ffnen, sobald der Server bereit ist. Keine Wirkung bei --no-dashboard.",
1798
+ dashboardPortHint: "Dashboard auf einen festen Port (1\u201365535) festlegen. Stabil \xFCber Neustarts hinweg \u2014 erforderlich f\xFCr SSH-Tunnel. Standard: ephemeral.",
1799
+ dashboardPortInvalid: "\u25B2 --dashboard-port={value} wird ignoriert (muss eine ganze Zahl 1\u201365535 sein) \u2014 R\xFCckfall auf ephemeral",
1800
+ dashboardAutoStartFailed: "\u25B2 Dashboard-Autostart fehlgeschlagen ({reason}) \u2014 /dashboard versuchen oder --no-dashboard zum Unterdr\xFCcken",
1801
+ systemAppendHint: "Anweisungen an den Code-System-Prompt anh\xE4ngen. Ersetzt NICHT den Standard-Prompt \u2014 wird danach eingef\xFCgt.",
1802
+ systemAppendFileHint: "Dateiinhalte an den Code-System-Prompt anh\xE4ngen. Ersetzt NICHT den Standard-Prompt. UTF-8, relativ zu cwd oder absolut.",
1803
+ resumedSession: '\u25B8 Sitzung "{name}" fortgesetzt mit {count} vorherigen Nachrichten \xB7 /new f\xFCr frischen Start \xB7 /sessions zum Verwalten',
1804
+ newSession: '\u25B8 Sitzung "{name}" (neu) \u2014 automatisch gespeichert w\xE4hrend des Chattens \xB7 /sessions zum Umbenennen oder L\xF6schen',
1805
+ ephemeralSession: "\u25B8 ephemerer Chat (keine Sitzungspersistenz) \u2014 --no-session weglassen zum Aktivieren",
1806
+ restoredEdits: "\u25B8 {count} ausstehende Edit-Block(s) aus einem unterbrochenen vorherigen Durchlauf wiederhergestellt \u2014 /apply zum \xDCbernehmen oder /discard zum Verwerfen.",
1807
+ resumedPlan: "Fortgesetzter Plan \xB7 {when}{summary}"
1808
+ },
1809
+ code: {
1810
+ ...EN.code,
1811
+ workspaceConflict: "\u26A0 Arbeitsbereich enth\xE4lt Dateien einer anderen Agent-Plattform ({platforms}). Reasonix Code kann sie als Projektinhalt lesen; starte mit --dir <dein-projekt> neu, falls das nicht gew\xFCnscht ist.\n",
1812
+ systemAppendEmpty: "--system-append ist leer \u2014 kein Prompt-Text wird angeh\xE4ngt\n",
1813
+ systemAppendFileReadError: 'Fehler: kann --system-append-file "{filePath}" nicht lesen: {errorDetails}\n'
1814
+ },
1815
+ slash: {
1816
+ ...EN.slash,
1817
+ help: { ...EN.slash.help, description: "Vollst\xE4ndige Befehlsreferenz anzeigen" },
1818
+ status: { ...EN.slash.status, description: "Aktuelles Modell, Flags, Kontext und Sitzung" },
1819
+ effort: {
1820
+ ...EN.slash.effort,
1821
+ argsHint: "<niedrig|mittel|hoch|max>",
1822
+ description: "Reasoning-Effort-Grenze (low|medium|high|max); high ist der sichere Standard f\xFCr vLLM/Azure"
1823
+ },
1824
+ model: {
1825
+ ...EN.slash.model,
1826
+ description: "DeepSeek-Modell-ID wechseln"
1827
+ },
1828
+ models: {
1829
+ ...EN.slash.models,
1830
+ description: "Verf\xFCgbare Modelle von DeepSeek /models abrufen"
1831
+ },
1832
+ language: {
1833
+ description: "Laufzeitsprache wechseln",
1834
+ argsHint: "<EN|zh-CN|de>",
1835
+ success: "Sprache auf Deutsch umgestellt.",
1836
+ unsupported: "Nicht unterst\xFCtzter Sprachcode: {code}. Unterst\xFCtzt: {supported}."
1837
+ },
1838
+ budget: {
1839
+ ...EN.slash.budget,
1840
+ description: "Session-USD-Grenze \u2014 warnt bei 80 %, verweigert n\xE4chsten Turn bei 100 %. Standardm\xE4\xDFig aus. /budget allein zeigt Status."
1841
+ },
1842
+ mcp: { ...EN.slash.mcp, description: "MCP-Server + Tools dieser Sitzung auflisten" },
1843
+ resource: {
1844
+ ...EN.slash.resource,
1845
+ description: "MCP-Ressourcen durchsuchen + lesen (kein Arg \u2192 URIs auflisten; <uri> \u2192 Inhalt abrufen)"
1846
+ },
1847
+ prompt: {
1848
+ ...EN.slash.prompt,
1849
+ argsHint: "[Name]",
1850
+ description: "MCP-Prompts durchsuchen + abrufen (kein Arg \u2192 Namen auflisten; <name> \u2192 Prompt rendern)"
1851
+ },
1852
+ memory: {
1853
+ ...EN.slash.memory,
1854
+ argsHint: "[Liste|<Name> anzeigen|<Name> vergessen|<Bereich> l\xF6schen \u2013 Best\xE4tigen]",
1855
+ description: "Pinned Memory anzeigen / verwalten (REASONIX.md + ~/.reasonix/memory)"
1856
+ },
1857
+ skill: {
1858
+ ...EN.slash.skill,
1859
+ description: "Benutzer-Skills auflisten / ausf\xFChren (Projekt + benutzerdefiniert + global + builtin)"
1860
+ },
1861
+ hooks: {
1862
+ ...EN.slash.hooks,
1863
+ argsHint: "[Neu laden]",
1864
+ description: "Aktive Hooks auflisten (settings.json unter .reasonix/) \xB7 reload liest von Platte neu"
1865
+ },
1866
+ permissions: {
1867
+ ...EN.slash.permissions,
1868
+ argsHint: "[Liste|<Pr\xE4fix> hinzuf\xFCgen|<Pr\xE4fix|N> entfernen|L\xF6schen (Best\xE4tigung erforderlich)]",
1869
+ description: "Shell-Allowlist anzeigen / bearbeiten (builtin schreibgesch\xFCtzt \xB7 pro Projekt: ~/.reasonix/config.json)"
1870
+ },
1871
+ dashboard: {
1872
+ ...EN.slash.dashboard,
1873
+ argsHint: "[Stopp]",
1874
+ description: "Eingebettetes Web-Dashboard starten (127.0.0.1, token-gesichert)"
1875
+ },
1876
+ update: {
1877
+ ...EN.slash.update,
1878
+ description: "Aktuelle vs. neueste Version anzeigen + Upgrade-Befehl"
1879
+ },
1880
+ stats: {
1881
+ ...EN.slash.stats,
1882
+ description: "Sitzungs\xFCbergreifendes Kosten-Dashboard (heute / Woche / Monat / gesamt \xB7 Cache-Treffer \xB7 vs. Claude)"
1883
+ },
1884
+ cost: {
1885
+ ...EN.slash.cost,
1886
+ argsHint: "[Text]",
1887
+ description: "ohne Text \u2192 Ausgaben letzter Turn (Kostenkarte); mit Text \u2192 Kostensch\xE4tzung f\xFCr als n\xE4chster Senden (worst-case + likely-cache)"
1888
+ },
1889
+ doctor: {
1890
+ ...EN.slash.doctor,
1891
+ description: "Gesundheitscheck (API / Config / API-Reichweite / Index / Hooks / Projekt)"
1892
+ },
1893
+ context: {
1894
+ ...EN.slash.context,
1895
+ description: "Context-Window-Aufschl\xFCsselung (System / Tools / Log / Input)"
1896
+ },
1897
+ retry: {
1898
+ ...EN.slash.retry,
1899
+ description: "Letzte Nachricht k\xFCrzen & erneut senden (frischer Sample)"
1900
+ },
1901
+ compact: {
1902
+ ...EN.slash.compact,
1903
+ argsHint: "[Token]",
1904
+ description: "\xDCberdimensionierte Tool-Ergebnisse + Tool-Call-Args im Log k\xFCrzen; Grenze in Tokens, Standard 4000"
1905
+ },
1906
+ cwd: {
1907
+ ...EN.slash.cwd,
1908
+ argsHint: "[Pfad]",
1909
+ description: "Workspace-Root mid-Session wechseln \u2014 FS-/Shell-/Memory-Tools neu ausrichten, Projekt-Hooks neu laden, @-Mention-Walker aktualisieren"
1910
+ },
1911
+ stop: {
1912
+ ...EN.slash.stop,
1913
+ description: "Aktuellen Modell-Turn abbrechen (getippte Alternative zu Esc)"
1914
+ },
1915
+ feedback: {
1916
+ ...EN.slash.feedback,
1917
+ description: "GitHub-Issue mit Diagnoseinfo \xF6ffnen (in Zwischenablage kopiert)"
1918
+ },
1919
+ about: { ...EN.slash.about, description: "Projektinfo \u2014 Version, Website, Repo, Lizenz" },
1920
+ keys: { ...EN.slash.keys, description: "Tastatur + Maus + Kopieren/Einf\xFCgen-Referenz" },
1921
+ plans: {
1922
+ ...EN.slash.plans,
1923
+ description: "Aktive + archivierte Pl\xE4ne dieser Sitzung auflisten, neueste zuerst"
1924
+ },
1925
+ replay: {
1926
+ ...EN.slash.replay,
1927
+ description: "Archivierten Plan als schreibgesch\xFCtzte Time-Travel-Schnappschuss laden (Standard: neuester)"
1928
+ },
1929
+ sessions: {
1930
+ ...EN.slash.sessions,
1931
+ description: "Gespeicherte Sitzungen auflisten (aktuelle mit \u25B8 markiert)"
1932
+ },
1933
+ title: {
1934
+ ...EN.slash.title,
1935
+ description: "Modell bitten, diese Sitzung anhand des Gespr\xE4chs umzubenennen"
1936
+ },
1937
+ qq: {
1938
+ ...EN.slash.qq,
1939
+ description: "QQ-Kanal verbinden, inspizieren oder trennen (erste Verbindung f\xFChrt durch App-ID / App-Secret-Setup)"
1940
+ },
1941
+ setup: { ...EN.slash.setup, description: "Erinnert dich daran, `reasonix setup` auszuf\xFChren" },
1942
+ semantic: {
1943
+ ...EN.slash.semantic,
1944
+ description: "Semantic-Search-Status anzeigen \u2014 Index erstellt? Ollama installiert? Wie aktivieren?"
1945
+ },
1946
+ clear: {
1947
+ ...EN.slash.clear,
1948
+ description: "Nur sichtbaren Scrollback leeren (Log/Kontext bleibt)"
1949
+ },
1950
+ new: {
1951
+ ...EN.slash.new,
1952
+ description: "Frisches Gespr\xE4ch beginnen (Kontext + Scrollback l\xF6schen)"
1953
+ },
1954
+ loop: {
1955
+ ...EN.slash.loop,
1956
+ argsHint: "<5s..6h> <Eingabeaufforderung> \xB7 Stopp \xB7 (keine Argumente = Status)",
1957
+ description: "Prompt automatisch alle <intervall> erneut senden, bis du etwas eingibst / Esc / /loop stop"
1958
+ },
1959
+ init: {
1960
+ ...EN.slash.init,
1961
+ description: "Projekt scannen und eine REASONIX.md-Baseline erstellen (Modell schreibt; mit /apply reviewen). `force` \xFCberschreibt vorhandene Datei."
1962
+ },
1963
+ apply: {
1964
+ ...EN.slash.apply,
1965
+ description: "Ausstehende Edit-Blocks auf Platte schreiben (kein Arg \u2192 alle; `1`, `1,3` oder `1-4` \u2192 diese Teilmenge, Rest bleibt ausstehend)"
1966
+ },
1967
+ discard: {
1968
+ ...EN.slash.discard,
1969
+ description: "Ausstehende Edit-Blocks ohne Schreiben verwerfen (kein Arg \u2192 alle; Indizes \u2192 diese Teilmenge)"
1970
+ },
1971
+ walk: {
1972
+ ...EN.slash.walk,
1973
+ description: "Schrittweise durch ausstehende Edits gehen (git-add-p-Stil: y/n pro Block, a = Rest anwenden, A = AUTO umschalten)"
1974
+ },
1975
+ undo: { ...EN.slash.undo, description: "Letzten angewandten Edit-Batch r\xFCckg\xE4ngig machen" },
1976
+ history: {
1977
+ ...EN.slash.history,
1978
+ description: "Jeden Edit-Batch dieser Sitzung auflisten (IDs f\xFCr /show, r\xFCckg\xE4ngig-Markierungen)"
1979
+ },
1980
+ show: {
1981
+ ...EN.slash.show,
1982
+ description: "Gespeicherte Edit-Diff ausgeben (ID weglassen f\xFCr neuesten nicht-r\xFCckg\xE4ngigen)"
1983
+ },
1984
+ commit: { ...EN.slash.commit, description: "git add -A && git commit -m ..." },
1985
+ checkpoint: {
1986
+ ...EN.slash.checkpoint,
1987
+ argsHint: "[Name|Liste|<ID> l\xF6schen]",
1988
+ description: "Jede Datei, die die Sitzung ber\xFChrt hat, als Schnappschuss sichern (Cursor-artiger interner Speicher, nicht Git). /checkpoint allein listet auf."
1989
+ },
1990
+ restore: {
1991
+ ...EN.slash.restore,
1992
+ description: "Dateien auf einen benannten Checkpoint zur\xFCcksetzen (siehe /checkpoint list)"
1993
+ },
1994
+ plan: {
1995
+ ...EN.slash.plan,
1996
+ argsHint: "[Ein|Aus]",
1997
+ description: "Schreibgesch\xFCtzten Plan-Modus umschalten (Schreibzugriffe blockiert bis submit_plan + Genehmigung)"
1998
+ },
1999
+ mode: {
2000
+ ...EN.slash.mode,
2001
+ argsHint: "[Rezension|Auto|YOLO]",
2002
+ description: "Edit-Gate: review (Warteschlange) \xB7 auto (anwenden+r\xFCckg\xE4ngig) \xB7 yolo (anwenden+auto-shell). Shift+Tab schaltet um."
2003
+ },
2004
+ jobs: {
2005
+ ...EN.slash.jobs,
2006
+ description: "Hintergrund-Jobs auflisten, die mit run_background gestartet wurden"
2007
+ },
2008
+ kill: {
2009
+ ...EN.slash.kill,
2010
+ argsHint: "Bezeichner",
2011
+ description: "Hintergrund-Job nach ID beenden (SIGTERM \u2192 SIGKILL nach Gnadenfrist)"
2012
+ },
2013
+ logs: {
2014
+ ...EN.slash.logs,
2015
+ argsHint: "<id> [Zeilen]",
2016
+ description: "Ausgabe eines Hintergrund-Jobs anzeigen (Standard letzte 80 Zeilen)"
2017
+ },
2018
+ btw: {
2019
+ ...EN.slash.btw,
2020
+ argsHint: "<Frage>",
2021
+ description: "Kurze Randfrage stellen \u2014 wird von Grund auf beantwortet, nie zum Gespr\xE4chskontext hinzugef\xFCgt"
2022
+ },
2023
+ "search-engine": {
2024
+ ...EN.slash["search-engine"],
2025
+ description: "Web-Search-Backend wechseln \u2014 bing (Standard, funktioniert von CN ohne Proxy), searxng (selbst gehostet), metaso (kostenlos 100/Tag), tavily (kostenlos 1000/Monat), perplexity (AI-native) oder exa (AI-native)"
2026
+ },
2027
+ theme: {
2028
+ ...EN.slash.theme,
2029
+ argsHint: "[auto|dunkel|hell|mitternachtsblau|tiefblau|hoher Kontrast]",
2030
+ description: "Terminal-Theme anzeigen oder speichern. Ohne Argument \xF6ffnet die Auswahl."
2031
+ },
2032
+ exit: { ...EN.slash.exit, description: "TUI beenden" }
2033
+ },
2034
+ wizard: {
2035
+ ...EN.wizard,
2036
+ languageTitle: "Sprache ausw\xE4hlen",
2037
+ languageSubtitle: "Aus der Systemsprache erkannt. Sp\xE4ter mit /language wechselbar.",
2038
+ welcomeTitle: "Willkommen bei Reasonix.",
2039
+ apiKeyPrompt: "F\xFCge deinen DeepSeek-API-Schl\xFCssel ein, um loszulegen.",
2040
+ apiKeyGetOne: "Erhalte einen unter: https://platform.deepseek.com/api_keys",
2041
+ apiKeySavedLocally: "Lokal gespeichert unter {path}",
2042
+ apiKeyInputLabel: "Schl\xFCssel > ",
2043
+ apiKeyPlaceholder: "sk-...",
2044
+ apiKeyInvalid: "Der Schl\xFCssel wirkt zu kurz \u2013 f\xFCge den vollst\xE4ndigen Token ein (16+ Zeichen, keine Leerzeichen).",
2045
+ apiKeyChecking: "API-Schl\xFCssel wird gepr\xFCft...",
2046
+ apiKeyRejected: "DeepSeek hat diesen API-Schl\xFCssel abgelehnt. F\xFCge einen g\xFCltigen Schl\xFCssel ein oder brich das Setup mit Esc ab.",
2047
+ apiKeyCheckFailed: "Konnte diesen API-Schl\xFCssel gerade nicht verifizieren ({message}). \xDCberpr\xFCfe deine Netzwerkverbindung oder versuche es erneut.",
2048
+ apiKeyPreview: "Vorschau: {redacted}",
2049
+ themeTitle: "Theme ausw\xE4hlen",
2050
+ themeSubtitle: "Die Vorschau aktualisiert sich beim Navigieren. Sp\xE4ter mit /theme \xE4nderbar.",
2051
+ themeSampleHeading: "Beispiel",
2052
+ themeFooter: "[\u2191\u2193] navigieren \xB7 [Enter] best\xE4tigen \xB7 [Esc] abbrechen",
2053
+ themeCaption: {
2054
+ ...EN.wizard.themeCaption,
2055
+ dark: "K\xFChle dunkle T\xF6ne (Standard)",
2056
+ light: "Helle klare Ansicht",
2057
+ midnight: "Tokyo-Night-Palette",
2058
+ "deep-blue": "Tiefblau auf Schwarz",
2059
+ "high-contrast": "Barrierefreiheit"
2060
+ },
2061
+ mcpTitle: "Welche MCP-Server soll Reasonix f\xFCr dich einrichten?",
2062
+ mcpUserArgsHint: "(du wirst {arg} bereitstellen)",
2063
+ mcpFooterMulti: "[\u2191\u2193] navigieren \xB7 [Leertaste] umschalten \xB7 [Enter] best\xE4tigen \xB7 [Esc] abbrechen \xB7 leer = \xFCberspringen",
2064
+ mcpArgsTitle: "{name} konfigurieren",
2065
+ mcpArgsDirMissing: "Verzeichnis {path} existiert nicht.",
2066
+ mcpArgsDirCreateHint: "[Y/Enter] erstellen (mkdir -p) \xB7 [N/Esc] anderen Pfad eingeben",
2067
+ mcpArgsDirCreateFailed: "Konnte {path} nicht erstellen: {message}",
2068
+ mcpArgsRequiredParam: "Erforderlicher Parameter: ",
2069
+ mcpArgsEmpty: "{name} ben\xF6tigt einen Wert \u2014 leere Zeichenkette erhalten.",
2070
+ mcpArgsNotADir: "{path} existiert, ist aber kein Verzeichnis.",
2071
+ reviewTitle: "Bereit zum Speichern",
2072
+ reviewLabelApiKey: "API-Schl\xFCssel",
2073
+ reviewLabelLanguage: "Sprache",
2074
+ reviewLabelTheme: "Theme",
2075
+ reviewLabelMcp: "MCP",
2076
+ reviewMcpNone: "(keine)",
2077
+ reviewMcpServers: "{count} Server",
2078
+ reviewSavesTo: "Speichert nach {path}",
2079
+ reviewSaveError: "Konfiguration konnte nicht gespeichert werden: {message}",
2080
+ reviewFooter: "[Enter] speichern \xB7 [Esc] abbrechen",
2081
+ savedTitle: "\u25B8 Gespeichert.",
2082
+ savedShellHint: 'Shell-Befehle, die das Modell ausf\xFChren m\xF6chte, fragen jedes Mal nach \u2013 w\xE4hle \xBBimmer erlauben" in der Eingabeaufforderung, um diesen genauen Befehl f\xFCr dieses Projekt auf die Whitelist zu setzen. Kein globales Allow-All-Flag (designbedingt).',
2083
+ savedFooter: "[Enter] zum Beenden",
2084
+ selectFooter: "[\u2191\u2193] navigieren \xB7 [Enter] best\xE4tigen \xB7 [Esc] abbrechen",
2085
+ stepCounter: "Schritt {step}/{total} \xB7 ",
2086
+ exitHint: "/exit zum Abbrechen",
2087
+ themeSampleReasoning: "Denken"
2088
+ },
2089
+ themePicker: {
2090
+ ...EN.themePicker,
2091
+ header: "Theme",
2092
+ footer: "\u2191\u2193 ausw\xE4hlen \xB7 \u23CE best\xE4tigen \xB7 Esc abbrechen",
2093
+ currentPref: "Aktuelle Einstellung",
2094
+ activeNow: "Jetzt aktiv",
2095
+ autoDesc: "REASONIX_THEME oder Standard verwenden"
2096
+ },
2097
+ planFlow: {
2098
+ ...EN.planFlow,
2099
+ approveCardTitle: "Plan genehmigen",
2100
+ approveCardMetaRight: "wartet",
2101
+ openQuestionsBanner: "\u25B2 der Plan zeigt offene Fragen oder Risiken \u2014 w\xE4hle {refine}, um konkrete Antworten zu schreiben, bevor das Modell fortf\xE4hrt.",
2102
+ openQuestionsHeader: "Offene Fragen / Risiken",
2103
+ truncatedBodyMore: "\u2026 {n} weitere Zeile oben im Scrollback",
2104
+ truncatedBodyMorePlural: "\u2026 {n} weitere Zeilen oben im Scrollback",
2105
+ picker: {
2106
+ ...EN.planFlow.picker,
2107
+ accept: "akzeptieren",
2108
+ acceptHint: "Jetzt ausf\xFChren, in Reihenfolge",
2109
+ refine: "verfeinern",
2110
+ refineHint: "Dem Agenten mehr Anweisungen geben, neuen Plan entwerfen",
2111
+ revise: "\xFCberarbeiten",
2112
+ reviseHint: "Plan inline bearbeiten vor der Ausf\xFChrung (Schritte \xFCberspringen/neu ordnen)",
2113
+ reject: "ablehnen",
2114
+ rejectHint: "Verwerfen, Agent versucht von Grund auf neu"
2115
+ },
2116
+ refineFooter: "\u23CE senden \xB7 Esc zur\xFCck zur Auswahl",
2117
+ refineQuestionsHeading: "Beantworte diese oder beschreibe die gew\xFCnschte \xC4nderung:",
2118
+ modes: {
2119
+ ...EN.planFlow.modes,
2120
+ approve: {
2121
+ ...EN.planFlow.modes.approve,
2122
+ title: "Genehmigen \u2014 letzte Anweisungen?",
2123
+ hint: "Beantworte Fragen aus dem Plan, f\xFCge Einschr\xE4nkungen hinzu oder dr\xFCcke einfach Enter zur Genehmigung.",
2124
+ blankHint: " (Enter ohne Text = ohne Zusatzanweisungen genehmigen.)"
2125
+ },
2126
+ refine: {
2127
+ ...EN.planFlow.modes.refine,
2128
+ title: "Verfeinern \u2014 was soll das Modell \xE4ndern?",
2129
+ hint: "Beschreibe, was falsch ist oder fehlt, oder beantworte Fragen aus dem Plan.",
2130
+ blankHint: " (Enter ohne Text = Modell w\xE4hlt sichere Standardwerte f\xFCr offene Fragen.)"
2131
+ },
2132
+ reject: {
2133
+ ...EN.planFlow.modes.reject,
2134
+ title: "Ablehnen \u2014 sag dem Modell warum (optional)",
2135
+ hint: "Sag dem Modell, was es an deinem Ziel falsch verstanden hat oder was du stattdessen m\xF6chtest.",
2136
+ blankHint: " (Enter ohne Text = ohne Erkl\xE4rung abbrechen; das Modell fragt, was du m\xF6chtest.)"
2137
+ },
2138
+ "checkpoint-revise": {
2139
+ ...EN.planFlow.modes["checkpoint-revise"],
2140
+ title: "\xDCberarbeiten \u2014 was soll sich vor dem n\xE4chsten Schritt \xE4ndern?",
2141
+ hint: "Umfangs\xE4nderung, Schritte \xFCberspringen, alternativer Ansatz \u2014 das Modell passt den Restplan an.",
2142
+ blankHint: " (Enter ohne Text = mit aktuellem Plan fortfahren.)"
2143
+ },
2144
+ "choice-custom": {
2145
+ ...EN.planFlow.modes["choice-custom"],
2146
+ title: "Benutzerdefinierte Antwort \u2014 schreibe, was passt",
2147
+ hint: "Freitext-Antwort. Das Modell liest sie w\xF6rtlich und f\xE4hrt fort \u2014 keine Notwendigkeit, die aufgef\xFChrten Optionen zu treffen.",
2148
+ blankHint: " (Enter ohne Text = Modell fragen, was du eigentlich m\xF6chtest.)"
2149
+ }
2150
+ },
2151
+ checkpoint: {
2152
+ ...EN.planFlow.checkpoint,
2153
+ title: "Checkpoint \u2014 Schritt erledigt",
2154
+ continue: "Fortfahren \u2014 n\xE4chsten Schritt ausf\xFChren",
2155
+ continueHint: "Modell f\xE4hrt mit dem n\xE4chsten Schritt fort.",
2156
+ finish: "Abschlie\xDFen \u2014 zusammenfassen und beenden",
2157
+ finishHint: "Modell zeichnet den letzten Schritt auf und fasst den abgeschlossenen Plan zusammen.",
2158
+ revise: "\xDCberarbeiten \u2014 Feedback vor dem n\xE4chsten Schritt geben",
2159
+ reviseHint: "Bleibe pausiert, tippe Anweisungen; Modell passt den Restplan an.",
2160
+ stop: "Anhalten \u2014 Plan hier beenden",
2161
+ stopHint: "Modell fasst zusammen, was getan wurde, und beendet."
2162
+ },
2163
+ stepList: {
2164
+ ...EN.planFlow.stepList,
2165
+ counter: "{total} Schritte",
2166
+ counterSingular: "{total} Schritt",
2167
+ counterDone: "{done}/{total} erledigt ({pct}%) \xB7 {total} Schritte",
2168
+ counterDoneSingular: "{done}/{total} erledigt ({pct}%) \xB7 {total} Schritt"
2169
+ },
2170
+ noPlanSummary: "Noch kein Plan-Body \xFCbermittelt.",
2171
+ detailCollapsedHint: "Strg+P erweitert die vollst\xE4ndigen Plan-Details.",
2172
+ detailExpandedHint: "Strg+P klappt Details ein.",
2173
+ detailHeader: "Plan-Details",
2174
+ detailWindow: "Zeige Zeilen {start}-{end} von {total}",
2175
+ detailScrollHint: "Bild\u2191/Bild\u2193 scrollt Details \xB7 Pos1/Ende springt",
2176
+ reviseTitle: "Plan \xFCberarbeiten",
2177
+ reviseSteps: "{count} Schritte",
2178
+ reviseFooter: "\u2191\u2193 fokussieren \xB7 Leertaste \xFCberspringen umschalten \xB7 k/j verschieben \xB7 \u23CE akzeptieren \xB7 Esc abbrechen",
2179
+ riskMed: " mittel",
2180
+ riskHigh: " hoch",
2181
+ completeMsg: "\u25B8 Plan abgeschlossen \u2014 alle {total} Schritt{e} erledigt \xB7 archiviert"
2182
+ },
2183
+ app: {
2184
+ ...EN.app,
2185
+ dashboardStopped: "\u25B8 Dashboard gestoppt.",
2186
+ notedScopeProject: "Projekt",
2187
+ notedScopeGlobal: "global",
2188
+ commandFailed: "! Befehl fehlgeschlagen",
2189
+ btwFailed: "/btw fehlgeschlagen",
2190
+ walkCancelledRemaining: "\u25B8 Walk abgebrochen \u2014 {count} Block(s) noch ausstehend.",
2191
+ walkCancelled: "\u25B8 Walk abgebrochen.",
2192
+ editModeYolo: "\u25B8 Edit-Modus: YOLO \u2014 Edits UND Shell-Befehle auto-ausf\xFChren. /undo macht Edits immer noch r\xFCckg\xE4ngig. Vorsicht.",
2193
+ editModeAuto: "\u25B8 Edit-Modus: AUTO \u2014 Edits werden sofort angewandt; dr\xFCcke u innerhalb von 5s zum R\xFCckg\xE4ngigmachen (Leertaste pausiert den Timer). Shell-Befehle fragen weiterhin.",
2194
+ editModeReview: "\u25B8 Edit-Modus: review \u2014 Edits warten auf /apply (oder y) / /discard (oder n)",
2195
+ rejectedEdit: "\u25B8 Edit abgelehnt: {path}{context}",
2196
+ autoApprovingRest: "\u25B8 Restliche Edits f\xFCr diesen Turn werden automatisch genehmigt",
2197
+ flippedAutoSession: "\u25B8 F\xFCr den Rest der Sitzung auf AUTO umgeschaltet (gespeichert)",
2198
+ flippedAutoWalk: "\u25B8 Auf AUTO umgeschaltet \u2014 zuk\xFCnftige Edits werden sofort angewandt. Walk beendet.",
2199
+ notedMemory: "\u25B8 vermerkt ({scope}) \u2014 {verb} {path}",
2200
+ notedVerbCreated: "erstellt",
2201
+ notedVerbAppended: "Angeh\xE4ngt an",
2202
+ memoryWriteFailed: "# Speicherschreibfehler",
2203
+ verboseOn: "\u25B8 Ausf\xFChrlicher Modus an \u2014 vollst\xE4ndiges Reasoning + Tool-Ausgabe",
2204
+ verboseOff: "\u25B8 Ausf\xFChrlicher Modus aus \u2014 head/tail-K\xFCrzung wiederhergestellt",
2205
+ steerInjected: "\u25B8 Steuerung in Warteschlange \u2014 wird nach dem aktuellen Schritt hinzugef\xFCgt",
2206
+ steerCommandRejected: "\u25B8 Befehle sind deaktiviert, w\xE4hrend ein Turn gesteuert wird",
2207
+ btwUsage: "\u25B8 /btw <Frage> \u2014 eine Randfrage stellen, ohne den Gespr\xE4chskontext zu verschmutzen.",
2208
+ btwHeader: "\u226B btw",
2209
+ restoreCodeOnly: "\u25B8 /restore ist nur im Code-Modus verf\xFCgbar",
2210
+ hookUserPromptSubmit: "UserPromptSubmit-Hook",
2211
+ hookStop: "Stop-Hook",
2212
+ atMentions: "\u25B8 @mentions: {parts}",
2213
+ atUrl: "\u25B8 @url: {parts}",
2214
+ atUrlFailed: "@url Erweiterung fehlgeschlagen",
2215
+ sessionTitleNoSession: "\u25B8 Keine persistierte Sitzung aktiv, also nichts umzubenennen.",
2216
+ sessionTitleNoContent: "\u25B8 Noch nicht genug Gespr\xE4chsinhalt, um diese Sitzung zu benennen.",
2217
+ sessionTitleNoTitle: "\u25B8 Das Modell hat keinen brauchbaren Sitzungstitel zur\xFCckgegeben.",
2218
+ sessionTitleUpdated: '\u25B8 Sitzungstitel aktualisiert: "{title}"',
2219
+ sessionTitleRenameFailed: '\u25B8 Sitzung konnte nicht f\xFCr Titel "{title}" umbenannt werden.',
2220
+ sessionTitleRenamed: '\u25B8 Sitzung umbenannt in "{name}" \u2014 {title}',
2221
+ sessionTitleAutoRenamed: '\u25B8 Automatisch benannte Sitzung "{name}" \u2014 {title}',
2222
+ workspaceSwitched: "\u25B8 Arbeitsbereich gewechselt zu {root}",
2223
+ semanticRepointed: "\u25B8 Semantic-Search umgeleitet nach {root}",
2224
+ semanticDisabledForRoot: "\u25B8 Semantic-Search deaktiviert (kein kompatibler Index in {root})",
2225
+ semanticRebootstrapFailed: "\u25B8 Semantic-Search-Neustart fehlgeschlagen: {reason}",
2226
+ denied: "\u25B8 verweigert: {cmd}{context}",
2227
+ alwaysAllowed: '\u25B8 "{prefix}" f\xFCr {dir} dauerhaft erlaubt',
2228
+ runningCommand: "\u25B8 f\xFChre aus: {cmd}",
2229
+ startingBackground: "\u25B8 starte (Hintergrund): {cmd}",
2230
+ checkpointSaved: "\u26C1 Checkpoint gespeichert \xB7 {id} \xB7 {count} Datei{en} \xB7 /restore {id} zum Zur\xFCcksetzen",
2231
+ continuingAfter: "\u25B8 fortgesetzen nach {label}{counter}",
2232
+ planStoppedAt: "\u25B8 Plan angehalten bei {label}{counter}",
2233
+ revisingAfter: "\u25B8 \xFCberarbeite nach {label} \u2014 {feedback}",
2234
+ historyScrollHint: " \u2191 lese Verlauf \xB7 Ende / Bild\u2193 zur\xFCck zum Ende \xB7 \u2193 eine Zeile vor",
2235
+ editHistoryTitle: "Edit-Verlauf (\xE4lteste zuerst):",
2236
+ editHistoryNoCodeMode: "Nicht im Code-Modus",
2237
+ editHistoryNoEdits: "Noch keine Edits in dieser Sitzung aufgezeichnet",
2238
+ editHistoryNoShowId: "Verwendung: /show [id] [pfad] (ID weglassen f\xFCr neueste; Pfad aus der Datei-Zusammenfassung)",
2239
+ editHistoryIdNotFound: "Kein Edit #{id} \u2014 /history ausf\xFChren f\xFCr g\xFCltige IDs",
2240
+ editHistoryLookupFailed: "Unerwartet: History-Lookup fehlgeschlagen",
2241
+ editHistoryBatchNoFile: 'Batch #{id} enth\xE4lt kein "{path}" \u2014 Dateien in diesem Batch: {files}',
2242
+ editHistoryNoEdits2: "Keine Edits in dieser Sitzung aufgezeichnet \u2014 /history ist leer",
2243
+ editHistoryStatusApplied: "angewandt",
2244
+ editHistoryStatusPartial: "TEILWEISE",
2245
+ editHistoryStatusUndone: "R\xDCCKG\xC4NGIG",
2246
+ editHistoryHelpShow: "/show <id> \u2192 Zusammenfassung pro Datei \xB7 /show <id> <pfad> \u2192 vollst\xE4ndige Diff einer Datei",
2247
+ editHistoryHelpUndo: "/undo \u2192 neueste nicht-r\xFCckg\xE4ngige \xB7 /undo <id> [pfad] \u2192 gezielten Batch oder Datei r\xFCckg\xE4ngig machen",
2248
+ editHistoryAlreadyReverted: "(bereits r\xFCckg\xE4ngig gemacht \u2014 /history zeigt den batch-level Status)",
2249
+ editHistoryRevertFile: "/undo {id} {path} \u2192 nur diese Datei r\xFCckg\xE4ngig machen",
2250
+ mcpFailed: "MCP {name} fehlgeschlagen",
2251
+ mcpWarn: "MCP {name} Warnung",
2252
+ unknownTheme: "Unbekanntes Theme: {name}\nVerf\xFCgbar: {choices}",
2253
+ themeSaved: "Theme gespeichert: {name}\nAktiv beim n\xE4chsten Start: {active}",
2254
+ noPendingEdits: "Nichts ausstehend \u2014 das Modell hat seit dem letzten /apply oder /discard keine Edits vorgeschlagen.",
2255
+ noMatchedApply: "\u25B8 Keine Edits mit diesen Indizes gefunden \u2014 nichts angewandt. Verwende /apply ohne Argumente, um alle zu \xFCbernehmen.",
2256
+ noPendingDiscard: "Nichts ausstehend zum Verwerfen.",
2257
+ noMatchedDiscard: "\u25B8 Keine Edits mit diesen Indizes gefunden \u2014 nichts verworfen.",
2258
+ blocksStillPending: "\u25B8 {count} Edit-Block(s) noch ausstehend \u2014 /apply oder /discard zum Bereinigen.",
2259
+ nothingWritten: ". Nichts auf Platte geschrieben.",
2260
+ discardedCount: "\u25B8 {count} ausstehende Edit-Block(s) verworfen",
2261
+ noEventsFor: 'Keine Ereignisse f\xFCr Sitzung "{name}"',
2262
+ lookedAtFile: "Angesehen: {path}",
2263
+ sidecarHint: "(Sitzungen erstellen den Sidecar automatisch beim ersten Turn \u2014 wurde diese Sitzung bereits ausgef\xFChrt?)"
2264
+ },
2265
+ hooks: {
2266
+ ...EN.hooks,
2267
+ head: "Hook {tag} `{cmd}` {decision}{truncTag}",
2268
+ headWithDetail: "Hook {tag} `{cmd}` {decision}{truncTag}: {detail}",
2269
+ truncated: " (Ausgabe bei 256 KB gek\xFCrzt)",
2270
+ decisionBlock: "blockieren",
2271
+ decisionWarn: "warnen",
2272
+ decisionTimeout: "Timeout",
2273
+ decisionError: "Fehler"
2274
+ },
2275
+ summary: {
2276
+ ...EN.summary,
2277
+ status: "Zusammenfassung der gesammelten Informationen...",
2278
+ hallucinatedFallback: "(Modell hat gef\xE4lschte Tool-Call-Markup statt einer Prosa-Zusammenfassung ausgegeben \u2014 versuche /retry mit einer engeren Frage, oder /think zur Inspektion von R1s Reasoning)",
2279
+ failedAfterReason: "{label} und der Fallback-Summary-Aufruf sind fehlgeschlagen: {message}. F\xFChre /clear aus und versuche es mit einer engeren Frage, oder erh\xF6he --max-tool-iters."
2280
+ },
2281
+ loop: {
2282
+ ...EN.loop,
2283
+ budgetExhausted: "Sitzungsbudget ersch\xF6pft \u2014 ${spent} ausgegeben \u2265 Grenze ${cap}. Erh\xF6he die Grenze mit /budget <usd>, schalte sie mit /budget off aus oder beende die Sitzung.",
2284
+ budget80Pct: "\u25B2 Budget zu 80 % verbraucht \u2014 ${spent} von ${cap}. Der n\xE4chste oder \xFCbern\xE4chste Turn erreicht wahrscheinlich die Grenze.",
2285
+ proArmed: "\u21E7 /pro aktiviert \u2014 dieser Turn l\xE4uft auf deepseek-v4-pro (einmalig \xB7 deaktiviert nach dem Turn)",
2286
+ toolUploadStatus: "Tool-Ergebnis hochgeladen \u2013 Modell denkt vor der n\xE4chsten Antwort...",
2287
+ turnStartFoldStatus: "Turn-Start: Kontext n\xE4hert sich Grenze, komprimiere Verlauf...",
2288
+ turnStartFolded: "Turn-Start: Anfrage ~{estimate}/{ctxMax} Tokens ({pct}%) \u2014 {beforeMessages} Nachrichten \u2192 {afterMessages} komprimiert. Sende.",
2289
+ harvestStatus: "Planstatus wird aus dem Reasoning extrahiert...",
2290
+ repeatToolCallWarning: "Wiederholten Tool-Aufruf erkannt \u2014 lasse das Modell das Problem sehen und es mit einem anderen Ansatz erneut versuchen.",
2291
+ stormStuck: "Festgefahrene Wiederholungsschleife gestoppt \u2014 das Modell rief dasselbe Tool mit identischen Argumenten auf, selbst nach einem Selbstkorrektur-Hinweis. Versuche /retry, umformulieren oder schlie\xDFe den zugrunde liegenden Blocker aus.",
2292
+ stormSuppressed: "{count} wiederholte Tool-Aufrufe unterdr\xFCckt \u2014 gleicher Name + Argumente 3+ Mal gesendet.",
2293
+ compactingHistoryStatus: "Komprimiere Verlauf{aggressiveTag}...",
2294
+ aggressiveTag: " (aggressiv)",
2295
+ foldedHistory: "Kontext {before}/{ctxMax} ({pct}%) \u2014 {beforeMessages} Nachrichten \u2192 {afterMessages} gefaltet (Zusammenfassung {summaryChars} Zeichen). Fahre fort.",
2296
+ aggressivelyFoldedHistory: "Kontext {before}/{ctxMax} ({pct}%) \u2014 {beforeMessages} Nachrichten \u2192 {afterMessages} aggressiv gefaltet (Zusammenfassung {summaryChars} Zeichen). Fahre fort.",
2297
+ forcingSummary: "Kontext {before}/{ctxMax} ({pct}%) \u2014 erzwinge Zusammenfassung aus dem Gesammelten. F\xFChre /compact, /clear oder /new aus, um zur\xFCckzusetzen."
2298
+ },
2299
+ errors: {
2300
+ ...EN.errors,
2301
+ contextOverflow: "Context-\xDCberlauf (DeepSeek 400): Sitzungsverlauf ist {requested}, \xFCber dem Prompt-Limit des Modells (V4: 1M Tokens; legacy chat/reasoner: 131k). Meist ist ein einzelnes Tool-Ergebnis zu gro\xDF geworden. Reasonix begrenzt neue Tool-Ergebnisse auf 8k Tokens und heilt \xFCberdimensionierte Verl\xE4ufe automatisch beim Sitzungsladen \u2013 ein Neustart behebt es oft. Falls es weiterhin \xFCberl\xE4uft, f\xFChre /new f\xFCr einen frischen Start aus oder \xF6ffne /sessions und dr\xFCcke [d], um diese Sitzung zu l\xF6schen.",
2302
+ contextOverflowTooMany: "Zu viele Tokens",
2303
+ auth401: "Authentifizierung fehlgeschlagen (DeepSeek 401): {inner}. Dein API-Schl\xFCssel wird abgewiesen. Behebe mit `reasonix setup` oder `export DEEPSEEK_API_KEY=sk-...`. Erhalte einen unter https://platform.deepseek.com/api_keys.",
2304
+ balance402: "Kontoguthaben aufgebraucht (DeepSeek 402): {inner}. Lade auf unter https://platform.deepseek.com/top_up \u2014 der Panel-Header zeigt dein Guthaben, sobald es nicht Null ist.",
2305
+ badparam422: "Ung\xFCltiger Parameter (DeepSeek 422): {inner}",
2306
+ badrequest400: "Fehlerhafte Anfrage (DeepSeek 400): {inner}",
2307
+ concurrency429: "DeepSeek-Gleichzeitigkeitslimit erreicht (429): {inner}. Das Konto hat zu viele gleichzeitige Anfragen (Grenze: 500 f\xFCr v4-pro, 2500 f\xFCr v4-flash, summiert \xFCber alle API-Schl\xFCssel des Kontos). Meist l\xE4uft ein weiterer Reasonix-Prozess mit demselben Schl\xFCssel oder ein paralleler Subagent-Fan-out hat \xFCberzogen. Warte einige Sekunden und wiederhole, reduziere die Parallelit\xE4t oder beantrage eine h\xF6here Grenze unter https://platform.deepseek.com.",
2308
+ deepseek5xxHead: "DeepSeek-Dienst nicht verf\xFCgbar ({status}) \u2014 dies ist ein DeepSeek-seitiges Problem, nicht Reasonix. Bereits 4\xD7 mit Backoff wiederholt.",
2309
+ deepseek5xxReachable: " DeepSeek's Haupt-API hat auf unseren Health-Check geantwortet, aber /chat/completions schl\xE4gt fehl \u2014 partieller Ausfall auf ihrer Seite.",
2310
+ deepseek5xxUnreachable: " DeepSeek-API ist von deinem Netzwerk aus nicht erreichbar \u2014 k\xF6nnte ein gr\xF6\xDFerer DS-Ausfall oder ein lokales Netzwerkproblem sein.",
2311
+ deepseek5xxActionNetwork: " Versuche: (1) Netzwerk pr\xFCfen, (2) 30s warten und wiederholen, (3) Statusseite: https://status.deepseek.com.",
2312
+ deepseek5xxActionRetry: " Versuche: (1) 30s warten und wiederholen, (2) /model zum Modellwechsel, (3) Statusseite: https://status.deepseek.com.",
2313
+ upstream5xxHead: "Upstream-Dienst nicht verf\xFCgbar ({status}) bei {host} \u2014 der konfigurierte API-Endpunkt hat einen Serverfehler zur\xFCckgegeben, kein Reasonix-Fehler. Bereits 4\xD7 mit Backoff wiederholt.",
2314
+ upstream5xxActionRetry: " Versuche: (1) Pr\xFCfen, ob der lokale/Proxy-Modell-Server l\xE4uft, (2) warten und wiederholen, (3) /model zum Modellwechsel.",
2315
+ innerNoMessage: "(keine Nachricht)",
2316
+ reasonAborted: "[vom Benutzer abgebrochen (Esc) \u2014 fasse zusammen, was ich bisher gefunden habe]",
2317
+ reasonContextGuard: "[Context-Budget wird knapp \u2014 fasse zusammen, bevor der n\xE4chste Aufruf \xFCberl\xE4uft]",
2318
+ reasonStuck: "[festgefahren bei wiederholtem Tool-Aufruf \u2014 erkl\xE4re, was versucht wurde und was den Fortschritt blockiert]",
2319
+ labelAborted: "Vom Benutzer abgebrochen",
2320
+ labelContextGuard: "Context-Guard ausgel\xF6st (Prompt > 80 % des Fensters)",
2321
+ labelStuck: "Festgefahren (wiederholter Tool-Aufruf durch Storm-Breaker unterdr\xFCckt)"
2322
+ },
2323
+ handlers: {
2324
+ ...EN.handlers,
2325
+ basic: {
2326
+ ...EN.handlers.basic,
2327
+ newInfo: "\u25B8 neues Gespr\xE4ch \u2014 {count} Nachricht(en) aus dem Kontext entfernt. Gleiche Sitzung, frische Grundlage.",
2328
+ newInfoArchived: '\u25B8 neues Gespr\xE4ch \u2014 {count} Nachricht(en) aus dem Kontext entfernt. Vorheriges Transkript als "{archived}" archiviert (sichtbar unter Sitzungen).',
2329
+ newInfoSystemReloaded: " \xB7 REASONIX.md / Projekt-Memory neu geladen (n\xE4chster Turn zahlt einen Cache-Fehler)",
2330
+ helpTitle: "Befehle:",
2331
+ helpShellTitle: "Shell-K\xFCrzel:",
2332
+ helpShell: " !<befehl> <befehl> im Sandbox-Root ausf\xFChren; Ausgabe kommt",
2333
+ helpShellDetail: " in die Konversation, sodass das Modell sie im n\xE4chsten Turn sieht.",
2334
+ helpShellConsent: " Kein Allowlist-Gate \u2014 vom Benutzer getippt = explizite Zustimmung.",
2335
+ helpShellExample: " Beispiel: !git status !ls src/ !npm test",
2336
+ helpShellGateTitle: "Vom Modell aufgerufene Shell-Befehle (pro Aufruf Genehmigung):",
2337
+ helpShellGate: " \u2191\u2193 + \u23CE jeder Aufruf zeigt eine Eingabeaufforderung mit \xBBEinmal erlauben\xAB / \xBBImmer erlauben\xAB",
2338
+ helpShellGateDetail: " / \xBBAblehnen\xAB. W\xE4hle \xBBImmer erlauben\xAB, um diesen genauen",
2339
+ helpShellGatePolicy: " Befehlspr\xE4fix f\xFCr dieses Projekt auf die Whitelist zu setzen. Kein globales Allow-All-Flag.",
2340
+ helpMemoryTitle: "Kurzzeit-Memory:",
2341
+ helpMemoryPin: " #<notiz> <notiz> an <projekt>/REASONIX.md anh\xE4ngen (commitierbar).",
2342
+ helpMemoryPinEx: " Beispiel: #findByEmail muss case-insensitive sein",
2343
+ helpMemoryGlobal: " #g <notiz> <notiz> an ~/.reasonix/REASONIX.md anh\xE4ngen (global, niemals committed).",
2344
+ helpMemoryGlobalEx: " Beispiel: #g immer pnpm, nicht npm verwenden",
2345
+ helpMemoryPinBoth: " Beide werden in jedes zuk\xFCnftige Sitzungs-Pr\xE4fix eingef\xFCgt. Schneller als /memory.",
2346
+ helpMemoryEscape: " Verwende `\\#text`, um ein literales `#text` an das Modell zu senden.",
2347
+ helpFileTitle: "Dateiverweise (Code-Modus):",
2348
+ helpFile: " @pfad/zu/datei Dateiinhalt unter [Referenzierte Dateien] beim Senden einf\xFCgen.",
2349
+ helpFilePicker: " Tippe `@`, um die Auswahl zu \xF6ffnen (\u2191\u2193 navigieren, Tab/Enter ausw\xE4hlen).",
2350
+ helpUrlTitle: "URL-Verweise:",
2351
+ helpUrl: " @https://example.com URL abrufen, HTML entfernen, unter [Referenzierte URLs] einf\xFCgen.",
2352
+ helpUrlCache: " Gleiche URL zweimal in einer Sitzung wird nur einmal abgerufen (In-Mem-Cache).",
2353
+ helpUrlPunct: " Abschluss-Satzzeichen (./,/)) werden automatisch entfernt.",
2354
+ helpSessionsTitle: "Sitzungen (standardm\xE4\xDFig aktiviert, hei\xDFen 'default'):",
2355
+ helpSessionCustom: " reasonix chat --session <name> eine andere benannte Sitzung verwenden",
2356
+ helpSessionNone: " reasonix chat --no-session Persistenz f\xFCr diesen Lauf deaktivieren",
2357
+ retryNone: "Nichts zu wiederholen \u2014 keine vorherige Benutzernachricht im Log dieser Sitzung.",
2358
+ retryInfo: '\u25B8 wiederhole: "{preview}"',
2359
+ loopTuiOnly: "/loop ist nur in der interaktiven TUI verf\xFCgbar (nicht in run/replay).",
2360
+ loopStopped: "\u25B8 Loop gestoppt.",
2361
+ loopNoActive: "Kein aktiver Loop zum Stoppen.",
2362
+ loopNoActiveHint: "kein aktiver Loop. Starte einen mit `/loop <intervall> <prompt>` (z.B. /loop 30s npm test).\nWird abgebrochen bei: /loop stop \xB7 Esc \xB7 /clear /new \xB7 jeder benutzereingegebene Prompt.",
2363
+ loopStarted: '\u25B8 Loop gestartet \u2014 \xBB{prompt}" wird alle {duration} erneut gesendet. Tippe etwas (oder /loop stop) zum Abbrechen.',
2364
+ keysNeedsTui: "/keys ben\xF6tigt einen TUI-Kontext (postKeys angeschlossen).",
2365
+ aboutHeader: "Reasonix v{version} \u2014 ein Cache-First-DeepSeek-Coding-Agent",
2366
+ aboutWebsiteLabel: "Webseite",
2367
+ aboutRepoLabel: "GitHub ",
2368
+ aboutLicenseLabel: "Lizenz",
2369
+ unknownCommand: "Unbekannter Befehl: /{cmd} \u2014 meintest du {list}?",
2370
+ unknownCommandShort: "Unbekannter Befehl: /{cmd} (siehe /help)"
2371
+ },
2372
+ sessions: {
2373
+ ...EN.handlers.sessions,
2374
+ titleUnavailable: "/title ist nur in einer aktiven persistierten TUI-Sitzung verf\xFCgbar.",
2375
+ titleStarted: "\u25B8 benenne Sitzung...",
2376
+ titleFailed: "\u25B8 Sitzungstitel fehlgeschlagen: {reason}"
2377
+ },
2378
+ qq: {
2379
+ ...EN.handlers.qq,
2380
+ unavailable: "/qq ist in dieser Sitzung nicht verf\xFCgbar.",
2381
+ connecting: "QQ: verbinde...",
2382
+ connectFailed: "QQ-Verbindung fehlgeschlagen: {reason}",
2383
+ disconnecting: "QQ: trenne...",
2384
+ disconnectFailed: "QQ-Trennung fehlgeschlagen: {reason}",
2385
+ usage: "Verwendung: /qq connect [appId appSecret [sandbox]] | /qq status | /qq disconnect",
2386
+ promptAppId: "QQ-Setup: gib deine QQ-Open-Platform-App-ID ein, dann Enter. Tippe /cancel zum Abbrechen.",
2387
+ promptAppSecret: "QQ-Setup: gib dein QQ-Open-Platform-App-Secret ein, dann Enter. Tippe /cancel zum Abbrechen.",
2388
+ setupWaitingAppId: "Warte auf App-ID",
2389
+ setupWaitingAppSecret: "Warte auf App-Secret",
2390
+ setupCancelled: "QQ-Setup abgebrochen.",
2391
+ credentialsRequired: "QQ-App-ID und App-Secret sind erforderlich.",
2392
+ connected: "QQ im {mode}-Modus verbunden. Es wird bei zuk\xFCnftigen Starts automatisch gestartet.",
2393
+ alreadyConnected: "QQ ist bereits im {mode}-Modus verbunden. Autostart ist aktiviert.",
2394
+ disconnected: "QQ getrennt. Autostart ist deaktiviert.",
2395
+ status: "QQ: {connected}, Autostart {enabled}, Anmeldedaten {configured}, App-ID {appId}, {sandbox}, Zugriff {access}, aktueller Modus {mode}.",
2396
+ statusSetup: "QQ: Setup l\xE4uft \u2014 {step}",
2397
+ stateConnected: "verbunden",
2398
+ stateDisconnected: "getrennt",
2399
+ stateEnabled: "aktiviert",
2400
+ stateDisabled: "deaktiviert",
2401
+ stateConfigured: "konfiguriert",
2402
+ stateNotConfigured: "Nicht konfiguriert",
2403
+ sandbox: "Sandbox",
2404
+ production: "Produktion",
2405
+ none: "keine",
2406
+ modeChat: "Chat",
2407
+ modeCode: "Code",
2408
+ accessOwner: "Besitzer {owner}",
2409
+ accessOwnerWithAllowlist: "Besitzer {owner}, Allowlist {count}",
2410
+ accessAllowlist: "Allowlist {count}",
2411
+ accessRuntime: "Erstabsender (nur zur Laufzeit, {owner})",
2412
+ accessOpen: "Offen (ungebunden)",
2413
+ lockAlreadyRunning: "QQ-Kanal l\xE4uft bereits in Prozess {pid}. Stoppe diesen Prozess, bevor du einen weiteren QQ-Kanal startest.",
2414
+ unauthorizedMessage: "QQ hat Nachricht von nicht autorisierter OpenID {openid} ignoriert. Aktueller Zugriff: {access}.",
2415
+ runtimeBound: "QQ hat diesen Lauf vor\xFCbergehend an den Erstabsender {openid} gebunden. Setze `qq.ownerOpenId` in der Konfiguration, um den Zugriff dauerhaft zu machen.",
2416
+ missingAppId: "QQ-App-ID erforderlich. F\xFChre `/qq connect` zum Konfigurieren aus.",
2417
+ missingAppSecret: "QQ-App-Secret erforderlich. F\xFChre `/qq connect` zum Konfigurieren aus.",
2418
+ authFailed: "QQ-Bot-Authentifizierung fehlgeschlagen \u2014 \xFCberpr\xFCfe deine App-ID und dein App-Secret.",
2419
+ readyTimeout: "QQ-Bot hat READY nicht innerhalb von 15s erhalten \u2014 \xFCberpr\xFCfe deine App-ID und dein App-Secret."
2420
+ },
2421
+ admin: {
2422
+ ...EN.handlers.admin,
2423
+ doctorNeedsTui: "/doctor ben\xF6tigt einen TUI-Kontext (postDoctor angeschlossen).",
2424
+ doctorRunning: "\u2695 Doctor \u2014 f\xFChre Gesundheitschecks aus...",
2425
+ hooksReloadUnavailable: "/hooks reload ist in diesem Kontext nicht verf\xFCgbar (kein Reload-Callback angeschlossen).",
2426
+ hooksReloaded: "\u25B8 Hooks neu geladen \xB7 {count} aktiv",
2427
+ hooksUsage: "Verwendung: /hooks aktive Hooks auflisten\n /hooks reload settings.json-Dateien neu lesen",
2428
+ hooksNone: "Keine Hooks konfiguriert.",
2429
+ hooksDropHint: "Lege eine settings.json mit einem `hooks`-Schl\xFCssel in einem der folgenden Pfade ab:",
2430
+ hooksProject: " \xB7 {path} (Projekt)",
2431
+ hooksProjectFallback: " \xB7 <projekt>/.reasonix/settings.json (Projekt)",
2432
+ hooksGlobal: " \xB7 {path} (global)",
2433
+ hooksEvents: "Ereignisse: PreToolUse, PostToolUse, UserPromptSubmit, Stop",
2434
+ hooksExitCodes: "Exit 0 = bestanden \xB7 Exit 2 = blockieren (Pre*) \xB7 andere = warnen",
2435
+ hooksLoaded: "\u25B8 {count} Hook(s) geladen",
2436
+ hooksSources: "Quellen: Projekt={project} \xB7 global={global}",
2437
+ updateCurrent: "Aktuell: reasonix {version}",
2438
+ updateLatestPending: "Neueste: (noch nicht aufgel\xF6st \u2014 Hintergrundpr\xFCfung l\xE4uft oder offline)",
2439
+ updateRetryHint: "hat einen frischen Registry-Abruf ausgel\xF6st \u2014 versuche `/update` in ein paar Sekunden erneut,",
2440
+ updateRetryHint2: "oder f\xFChre `reasonix update` in einem anderen Terminal aus, um es synchron zu erzwingen.",
2441
+ updateLatest: "Neueste: reasonix {version}",
2442
+ updateUpToDate: "Du bist auf dem neuesten Stand. Nichts zu tun.",
2443
+ updateNpxHint: "du verwendest npx \u2014 der n\xE4chste `npx reasonix ...`-Start l\xE4dt automatisch die neueste Version.",
2444
+ updateNpxForce: "Um fr\xFCher zu aktualisieren: `npm cache clean --force`.",
2445
+ updateUpgradeHint: "Zum Aktualisieren beende diese Sitzung und f\xFChre aus:",
2446
+ updateUpgradeCmd1: " reasonix update (interaktiv, --dry-run wird unterst\xFCtzt)",
2447
+ updateUpgradeCmd2: " {command} (direkt)",
2448
+ updateInSessionDisabled: "Die Installation innerhalb einer Sitzung ist bewusst deaktiviert \u2014 der Installationsprozess w\xFCrde",
2449
+ updateInSessionDisabled2: "die Darstellung dieser TUI beeintr\xE4chtigen und Windows kann die laufende Bin\xE4rdatei sperren.",
2450
+ statsNoData: "Noch keine Nutzungsdaten.",
2451
+ statsEveryTurn: "jeder hier ausgef\xFChrte Turn h\xE4ngt einen Datensatz an \u2014 die Turns dieser Sitzung",
2452
+ statsWillAppear: "Werden im Dashboard angezeigt, sobald du eine Nachricht sendest."
2453
+ },
2454
+ edits: {
2455
+ ...EN.handlers.edits,
2456
+ undoCodeOnly: "/undo ist nur innerhalb von `reasonix code` verf\xFCgbar \u2014 der Chat-Modus wendet keine Edits an.",
2457
+ historyCodeOnly: "/history ist nur innerhalb von `reasonix code` verf\xFCgbar.",
2458
+ showCodeOnly: "/show ist nur innerhalb von `reasonix code` verf\xFCgbar.",
2459
+ applyCodeOnly: "/apply ist nur innerhalb von `reasonix code` verf\xFCgbar (hier gibt es nichts anzuwenden).",
2460
+ discardCodeOnly: "/discard ist nur innerhalb von `reasonix code` verf\xFCgbar.",
2461
+ planCodeOnly: "/plan ist nur innerhalb von `reasonix code` verf\xFCgbar \u2014 der Chat-Modus blockiert keine Tool-Schreibzugriffe.",
2462
+ planOn: "\u25B8 Plan-Modus EIN \u2014 Schreibwerkzeuge sind blockiert; das Modell MUSS `submit_plan` aufrufen, bevor etwas ausgef\xFChrt wird. (Das Modell kann auch eigenst\xE4ndig submit_plan f\xFCr gro\xDFe Aufgaben aufrufen, selbst wenn der Plan-Modus aus ist \u2014 dieser Schalter ist die strengere, explizite Einschr\xE4nkung.) Tippe /plan off zum Verlassen.",
2463
+ planOff: "\u25B8 Plan-Modus AUS \u2014 Schreibwerkzeuge sind wieder aktiv. Modelle k\xF6nnen weiterhin eigenst\xE4ndig Pl\xE4ne f\xFCr gro\xDFe Aufgaben vorschlagen.",
2464
+ modeCodeOnly: "/mode ist nur innerhalb von `reasonix code` verf\xFCgbar.",
2465
+ modeUsage: "Verwendung: /mode <review|auto|yolo> (Shift+Tab schaltet auch um)",
2466
+ modeYolo: "\u25B8 Edit-Modus: YOLO \u2014 Edits UND Shell-Befehle auto-ausf\xFChren ohne Nachfrage. /undo macht Edits immer noch r\xFCckg\xE4ngig. Vorsicht.",
2467
+ modeAuto: "\u25B8 Edit-Modus: AUTO \u2014 Edits werden sofort angewandt; dr\xFCcke u innerhalb von 5s zum R\xFCckg\xE4ngigmachen, oder /undo sp\xE4ter. Shell-Befehle fragen weiterhin.",
2468
+ modeReview: "\u25B8 Edit-Modus: review \u2014 Edits warten auf /apply (oder y) / /discard (oder n)",
2469
+ commitCodeOnly: "/commit ist nur innerhalb von `reasonix code` verf\xFCgbar (ben\xF6tigt ein Git-Repo als Wurzel).",
2470
+ commitUsage: 'Verwendung: /commit "deine Commit-Nachricht" \u2014 f\xFChrt `git add -A && git commit -m "\u2026"` in {root} aus',
2471
+ walkCodeOnly: "/walk ist nur innerhalb von `reasonix code` verf\xFCgbar.",
2472
+ checkpointCodeOnly: "/checkpoint ist nur innerhalb von `reasonix code` verf\xFCgbar \u2014 der Chat-Modus wendet keine Edits an.",
2473
+ checkpointNone: "noch keine Checkpoints \u2014 `/checkpoint <name>` sichert jede Datei, die die Sitzung ber\xFChrt hat. Sp\xE4ter mit `/restore <name>` wiederherstellbar.",
2474
+ checkpointHeader: "\u25C8 Checkpoints \xB7 {count} gespeichert",
2475
+ checkpointRestoreHint: " /restore <name|id> \xB7 /checkpoint forget <id> \xB7 /checkpoint <name> zum Hinzuf\xFCgen",
2476
+ checkpointForgetUsage: "Verwendung: /checkpoint forget <id|name>",
2477
+ checkpointNoMatch: '\u25B8 kein Checkpoint gefunden f\xFCr "{name}" \u2014 siehe /checkpoint list',
2478
+ checkpointDeleted: "\u25B8 Checkpoint {id} gel\xF6scht ({name})",
2479
+ checkpointDeleteFailed: "\u25B8 Konnte {id} nicht l\xF6schen (bereits entfernt?)",
2480
+ checkpointSaveUsage: "Verwendung: /checkpoint <name> (oder /checkpoint list zum Anzeigen vorhandener)",
2481
+ checkpointSavedEmpty: '\u25B8 Checkpoint "{name}" gespeichert ({id}) \u2014 aber es wurden noch keine Dateien ber\xFChrt, daher ist es eine leere Basislinie. Nach diesem Punkt vorgenommene Edits k\xF6nnen r\xFCckg\xE4ngig gemacht werden.',
2482
+ checkpointSaved: '\u25B8 Checkpoint "{name}" gespeichert ({id}) \u2014 {files} Datei{en}, {size} KB. Wiederherstellen: /restore {name}',
2483
+ restoreCodeOnly: "/restore ist nur innerhalb von `reasonix code` verf\xFCgbar.",
2484
+ restoreUsage: "Verwendung: /restore <name|id> (siehe /checkpoint list f\xFCr IDs)",
2485
+ restoreNoMatch: '\u25B8 kein Checkpoint gefunden f\xFCr "{target}" \u2014 versuche /checkpoint list',
2486
+ restoreInfo: '\u25B8 "{name}" ({id}) wiederhergestellt von {when}',
2487
+ restoreWrote: " \xB7 {count} Datei{en} zur\xFCckgeschrieben",
2488
+ restoreRemoved: " \xB7 {count} Datei{en} entfernt (existierten zum Checkpoint-Zeitpunkt nicht)",
2489
+ restoreSkipped: " \u2717 {count} Datei{en} \xFCbersprungen:",
2490
+ cwdCodeOnly: "/cwd ist nur innerhalb von `reasonix code` verf\xFCgbar.",
2491
+ cwdUsage: "Verwendung: /cwd <pfad> (aktuelles Root: {current}). Richtet Dateisystem-/Shell-/Memory-Tools auf <pfad> neu aus.",
2492
+ cwdUsageNoCurrent: "Verwendung: /cwd <pfad> richtet den Workspace-Root auf <pfad> neu aus."
2493
+ },
2494
+ model: {
2495
+ ...EN.handlers.model,
2496
+ modelHint: "versuche deepseek-v4-flash oder deepseek-v4-pro \u2014 f\xFChre /models aus, um die Live-Liste abzurufen",
2497
+ modelUsage: "Verwendung: /model <id> ({hint})",
2498
+ modelNotInCatalog: "Modell \u2192 {id} (\u26A0 nicht im abgerufenen Katalog: {list}. Falls das falsch ist, wird der n\xE4chste Aufruf 400 geben \u2014 f\xFChre /models zum Aktualisieren aus.)",
2499
+ modelSet: "Modell \u2192 {id}",
2500
+ effortStatus: "Effort \u2192 {current} (Auswahl: {list})",
2501
+ effortUsage: "Verwendung: /effort <{list}> (high ist der sichere Standard; max ist eine DeepSeek-Erweiterung)",
2502
+ effortUsageNoMax: "Verwendung: /effort <{list}>",
2503
+ effortSet: "Effort \u2192 {effort}",
2504
+ budgetNoCap: "Kein Sitzungsbudget festgelegt \u2014 Reasonix wird weiterlaufen, bis du es stoppst. Setze eines mit: /budget <usd> (z.B. /budget 5)",
2505
+ budgetStatus: "Budget: ${spent} von ${cap} ({pct}%) \xB7 /budget off zum Entfernen, /budget <usd> zum \xC4ndern",
2506
+ budgetOff: "Budget \u2192 aus (keine Grenze)",
2507
+ budgetUsage: 'Verwendung: /budget <usd> (erhalten: "{arg}" \u2014 muss eine positive Zahl sein, z.B. /budget 5 oder /budget 12.50)',
2508
+ budgetExhausted: "\u25B2 Budget \u2192 ${cap} aber bereits ${spent} ausgegeben. Der n\xE4chste Turn wird verweigert \u2014 erh\xF6he die Grenze, um fortzufahren, oder beende die Sitzung.",
2509
+ budgetSet: "Budget \u2192 ${cap} (bisher: ${spent} \xB7 warnt bei 80 %, verweigert n\xE4chsten Turn bei 100 % \xB7 /budget off zum Entfernen)"
2510
+ },
2511
+ permissions: {
2512
+ ...EN.handlers.permissions,
2513
+ mutateCodeOnly: "/permissions add / remove / clear sind nur innerhalb von `reasonix code` verf\xFCgbar \u2014 sie bearbeiten die projektbezogene Allowlist (`~/.reasonix/config.json` projects[<root>].shellAllowed).",
2514
+ addUsage: 'Verwendung: /permissions add <pr\xE4fix> (mehrere Tokens OK: /permissions add "git push origin")',
2515
+ addAlready: "\u25B8 bereits erlaubt: {prefix}",
2516
+ addBuiltin: "\u25B8 `{prefix}` ist bereits in der Builtin-Allowlist \u2014 kein projektspezifischer Eintrag n\xF6tig. (Builtin-Eintr\xE4ge sind immer aktiv.)",
2517
+ addInfo: "\u25B8 hinzugef\xFCgt: {prefix}\n \u2192 n\xE4chste `{prefix}`-Ausf\xFChrung erfolgt ohne Nachfrage in diesem Projekt.",
2518
+ removeUsage: "Verwendung: /permissions remove <pr\xE4fix-oder-index> (z.B. /permissions remove 3, oder /permissions remove npm)",
2519
+ removeEmpty: "\u25B8 keine Projekt-Allowlist-Eintr\xE4ge zum Entfernen.",
2520
+ removeIndexOob: "\u25B8 Index au\xDFerhalb des Bereichs: {idx} (Projektliste hat {count} Eintr\xE4ge)",
2521
+ removeNothing: "\u25B8 nichts zu entfernen.",
2522
+ removeBuiltin: "\u25B8 `{prefix}` ist in der Builtin-Allowlist (schreibgesch\xFCtzt). Builtin-Eintr\xE4ge k\xF6nnen zur Laufzeit nicht entfernt werden \u2014 sie sind in die Bin\xE4rdatei eingebrannt.",
2523
+ removeInfo: "\u25B8 entfernt: {prefix}",
2524
+ removeNotFound: "\u25B8 kein solcher Projekt-Eintrag: {prefix} (versuche /permissions list, um zu sehen, was gespeichert ist)",
2525
+ clearAlready: "\u25B8 Projekt-Allowlist ist bereits leer.",
2526
+ clearConfirm: "Es werden {count} Projekt-Allowlist-Eintr\xE4g{e} f\xFCr {root} gel\xF6scht. F\xFChre den Befehl mit dem Wort 'confirm' erneut aus: /permissions clear confirm",
2527
+ clearedNone: "\u25B8 Projekt-Allowlist war bereits leer \u2014 nichts ge\xE4ndert.",
2528
+ cleared: "\u25B8 {count} Projekt-Allowlist-Eintr\xE4g{e} gel\xF6scht.",
2529
+ usage: 'Verwendung: /permissions [list] aktuellen Status anzeigen\n /permissions add <pr\xE4fix> speichern (z.B. "npm run build")\n /permissions remove <pr\xE4fix-oder-N> Eintrag entfernen\n /permissions clear confirm alle Projekteintr\xE4ge l\xF6schen',
2530
+ modeYolo: "\u25B8 Edit-Modus: YOLO \u2014 jeder Shell-Befehl l\xE4uft automatisch, Allowlist wird umgangen. /mode review zum Reaktivieren der Nachfragen.",
2531
+ modeAuto: "\u25B8 Edit-Modus: auto \u2014 Edits auto-anwenden, Shell weiterhin durch Allowlist gesch\xFCtzt (oder ShellConfirm-Nachfrage bei nicht-allowlisteten).",
2532
+ modeReview: "\u25B8 Edit-Modus: review \u2014 sowohl Edits als auch nicht-allowlistete Shell-Befehle fragen vor der Ausf\xFChrung.",
2533
+ projectHeader: "Projekt-Allowlist ({count}) \u2014 {root}",
2534
+ projectNone1: ' (keine \u2014 w\xE4hle \xBBimmer erlauben" in einer ShellConfirm-Eingabeaufforderung, um einen hinzuzuf\xFCgen,',
2535
+ projectNone2: " oder `/permissions add <pr\xE4fix>` direkt.)",
2536
+ projectNoRoot: "Projekt-Allowlist \u2014 (kein Projekt-Root; Chat-Modus zeigt nur Builtin-Eintr\xE4ge)",
2537
+ builtinHeader: "Builtin-Allowlist ({count}) \u2014 schreibgesch\xFCtzt, fest eincompiliert",
2538
+ subcommands: "Unterbefehle: /permissions add <pr\xE4fix> \xB7 /permissions remove <pr\xE4fix-oder-N> \xB7 /permissions clear confirm"
2539
+ },
2540
+ dashboard: {
2541
+ ...EN.handlers.dashboard,
2542
+ notAvailable: "/dashboard ist in diesem Kontext nicht verf\xFCgbar (kein startDashboard-Callback angeschlossen).",
2543
+ stopNoCallback: "/dashboard stop: kein Stop-Callback angeschlossen.",
2544
+ notRunning: "\u25B8 Dashboard l\xE4uft nicht.",
2545
+ stopping: "\u25B8 Dashboard wird gestoppt...",
2546
+ alreadyRunning: "\u25B8 Dashboard l\xE4uft bereits:",
2547
+ alreadyRunningHint: "\xD6ffne es in einem beliebigen Browser. Tippe `/dashboard stop` zum Herunterfahren.",
2548
+ ready: "\u25B8 Dashboard bereit:",
2549
+ readyHint: "127.0.0.1 only \xB7 token-gesichert. Tippe `/dashboard stop` zum Herunterfahren.",
2550
+ failed: "\u25B8 Dashboard konnte nicht gestartet werden: {reason}",
2551
+ starting: "\u25B8 starte Dashboard-Server...",
2552
+ copied: "\u25B8 Dashboard-URL in Zwischenablage kopiert: {url}",
2553
+ tokenResetting: "\u25B8 rotiere Dashboard-Token \u2014 starte Server neu...",
2554
+ tokenReset: "\u25B8 Dashboard-Token rotiert. Neue URL:"
2555
+ },
2556
+ observability: {
2557
+ ...EN.handlers.observability,
2558
+ contextInfo: "Kontext: ~{total} von {max} ({pct}%) \xB7 System {sys} \xB7 Tools {tools} \xB7 Log {log}",
2559
+ compactStarting: "\u25B8 falte \xE4ltere Turns in eine Zusammenfassung...",
2560
+ compactNoop: "\u25B8 nichts zu falten \u2014 Log bereits klein oder aktuelle Turns allein \xFCberschreiten das Budget.",
2561
+ compactDone: "\u25B8 {before} Nachrichten \u2192 {after} gefaltet (Zusammenfassung {chars} Zeichen). Fahre fort.",
2562
+ compactFailed: "\u25B8 Falten fehlgeschlagen: {reason}",
2563
+ costNoTurn: "noch kein Turn \u2014 `/cost` zeigt die Token- und Kostenaufschl\xFCsselung des letzten Turns.",
2564
+ costNeedsTui: "/cost ben\xF6tigt einen TUI-Kontext (postUsage angeschlossen).",
2565
+ costNoPricing: '\u25B8 /cost: keine Preistabelle f\xFCr Modell "{model}". F\xFCge eine in telemetry/stats.ts hinzu.',
2566
+ costEstimate: "\u25B8 /cost Sch\xE4tzung \xB7 {model} \xB7 {prompt} Prompt-Tokens (sys {sys} + tools {tools} + log {log} + msg {msg})",
2567
+ costWorstCase: " schlimmster Fall (vollst\xE4ndiger Fehlschlag): {input} Eingabe + ~{output} Ausgabe ({avg} \xD8) \u2248 {total}",
2568
+ costLikely: " wahrscheinlich ({pct}% Session-Cache-Treffer): {input} Eingabe + ~{output} Ausgabe \u2248 {total}",
2569
+ costLikelyCold: " wahrscheinlich: entspricht worst case bis der Cache gef\xFCllt ist (noch keine abgeschlossenen Turns)",
2570
+ statusModel: " Modell {model}",
2571
+ statusFlags: " Flags stream={stream} \xB7 effort={effort}",
2572
+ statusCtx: " Kontext {bar} {used}/{max} ({pct}%)",
2573
+ statusCtxNone: " Kontext noch keine Turns",
2574
+ statusCost: " Kosten ${cost} \xB7 Cache {bar} {pct}% \xB7 Turns {turns}",
2575
+ statusCostCold: " Kosten ${cost} \xB7 Turns {turns} (Cache w\xE4rmt sich auf)",
2576
+ statusBudget: " Budget ${spent} / ${cap} ({pct}%){tag}",
2577
+ statusSession: ' Sitzung "{name}" \xB7 {count} Nachrichten im Log (fortgesetzt {resumed})',
2578
+ statusSessionEphemeral: " Sitzung (ephemer \u2014 keine Persistenz)",
2579
+ statusWorkspace: " Arbeitsbereich {path} \xB7 beim Start festgelegt (mit --dir <pfad> neu starten zum Wechseln)",
2580
+ statusMcp: " MCP {servers} Server, {tools} Tools im Register",
2581
+ statusEdits: " Edits {count} ausstehend (/apply zum \xDCbernehmen, /discard zum Verwerfen)",
2582
+ statusPlan: " Plan EIN \u2014 Schreibzugriffe blockiert (submit_plan + Genehmigung)",
2583
+ statusLifecycle: " Lebenszyklus {mode}/{state} \xB7 {progress}{evidence}",
2584
+ lifecycleNoPlan: "Kein Plan",
2585
+ lifecycleEvidencePending: "Nachweis ausstehend",
2586
+ lifecycleRejected: "Lebenszyklus: {tool} blockiert in {state} \u2014 n\xE4chster: {next}",
2587
+ lifecycleEvidenceRejected: "Lebenszyklus: Schritt {stepId} ben\xF6tigt Nachweis \u2014 n\xE4chster: {next}",
2588
+ lifecycleRepeatedRejected: "Lebenszyklus: wiederholte {tool}-Ablehnung \u2014 wiederhole nicht identische Argumente",
2589
+ statusModeYolo: " Modus YOLO \u2014 Edits + Shell auto-ausf\xFChren ohne Nachfrage (/undo macht immer noch r\xFCckg\xE4ngig \xB7 Shift+Tab zum Umschalten)",
2590
+ statusModeAuto: " Modus AUTO \u2014 Edits werden sofort angewandt (u zum R\xFCckg\xE4ngigmachen innerhalb von 5s \xB7 Shift+Tab zum Umschalten)",
2591
+ statusModeReview: " Modus review \u2014 Edits warten auf /apply oder y (Shift+Tab zum Umschalten)",
2592
+ statusDash: " Dash {url} (im Browser \xF6ffnen \xB7 /dashboard stop)"
2593
+ },
2594
+ plans: {
2595
+ ...EN.handlers.plans,
2596
+ noSession: "keine Sitzung angeh\xE4ngt \u2014 `/plans` ist pro Sitzung. F\xFChre `reasonix code` in einem Projekt aus, um eine Sitzung zu erhalten.",
2597
+ activePlan: "\u25B8 aktiver Plan{label} \u2014 {done}/{total} Schritt{e} erledigt \xB7 zuletzt bearbeitet {when}",
2598
+ activeNone: "\u25B8 aktiver Plan: (keiner)",
2599
+ noArchives: "noch keine archivierten Pl\xE4ne f\xFCr diese Sitzung \u2014 sie werden automatisch archiviert, wenn alle Schritte erledigt sind",
2600
+ archivedHeader: "Archiviert ({count}):",
2601
+ evidencePending: " ! Nachweis ausstehend \u2014 aktueller Schritt ben\xF6tigt Verifikation/Diff/Checkpoint/manuellen Nachweis",
2602
+ evidenceLine: " Nachweis {stepId}: {summary}",
2603
+ archivedEvidenceLine: " Nachweis: {summary}",
2604
+ replayNoSession: "keine Sitzung angeh\xE4ngt \u2014 `/replay` ist pro Sitzung. F\xFChre `reasonix code` in einem Projekt aus, um eine Sitzung zu erhalten.",
2605
+ replayNoArchives: "noch keine archivierten Pl\xE4ne f\xFCr diese Sitzung \u2014 `/replay` wird aktiv, sobald ein Plan abgeschlossen ist (auto-archiviert wenn alle Schritte erledigt).",
2606
+ replayInvalidIndex: "ung\xFCltiger Index \u2014 `/replay` akzeptiert 1..{max} (neuester = 1). Verwende `/plans`, um die Liste zu sehen.",
2607
+ archivedRow: " \u2713 {when} {total} Schritt{e} \xB7 {completion} {label}",
2608
+ completionComplete: "abgeschlossen",
2609
+ stopAborted: "\u25B8 Plan gestoppt \u2014 Modell abgebrochen; tippe eine Folgenachricht, um fortzufahren oder eine neue Aufgabe zu starten.",
2610
+ doneUsage: "Verwendung: /plans done <stepId> \xB7 /plans done all \u2014 manuelle \xDCberschreibung, wenn das Modell vergessen hat, mark_step_complete aufzurufen",
2611
+ doneUnavailable: "/plans done ist nur innerhalb einer aktiven Sitzung verf\xFCgbar.",
2612
+ doneNoPlan: "Kein aktiver Plan \u2014 nichts als erledigt zu markieren.",
2613
+ doneNotInPlan: "Schritt `{id}` ist nicht im aktiven Plan. F\xFChre /plans aus, um die Schritt-IDs zu sehen.",
2614
+ doneAlready: "Schritt `{id}` wurde bereits als erledigt markiert.",
2615
+ doneOk: "\u25B8 Schritt `{id}` als erledigt markiert.",
2616
+ doneAllNoop: "Jeder Schritt ist bereits erledigt.",
2617
+ doneAllOk: "\u25B8 {count} Schritt(e) als erledigt markiert."
2618
+ },
2619
+ jobs: {
2620
+ ...EN.handlers.jobs,
2621
+ codeOnly: "/jobs ist nur innerhalb von `reasonix code` verf\xFCgbar.",
2622
+ killCodeOnly: "/kill ist nur innerhalb von `reasonix code` verf\xFCgbar.",
2623
+ logsCodeOnly: "/logs ist nur innerhalb von `reasonix code` verf\xFCgbar.",
2624
+ empty: "\u25C8 Jobs \xB7 0 laufend \xB7 0 gesamt\n (run_background startet einen \u2014 Dev-Server, Watcher, langlebige Skripte)",
2625
+ header: "\u25C8 Jobs \xB7 {running} laufend \xB7 {total} gesamt",
2626
+ footer: " /logs <id> tail \xB7 /kill <id> SIGTERM \u2192 SIGKILL",
2627
+ killUsage: "Verwendung: /kill <id> (siehe /jobs f\xFCr IDs)",
2628
+ killNotFound: "Job {id}: nicht gefunden",
2629
+ killAlreadyExited: "Job {id} bereits beendet ({code})",
2630
+ killStopping: "\u25B8 stoppe Job {id} (Tree-Kill: SIGTERM \u2192 SIGKILL nach 2s Gnadenfrist; Windows: taskkill /T /F)",
2631
+ killStatus: "\u25B8 Job {id} {status}",
2632
+ killStillAlive: "Nach SIGKILL noch am Leben (!) \u2014 melde dies als Fehler",
2633
+ logsUsage: "Verwendung: /logs <id> [zeilen] (Standard letzte 80 Zeilen)",
2634
+ logsNotFound: "Job {id}: nicht gefunden",
2635
+ logsStatus: "[Job {id} \xB7 {status}]\n$ {command}",
2636
+ logsRunning: "L\xE4uft \xB7 PID {pid}",
2637
+ logsExited: "Beendet {code}",
2638
+ logsFailed: "Fehlgeschlagen ({reason})",
2639
+ logsStopped: "gestoppt"
2640
+ },
2641
+ memory: {
2642
+ ...EN.handlers.memory,
2643
+ disabled: "Memory ist deaktiviert (REASONIX_MEMORY=off in der Umgebung). Entferne die Variable zur Reaktivierung \u2014 es werden weder REASONIX.md noch ~/.reasonix/memory-Inhalte eingef\xFCgt.",
2644
+ noRoot: "kein Arbeitsverzeichnis in dieser Sitzung \u2014 `/memory` ben\xF6tigt ein Root, um REASONIX.md aufzul\xF6sen. (L\xE4uft in einer Test-Umgebung?)",
2645
+ listEmpty: "noch keine Benutzer-Memories. Das Modell kann `remember` aufrufen, um einen zu speichern, oder du kannst Dateien manuell in ~/.reasonix/memory/global/ oder dem projektspezifischen Unterverzeichnis erstellen.",
2646
+ listHeader: "Benutzer-Memories ({count}):",
2647
+ listFooter: "Body anzeigen: /memory show <name> L\xF6schen: /memory forget <name>",
2648
+ showUsage: "Verwendung: /memory show <name> oder /memory show <scope>/<name>",
2649
+ showNotFound: "Kein Memory gefunden: {target}",
2650
+ showFailed: "Anzeige fehlgeschlagen: {reason}",
2651
+ forgetUsage: "Verwendung: /memory forget <name> oder /memory forget <scope>/<name>",
2652
+ forgetNotFound: "Kein Memory gefunden: {target}",
2653
+ forgetInfo: "\u25B8 {scope}/{name} entfernt. N\xE4chstes /new oder der n\xE4chste Start wird es nicht mehr sehen.",
2654
+ forgetFailed: "Konnte {scope}/{name} nicht entfernen (bereits weg?)",
2655
+ forgetError: "Entfernen fehlgeschlagen: {reason}",
2656
+ clearUsage: "Verwendung: /memory clear <global|project> confirm",
2657
+ clearConfirm: "Alle Memories im Bereich {scope} werden gel\xF6scht. F\xFChre den Befehl mit dem Wort 'confirm' erneut aus: /memory clear {scope} confirm",
2658
+ cleared: "\u25B8 Bereich {scope} geleert \u2014 {count} Memory-Datei(en) gel\xF6scht.",
2659
+ noMemory: "Kein Memory in {root} eingef\xFCgt.",
2660
+ layers: "Drei Ebenen sind verf\xFCgbar:",
2661
+ layerProject: " 1. {file} \u2014 commitierbares Team-Memory (im Repo).",
2662
+ layerGlobal: " 2. ~/.reasonix/memory/global/ \u2014 dein projekt\xFCbergreifendes privates Memory.",
2663
+ layerProjectHash: " 3. ~/.reasonix/memory/<projekt-hash>/ \u2014 privates Memory dieses Projekts.",
2664
+ askModel: "Bitte das Modell, etwas zu `remember`, oder bearbeite die Dateien direkt.",
2665
+ changesNote: "\xC4nderungen werden beim n\xE4chsten /new oder Start wirksam \u2014 der System-Prompt wird einmal pro Sitzung gehasht, um den Prefix-Cache warm zu halten.",
2666
+ subcommands: "Unterbefehle: /memory list | /memory show <name> | /memory forget <name> | /memory clear <scope> confirm",
2667
+ changesNoteShort: "\xC4nderungen werden beim n\xE4chsten /new oder Start wirksam. Unterbefehle: /memory list | show | forget | clear"
2668
+ },
2669
+ mcp: {
2670
+ ...EN.handlers.mcp,
2671
+ noServers: 'keine MCP-Server angeh\xE4ngt. F\xFChre `reasonix setup` aus, um welche auszuw\xE4hlen, oder starte mit --mcp "<spec>". `reasonix mcp list` zeigt den Katalog. Hinweis: vom Modell aufgerufene Shell-Befehle werden pro Aufruf abgefragt (einmal erlauben / immer erlauben / ablehnen) \u2014 kein globales Allow-All-Flag.',
2672
+ toolsLabel: " Tools {count}",
2673
+ resourcesHint: "`/resource` zum Durchsuchen+Lesen",
2674
+ promptsHint: "`/prompt` zum Durchsuchen+Abrufen",
2675
+ awarenessOnly: "Der Chat-Modus verbraucht Tools aktuell; Ressourcen+Prompts werden hier zur Information angezeigt.",
2676
+ catalogHint: "Vollst\xE4ndiger Katalog: `reasonix mcp list` \xB7 tiefere Diagnose: `reasonix mcp inspect <spec>`.",
2677
+ fallbackServers: "MCP-Server ({count}):",
2678
+ fallbackTools: "Tools im Register ({count}):",
2679
+ fallbackChange: "Um diesen Satz zu \xE4ndern, beende und f\xFChre `reasonix setup` aus.",
2680
+ usageDisableEnable: "Verwendung: /mcp {action} <name> \xB7 w\xE4hle einen in /mcp angezeigten Namen (anonyme Server k\xF6nnen nicht nach Namen umgeschaltet werden).",
2681
+ usageReconnect: "Verwendung: /mcp reconnect <name> \xB7 w\xE4hle einen in /mcp angezeigten Namen.",
2682
+ unknownServer: 'unbekannter MCP-Server "{name}". Bekannt: {list}.',
2683
+ noneList: "(keine)",
2684
+ reconnectNoTui: "/mcp reconnect ben\xF6tigt die interaktive TUI (postInfo nicht angeschlossen).",
2685
+ liveTab: "Live",
2686
+ marketplaceTab: "Marktplatz",
2687
+ tabHint: "Tab zum Umschalten"
2688
+ },
2689
+ init: {
2690
+ ...EN.handlers.init,
2691
+ codeOnly: "/init funktioniert nur im Code-Modus (es ben\xF6tigt Dateisystem-Werkzeuge).\nF\xFChre `reasonix code [pfad]` aus, um eine Sitzung zu starten, die im\nProjekt verwurzelt ist, das du initialisieren m\xF6chtest, und f\xFChre dann /init aus.",
2692
+ exists: "\u25B8 REASONIX.md existiert bereits unter {path}",
2693
+ existsForce: " /init force von Grund auf neu generieren (\xFCberschreibt)",
2694
+ existsEdit: " Oder bearbeite es von Hand \u2014 es ist nur Markdown. Die aktuelle Datei wird",
2695
+ existsPinned: " bei jedem Start unver\xE4ndert in den System-Prompt eingef\xFCgt.",
2696
+ info: "\u25B8 /init \u2014 Modell scannt das Projekt und synthetisiert REASONIX.md.\n Das Ergebnis landet als ausstehender Edit; mit /apply oder /walk reviewen."
2697
+ },
2698
+ webSearchEngine: {
2699
+ ...EN.handlers.webSearchEngine,
2700
+ currentEngine: "Aktuelle Websuchmaschine: {engine}",
2701
+ endpoint: "SearXNG-Endpunkt: {url}",
2702
+ usageHeader: "Verwendung:",
2703
+ usageBing: " /search-engine bing Bing verwenden (Standard, funktioniert von CN ohne Proxy)",
2704
+ usageSearxng: " /search-engine searxng SearXNG verwenden (Standard-Endpunkt)",
2705
+ usageSearxngUrl: " /search-engine searxng <url> SearXNG mit benutzerdefiniertem Endpunkt",
2706
+ usageMetaso: " /search-engine metaso Metaso-API verwenden (100/Tag kostenlos, konfiguriere eigenen API-Schl\xFCssel f\xFCr mehr)",
2707
+ usageTavily: " /search-engine tavily Tavily-API verwenden (LLM-freundlich, kostenlos 1000/Monat \u2014 setze TAVILY_API_KEY oder tavilyApiKey in der Konfiguration; erhalte einen unter https://tavily.com)",
2708
+ usagePerplexity: " /search-engine perplexity Perplexity AI verwenden (AI-native Antwort + Quellenangaben \u2014 setze PERPLEXITY_API_KEY oder perplexityApiKey in der Konfiguration; erhalte einen unter https://perplexity.ai/settings/api)",
2709
+ usageExa: " /search-engine exa Exa-API verwenden (AI-native Antwort + Quellenangaben, kostenlos 1000/Monat \u2014 setze EXA_API_KEY oder exaApiKey in der Konfiguration; registriere dich unter https://exa.ai)",
2710
+ alias: "Alias: /se",
2711
+ searxngInfo: "SearXNG ist eine selbst gehostete Metasuchmaschine (https://github.com/searxng/searxng).",
2712
+ searxngInstall: "Installiere mit: docker run -d -p 8080:8080 searxng/searxng",
2713
+ switched: 'Websuchmaschine auf "{engine}" umgestellt.{note}',
2714
+ switchedSearxngNote: " Stelle sicher, dass SearXNG unter {endpoint} l\xE4uft.",
2715
+ switchedMetasoNote: " Es gibt ein t\xE4gliches Kontingent von 100 (konfiguriere einen eigenen API-Schl\xFCssel f\xFCr h\xF6here Grenzen).",
2716
+ switchedTavilyNote: " Setze TAVILY_API_KEY oder `tavilyApiKey` in der Konfiguration; kostenlos 1000/Monat unter https://tavily.com.",
2717
+ switchedPerplexityNote: " Setze PERPLEXITY_API_KEY oder `perplexityApiKey` in der Konfiguration; erhalte einen unter https://perplexity.ai/settings/api.",
2718
+ switchedExaNote: " Setze EXA_API_KEY oder `exaApiKey` in der Konfiguration; registriere dich unter https://exa.ai.",
2719
+ keyNeeded: 'Kein API-Schl\xFCssel f\xFCr "{engine}" konfiguriert.\n\n 1. Setze die {envVar}-Umgebungsvariable\n 2. Oder gib ihn inline an: /search-engine {engine} <dein-schl\xFCssel>\n 3. Oder f\xFCge "{engine}ApiKey" zu ~/.reasonix/config.json hinzu\n\nWiederhole dann /search-engine {engine}.',
2720
+ keySaved: " API-Schl\xFCssel in der Konfiguration gespeichert.",
2721
+ confirmed: 'Websuchmaschine auf "{engine}" gesetzt{detail}. Der n\xE4chste Assistenten-Turn \xFCbernimmt die \xC4nderung.',
2722
+ confirmedDetail: " ({endpoint})"
2723
+ },
2724
+ skill: {
2725
+ ...EN.handlers.skill,
2726
+ listEmpty: "Keine Skills gefunden. Reasonix liest Skills von:",
2727
+ listProjectScope: " \xB7 <projekt>/.reasonix/skills/<name>/SKILL.md (oder <name>.md) \u2014 Projekt-Bereich",
2728
+ listGlobalScope: " \xB7 ~/.reasonix/skills/<name>/SKILL.md (oder <name>.md) \u2014 globaler Bereich",
2729
+ listProjectOnly: " (Projekt-Bereich ist nur in `reasonix code` aktiv)",
2730
+ listFrontmatter: "Die Frontmatter jeder Datei ben\xF6tigt mindestens `name` und `description`.",
2731
+ listInvoke: "F\xFChre einen Skill aus mit `/skill <name> [args]` oder indem du das Modell bittest, `run_skill` aufzurufen.",
2732
+ listHeader: "Benutzer-Skills ({count}):",
2733
+ listFooter: "Anzeigen: /skill show <name> Ausf\xFChren: /skill <name> [args] Neu: /skill new <name>",
2734
+ listEmptyNewHint: "Erstelle einen mit: /skill new <name> (Projekt-Bereich) \u2014 es gibt noch kein entferntes Register; du erstellst Skills direkt.",
2735
+ showUsage: "Verwendung: /skill show <name>",
2736
+ showNotFound: "Kein Skill gefunden: {name}",
2737
+ runNotFound: "Kein Skill gefunden: {name} (versuche /skill list)",
2738
+ runInfo: "\u25B8 f\xFChre Skill aus: {name}{args}",
2739
+ newUsage: "Verwendung: /skill new <name> [--global]",
2740
+ newCreated: "\u25B8 Skill erstellt: {name}\n {path}\n bearbeite ihn, dann `/skill {name}` zum Ausf\xFChren",
2741
+ newError: "\u25B2 /skill new fehlgeschlagen: {reason}",
2742
+ pathsHeader: "Skill-Pfade (Priorit\xE4tsreihenfolge):",
2743
+ pathsPriority: "Priorit\xE4t: Projekt > benutzerdefinierte Pfade in Konfigurationsreihenfolge > global > builtin. \xC4nderungen wirken sich auf den System-Prompt beim n\xE4chsten /new oder einer neuen Sitzung aus.",
2744
+ pathsUsage: "Verwendung: /skill paths [list]\n /skill paths add <pfad>\n /skill paths remove <pfad|N>",
2745
+ pathsAddUsage: "Verwendung: /skill paths add <pfad>",
2746
+ pathsRemoveUsage: "Verwendung: /skill paths remove <pfad|N>",
2747
+ pathsAdded: "\u25B8 benutzerdefinierten Skill-Pfad hinzugef\xFCgt: {path}",
2748
+ pathsAlready: "\u25B8 benutzerdefinierter Skill-Pfad bereits konfiguriert: {path}",
2749
+ pathsRemoved: "\u25B8 benutzerdefinierten Skill-Pfad entfernt: {path}",
2750
+ pathsRemoveNotFound: "\u25B8 kein benutzerdefinierter Skill-Pfad entspricht: {target}",
2751
+ pathsRestartHint: "Der System-Prompt der aktuellen Sitzung ist unver\xE4ndert; f\xFChre /new aus oder starte eine neue Sitzung, um das Skills-Register zu aktualisieren."
2752
+ }
2753
+ },
2754
+ statusBar: {
2755
+ ...EN.statusBar,
2756
+ turn: "Turn",
2757
+ cache: "Cache",
2758
+ spent: "ausgegeben",
2759
+ left: " \xFCbrig",
2760
+ slow: "langsam",
2761
+ disconnect: "trennen",
2762
+ reconnecting: "Verbinde neu\u2026",
2763
+ approvingIn: "Genehmige in ",
2764
+ escToInterrupt: "Esc zum Unterbrechen",
2765
+ recordingGlyph: "Aufnahme",
2766
+ mb: " MB",
2767
+ evt: " Ereignis",
2768
+ editsLabel: "Edits:",
2769
+ mcpLoading: "MCP",
2770
+ ctx: "Kontext",
2771
+ shortcutsHint: "Strg+P Tastenk\xFCrzel"
2772
+ },
2773
+ editMode: {
2774
+ ...EN.editMode,
2775
+ plan: "PLAN-MODUS",
2776
+ yolo: "YOLO",
2777
+ auto: "AUTO",
2778
+ review: "REVIEW",
2779
+ writesGated: " Schreibzugriffe blockiert \xB7 /plan off zum Verlassen",
2780
+ editsShellAuto: "Edits + Shell auto \xB7 /undo zum R\xFCckg\xE4ngigmachen",
2781
+ editsLandNow: "Edits werden sofort angewandt \xB7 u zum R\xFCckg\xE4ngigmachen",
2782
+ queuedApplyDiscard: "{count} in Warteschlange \xB7 y anwenden \xB7 n verwerfen",
2783
+ editsQueued: "Edits in Warteschlange \xB7 y anwenden \xB7 n verwerfen",
2784
+ shiftTabFlip: " {mid} \xB7 Shift+Tab zum Umschalten",
2785
+ queuedDots: "In Warteschlange\u2026"
2786
+ },
2787
+ composer: {
2788
+ ...EN.composer,
2789
+ placeholder: "Frag etwas \xB7 slash f\xFCr Befehle \xB7 at-Zeichen f\xFCr Dateien",
2790
+ waitingForResponse: "\u2026warte auf Antwort\u2026",
2791
+ hintSend: "senden",
2792
+ hintNewline: "Neue Zeile",
2793
+ hintClear: "leeren",
2794
+ hintScroll: "scrollen",
2795
+ hintHistory: "Verlauf",
2796
+ hintAbort: "abbrechen",
2797
+ hintQuit: "beenden",
2798
+ abortedHint: "Turn vom Benutzer abgebrochen \xB7 erneut Esc zum Leeren \xB7 \u23CE f\xFCr eine Folgefrage",
2799
+ editorNoRawMode: "externer Editor nicht verf\xFCgbar \u2014 stdin unterst\xFCtzt Raw-Mode-Umschaltung auf diesem Terminal nicht",
2800
+ editorFailed: "Externer Editor:",
2801
+ editorMissing: "kein $EDITOR / $VISUAL / $GIT_EDITOR gesetzt \u2014 exportiere einen (z.B. `export EDITOR=nano`) und versuche es erneut",
2802
+ editorExited: "Editor mit Code {code} beendet",
2803
+ typeaheadStaged: "\u25B8 {count} Zeile(n) bereitgestellt \xB7 Esc zur\xFCckrufen",
2804
+ steerPlaceholder: "tippe, um die aktuelle Aufgabe zu steuern \u2014 Befehle sind deaktiviert, solange besch\xE4ftigt",
2805
+ steerHint: "Senden \u2014 mid-Turn eingef\xFCgt",
2806
+ stashNothing: "Nichts zu speichern",
2807
+ stashSaved: "Gespeichert",
2808
+ stashRecall: "Abgerufen"
2809
+ },
2810
+ pathConfirm: {
2811
+ ...EN.pathConfirm,
2812
+ title: "Pfad au\xDFerhalb des Sandbox",
2813
+ subtitleRead: "{tool} m\xF6chte eine Datei AUSSERHALB des Projekt-Sandbox lesen",
2814
+ subtitleWrite: "{tool} m\xF6chte eine Datei AUSSERHALB des Projekt-Sandbox schreiben",
2815
+ awaiting: "wartet",
2816
+ denyTitle: "Ablehnen \u2014 Kontext angeben",
2817
+ optional: "optional",
2818
+ denyFooter: "Kontext eingeben \xB7 \u23CE mit Grund absenden \xB7 Esc \xFCberspringen (ohne Grund ablehnen)",
2819
+ pickFooter: "\u2191\u2193 ausw\xE4hlen \xB7 \u23CE best\xE4tigen \xB7 Tab Kontext hinzuf\xFCgen \xB7 Esc abbrechen",
2820
+ allowOnce: "Einmal erlauben",
2821
+ allowOnceDesc: "Diesen Zugriff erlauben; das Verzeichnis f\xFCr den Rest dieser Sitzung merken",
2822
+ allowAlways: "Immer erlauben",
2823
+ allowAlwaysDesc: "`{prefix}` f\xFCr dieses Projekt merken (gespeichert in ~/.reasonix/config.json)",
2824
+ deny: "ablehnen",
2825
+ denyDesc: "Tab dr\xFCcken, um dem Modell den Grund mitzuteilen",
2826
+ pathLabel: "Pfad",
2827
+ sandboxLabel: "Sandbox",
2828
+ allowPrefixLabel: "Pr\xE4fix",
2829
+ promptTitleRead: "Pfadzugriff \u2014 lesen",
2830
+ promptTitleWrite: "Pfadzugriff \u2014 schreiben",
2831
+ actionAllowRead: "Lesen erlauben",
2832
+ actionAllowWrite: "Schreiben erlauben",
2833
+ actionAlwaysAllow: "Immer erlauben \u2014 {prefix}",
2834
+ actionDeny: "Ablehnen"
2835
+ },
2836
+ shellConfirm: {
2837
+ ...EN.shellConfirm,
2838
+ title: "Shell-Befehl",
2839
+ bgTitle: "Hintergrundprozess",
2840
+ subtitle: "Modell m\xF6chte einen Shell-Befehl ausf\xFChren",
2841
+ bgSubtitle: "Langlebiger Prozess \u2014 l\xE4uft nach Genehmigung weiter, /kill zum Stoppen",
2842
+ denyTitle: "Ablehnen \u2014 Kontext angeben",
2843
+ optional: "optional",
2844
+ denyFooter: "Kontext eingeben \xB7 \u23CE mit Grund absenden \xB7 Esc \xFCberspringen (ohne Grund ablehnen)",
2845
+ awaiting: "wartet",
2846
+ pickFooter: "\u2191\u2193 ausw\xE4hlen \xB7 \u23CE best\xE4tigen \xB7 Tab Kontext hinzuf\xFCgen \xB7 Esc abbrechen",
2847
+ allowOnce: "Einmal erlauben",
2848
+ allowOnceDesc: "Diesen Befehl ausf\xFChren, beim n\xE4chsten Mal erneut fragen",
2849
+ allowAlways: "Immer erlauben",
2850
+ allowAlwaysDesc: "`{prefix}` f\xFCr dieses Projekt merken",
2851
+ deny: "ablehnen",
2852
+ denyDesc: "Tab dr\xFCcken, um dem Modell den Grund mitzuteilen",
2853
+ cwdLabel: "awd",
2854
+ timeoutLabel: "Timeout",
2855
+ waitLabel: "warten",
2856
+ previewMore: "\u2026 {n} weitere Zeile ausgeblendet \u2014 Esc dr\xFCcken, Modell bitten, sie aufzuteilen",
2857
+ previewMorePlural: "\u2026 {n} weitere Zeilen ausgeblendet \u2014 Esc dr\xFCcken, Modell bitten, sie aufzuteilen",
2858
+ promptTitleRunCommand: "Befehl ausf\xFChren",
2859
+ promptTitleRunBackground: "Hintergrundbefehl ausf\xFChren",
2860
+ actionRunOnce: "Einmal ausf\xFChren",
2861
+ actionAlwaysAllow: "Immer erlauben \u2014 {prefix}",
2862
+ actionDeny: "Ablehnen"
2863
+ },
2864
+ editConfirm: {
2865
+ ...EN.editConfirm,
2866
+ footer: "[y/Enter] anwenden \xB7 [n] mit Grund ablehnen \xB7 [a] Rest anwenden \xB7 [A] AUTO umschalten \xB7 [\u2191\u2193/Leertaste] scrollen \xB7 [Esc] abbrechen",
2867
+ newTag: "NEU",
2868
+ editTag: "BEARBEITET",
2869
+ linesCount: "-{removed} +{added} Zeilen",
2870
+ viewingRange: "Zeige {start}-{end}/{total}",
2871
+ denyFooter: "\u23CE absenden \xB7 Esc \xFCberspringen (ohne Grund ablehnen)",
2872
+ oldLabel: " - alt",
2873
+ newLabel: " + neu",
2874
+ sideBySide: " nebeneinander \xB7 entfernte Zeilen links, hinzugef\xFCgte rechts \xB7 paarweise nach Versatz",
2875
+ linesAbove: " \u2191 {count} Zeile dar\xFCber (\u2191/k oder Bild\u2191)",
2876
+ linesAbovePlural: " \u2191 {count} Zeilen dar\xFCber (\u2191/k oder Bild\u2191)",
2877
+ linesBelow: " \u2193 {count} Zeile darunter (\u2193/j oder Leertaste/Bild\u2193)",
2878
+ linesBelowPlural: " \u2193 {count} Zeilen darunter (\u2193/j oder Leertaste/Bild\u2193)"
2879
+ },
2880
+ editPicker: {
2881
+ ...EN.editPicker,
2882
+ title: "Vorherige Nachricht bearbeiten",
2883
+ hint: "\u2191\u2193 ausw\xE4hlen \xB7 Enter zum Laden in den Composer \xB7 Esc abbrechen",
2884
+ empty: "Noch keine Benutzer-Turns \u2014 nichts zu bearbeiten",
2885
+ dismiss: "Esc zum Schlie\xDFen",
2886
+ forked: "\u25B8 bei Turn #{turn} abgezweigt \u2014 Puffer enth\xE4lt den Originaltext"
2887
+ },
2888
+ sessionPicker: {
2889
+ ...EN.sessionPicker,
2890
+ header: " \u25C8 REASONIX \xB7 Sitzung ausw\xE4hlen ",
2891
+ title: "Sitzung ausw\xE4hlen \u2014 {workspace}",
2892
+ messages: "{count} Nachricht",
2893
+ messagesPlural: "{count} Nachrichten",
2894
+ turns: "{count} Turns",
2895
+ pickerHint: "\u2191\u2193 ausw\xE4hlen \xB7 / suchen \xB7 \u23CE \xF6ffnen \xB7 [n] neu \xB7 [d] l\xF6schen \xB7 [r] umbenennen \xB7 Esc beenden",
2896
+ empty: " noch keine gespeicherten Sitzungen in diesem Arbeitsbereich \u2014 dr\xFCcke ",
2897
+ emptyNew: " um eine neue zu starten",
2898
+ renamePrompt: ' "{from}" umbenennen \u2192 ',
2899
+ renameHint: " \u23CE Umbenennung best\xE4tigen \xB7 Esc abbrechen",
2900
+ searchPrompt: " Sitzungen durchsuchen: /",
2901
+ searchHint: " tippen zum Filtern \xB7 \u23CE Treffer \xF6ffnen \xB7 Esc zur\xFCcksetzen",
2902
+ searchEmpty: " keine Sitzungen entsprechen dieser Suche",
2903
+ emptyHint: " \u23CE neue Sitzung \xB7 Esc beenden",
2904
+ justNow: "Gerade eben",
2905
+ minAgo: "Vor {count} Min",
2906
+ yesterday: "gestern",
2907
+ hoursAgo: "Vor {count}h",
2908
+ daysAgo: "Vor {count} Tagen"
2909
+ },
2910
+ workspacePicker: {
2911
+ ...EN.workspacePicker,
2912
+ header: " \u25C8 REASONIX \xB7 Arbeitsbereich ausw\xE4hlen ",
2913
+ title: "Arbeitsbereich ausw\xE4hlen \u2014 {workspace}",
2914
+ sessions: "{count} Sitzung",
2915
+ sessionsPlural: "{count} Sitzungen",
2916
+ current: "aktuell",
2917
+ pickerHint: "\u2191\u2193 ausw\xE4hlen \xB7 / suchen \xB7 \u23CE wechseln + Sitzung ausw\xE4hlen \xB7 Esc beenden \xB7 /cwd <pfad> f\xFCgt einen hinzu",
2918
+ empty: " noch keine bekannten Arbeitsbereiche \u2014 f\xFChre /cwd <pfad> einmal aus, um einen hinzuzuf\xFCgen",
2919
+ searchPrompt: " Arbeitsbereiche durchsuchen: /",
2920
+ searchHint: " tippen zum Filtern \xB7 \u23CE wechseln + Sitzung ausw\xE4hlen \xB7 Esc zur\xFCcksetzen",
2921
+ searchEmpty: " keine Arbeitsbereiche entsprechen dieser Suche"
2922
+ },
2923
+ modelPicker: {
2924
+ ...EN.modelPicker,
2925
+ header: " \u25C8 REASONIX \xB7 Einrichtung ausw\xE4hlen ",
2926
+ loading: " \xB7 lade Katalog\u2026",
2927
+ catalogEmpty: " \xB7 Katalog leer \u2014 verwende bekannte Fallbacks",
2928
+ modelsAvailable: " \xB7 {count} Modelle verf\xFCgbar",
2929
+ effortHeader: " EFFORT \xB7 Reasoning-Effort-Grenze",
2930
+ modelsHeader: " MODELLE \xB7 DeepSeek-kompatible IDs",
2931
+ effortDesc: {
2932
+ ...EN.modelPicker.effortDesc,
2933
+ low: "Am schnellsten \u2014 minimales Reasoning",
2934
+ medium: "ausgewogen",
2935
+ high: "Standard \u2014 sicher f\xFCr vLLM / Azure",
2936
+ max: "DeepSeek-Erweiterung; von stock OpenAI / vLLM abgelehnt"
2937
+ },
2938
+ pickerFooter: " \u2191\u2193 ausw\xE4hlen \xB7 \u23CE best\xE4tigen \xB7 [r] aktualisieren \xB7 Esc abbrechen",
2939
+ currentLabel: " \xB7 aktuell"
2940
+ },
2941
+ slashSuggestions: {
2942
+ ...EN.slashSuggestions,
2943
+ noMatch: "Kein Slash-Befehl entspricht diesem Pr\xE4fix",
2944
+ backspaceHint: " \u2014 R\xFCcktaste zum Bearbeiten, oder /help f\xFCr die vollst\xE4ndige Liste",
2945
+ commandCount: "{count} Befehl",
2946
+ commandCountPlural: "{count} Befehle",
2947
+ aboveLabel: " \u2191 {count} dar\xFCber",
2948
+ belowLabel: " \u2193 {count} darunter",
2949
+ advancedHint: " + {count} erweitert \xB7 tippe einen Buchstaben zum Suchen",
2950
+ footerHint: " \u2191\u2193 navigieren \xB7 Tab / \u23CE ausw\xE4hlen \xB7 Esc abbrechen",
2951
+ groupChat: "CHAT",
2952
+ groupSetup: "SETUP",
2953
+ groupInfo: "INFO",
2954
+ groupSession: "SITZUNG",
2955
+ groupExtend: "ERWEITERN",
2956
+ groupCode: "CODE",
2957
+ groupJobs: "JOBS",
2958
+ groupAdvanced: "ERWEITERT",
2959
+ groupDetailSetup: "Modell + Kosten",
2960
+ groupDetailInfo: "Aktueller Zustand",
2961
+ groupDetailChat: "T\xE4gliche Turn-Operationen",
2962
+ groupDetailExtend: "MCP, Memory, Skills",
2963
+ groupDetailSession: "Gespeicherte Sitzungen",
2964
+ groupDetailCode: "Edits + Pl\xE4ne (Code-Modus)",
2965
+ groupDetailJobs: "Hintergrundprozesse (Code-Modus)",
2966
+ groupDetailAdvanced: "Selten oder einmalig"
2967
+ },
2968
+ atMentions: {
2969
+ ...EN.atMentions,
2970
+ loading: "lade\u2026",
2971
+ entrySingular: "{count} Eintrag",
2972
+ entryPlural: "{count} Eintr\xE4ge",
2973
+ searching: "suche\u2026",
2974
+ scanned: "gescannt",
2975
+ match: "Treffer",
2976
+ matches: "Treffer",
2977
+ forFilter: 'f\xFCr "{filter}"',
2978
+ noMatch: 'keine Dateien entsprechen "{filter}"',
2979
+ emptyDir: "Leeres Verzeichnis",
2980
+ scanning: "Durchsuche Verzeichnisbaum\u2026",
2981
+ footerBrowse: "\u2191\u2193 navigieren \xB7 Tab in Ordner eintauchen \xB7 \u23CE einf\xFCgen \xB7 Esc abbrechen",
2982
+ footerBrowseSearch: "\u2191\u2193 navigieren \xB7 Tab / \u23CE als @pfad einf\xFCgen \xB7 Esc abbrechen",
2983
+ footerInsert: "\u2191\u2193 navigieren \xB7 Tab / \u23CE als @pfad einf\xFCgen \xB7 Esc abbrechen"
2984
+ },
2985
+ statsPanel: {
2986
+ ...EN.statsPanel,
2987
+ modePlan: "PLAN",
2988
+ modeYolo: "yolo",
2989
+ modeAuto: "auto",
2990
+ modeReview: "review",
2991
+ pro: "\u21E7 pro",
2992
+ budget: " Budget "
2993
+ },
2994
+ welcomeBanner: {
2995
+ ...EN.welcomeBanner,
2996
+ workspace: "\u25B8 Arbeitsbereich",
2997
+ relaunchHint: " (mit --dir <pfad> neu starten zum Wechseln)",
2998
+ dashboard: "\u25B8 Web"
2999
+ },
3000
+ ctxBreakdown: {
3001
+ ...EN.ctxBreakdown,
3002
+ title: "\u25A3 Kontext",
3003
+ compactHint: " /compact faltet (automatisch bei 50 %) \xB7 /new l\xF6scht Log",
3004
+ topTools: " Top-Tool-Ergebnisse nach Kosten ({count}):",
3005
+ msg: "Nachr",
3006
+ turnLabel: "Turn"
3007
+ },
3008
+ startup: {
3009
+ ...EN.startup,
3010
+ codeRooted: '\u25B8 reasonix code: verwurzelt in {rootDir}, Sitzung "{session}" \xB7 {tools} native Tool{s}{semantic}',
3011
+ ephemeral: "(ephemer)",
3012
+ semanticOn: " \xB7 Semantic-Search an"
3013
+ },
3014
+ doctorErrors: {
3015
+ ...EN.doctorErrors,
3016
+ unreadable: "{path} nicht lesbar \u2014 {message}",
3017
+ cannotList: "Kann nicht auflisten \u2014 {message}",
3018
+ parseFailed: "settings.json konnte nicht geparst werden \u2014 {message}",
3019
+ probeFailed: "Test fehlgeschlagen \u2014 {message}"
3020
+ },
3021
+ webErrors: {
3022
+ ...EN.webErrors,
3023
+ status: "web_search {status} \u2014 versuche: Das Such-Backend hat einen Fehler zur\xFCckgegeben; formuliere die Abfrage um oder wechsle die Engine mit /search-engine bing|searxng|metaso|tavily|perplexity|exa",
3024
+ rateLimit429: "web_search 429 \u2014 versuche: 10s warten vor erneuter Abfrage oder Abfrage umformulieren; das Such-Backend ratelimited diesen Client",
3025
+ forbidden403: "web_search 403 \u2014 versuche: Das Such-Backend blockiert diesen Client; wechsle die Engine mit /search-engine bing|searxng|metaso|tavily|perplexity|exa oder warte und versuche es sp\xE4ter erneut",
3026
+ serverError5xx: "web_search {status} \u2014 versuche: \xD6ffne die Such-URL in einem Browser; falls sie l\xE4dt, ist dies vor\xFCbergehend und ein erneuter Versuch in 30s kann helfen",
3027
+ bingBlocked: "web_search: Bing-Anti-Bot-Seite \u2014 ratelimited oder blockiert \u2014 versuche: 30s warten und erneut versuchen, oder wechsle die Engine mit /search-engine bing|searxng|metaso|tavily|perplexity|exa",
3028
+ bingNoResults: "web_search: 0 Ergebnisse, aber die Antwort sieht nicht wie eine echte leere Seite aus ({chars} Zeichen, erste 120: {preview}) \u2014 versuche: formuliere die Abfrage mit einfacheren Begriffen um oder wechsle die Engine mit /search-engine bing|searxng|metaso|tavily|perplexity|exa",
3029
+ invalidEndpoint: 'web_search: ung\xFCltiger SearXNG-Endpunkt "{endpoint}" \u2014 versuche: setze eine g\xFCltige URL mit /search-endpoint http://host:port',
3030
+ endpointMustBeHttp: "web_search: SearXNG-Endpunkt muss http(s) sein, {protocol} erhalten \u2014 versuche: setze eine g\xFCltige URL mit /search-endpoint http://host:port",
3031
+ cannotReach: "web_search: SearXNG-Server unter {endpoint} nicht erreichbar \u2014 versuche: SearXNG installieren und starten (https://github.com/searxng/searxng, z.B. `docker run -d -p 8080:8080 searxng/searxng`), oder wechsle zu einer anderen Engine mit /search-engine bing|searxng|metaso|tavily|perplexity|exa",
3032
+ searxngNoResults: "web_search: 0 Ergebnisse, aber SearXNG-Antwort sieht nicht wie eine leere Ergebnisseite aus ({chars} Zeichen) \u2014 versuche: formuliere die Abfrage mit einfacheren Begriffen um oder wechsle die Engine mit /search-engine bing|searxng|metaso|tavily|perplexity|exa",
3033
+ metasoMissingKey: "web_search: Metaso ben\xF6tigt einen API-Schl\xFCssel \u2014 setze METASO_API_KEY oder konfiguriere einen mit /search-engine metaso <schl\xFCssel>. Erhalte einen unter https://metaso.cn/search-api/playground",
3034
+ metasoDailyLimit: "web_search: Metaso-Tageslimit erreicht \u2014 setze METASO_API_KEY oder erhalte einen Schl\xFCssel unter https://metaso.cn/search-api/playground",
3035
+ metasoUnauthorized: "web_search: Metaso-API-Schl\xFCssel abgelehnt \u2014 \xFCberpr\xFCfe METASO_API_KEY oder erhalte einen unter https://metaso.cn/search-api/playground",
3036
+ metasoRateLimit: "web_search: Metaso ratelimited \u2014 warte und versuche es erneut, oder erhalte einen eigenen API-Schl\xFCssel unter https://metaso.cn/search-api/playground",
3037
+ metasoServerError: "web_search: Metaso-Serverfehler ({status}) \u2014 versuche es sp\xE4ter erneut oder wechsle die Engine mit /search-engine bing|searxng|metaso|tavily|perplexity|exa",
3038
+ metasoParseError: "web_search: Metaso hat unparsbare Antwort zur\xFCckgegeben (HTTP {status}) \u2014 versuche es sp\xE4ter erneut",
3039
+ metasoApiError: "web_search: Metaso-API-Fehler (Code {code}: {message}) \u2014 versuche es sp\xE4ter erneut",
3040
+ tavilyMissingKey: "web_search: Tavily-Backend ben\xF6tigt einen API-Schl\xFCssel \u2014 setze TAVILY_API_KEY-Umgebungsvariable oder `tavilyApiKey` in ~/.reasonix/config.json; kostenlose 1000/Monat-Registrierung unter https://tavily.com",
3041
+ tavilyUnauthorized: "web_search: Tavily-API-Schl\xFCssel abgelehnt \u2014 \xFCberpr\xFCfe TAVILY_API_KEY oder erhalte einen unter https://tavily.com",
3042
+ tavilyRateLimit: "web_search: Tavily ratelimited oder monatliches Kontingent \xFCberschritten \u2014 warte, wechsle die Engine mit /search-engine bing|searxng|metaso|tavily|perplexity|exa oder upgrade deinen Tavily-Plan",
3043
+ tavilyServerError: "web_search: Tavily-Serverfehler ({status}) \u2014 versuche es sp\xE4ter erneut oder wechsle die Engine mit /search-engine bing|searxng|metaso|tavily|perplexity|exa",
3044
+ tavilyParseError: "web_search: Tavily hat unparsbare Antwort zur\xFCckgegeben (HTTP {status}) \u2014 versuche es sp\xE4ter erneut",
3045
+ perplexityMissingKey: "web_search: Perplexity-Backend ben\xF6tigt einen API-Schl\xFCssel \u2014 setze PERPLEXITY_API_KEY-Umgebungsvariable oder `perplexityApiKey` in ~/.reasonix/config.json; erhalte einen unter https://perplexity.ai/settings/api",
3046
+ perplexityUnauthorized: "web_search: Perplexity-API-Schl\xFCssel abgelehnt \u2014 \xFCberpr\xFCfe PERPLEXITY_API_KEY oder erhalte einen unter https://perplexity.ai/settings/api",
3047
+ perplexityRateLimit: "web_search: Perplexity ratelimited \u2014 warte und versuche es erneut, oder wechsle die Engine mit /search-engine bing|searxng|metaso|tavily|perplexity|exa",
3048
+ perplexityServerError: "web_search: Perplexity-Serverfehler ({status}) \u2014 versuche es sp\xE4ter erneut oder wechsle die Engine mit /search-engine bing|searxng|metaso|tavily|perplexity|exa",
3049
+ perplexityParseError: "web_search: Perplexity hat unparsbare Antwort zur\xFCckgegeben (HTTP {status}) \u2014 versuche es sp\xE4ter erneut",
3050
+ exaMissingKey: "web_search: Exa-Backend ben\xF6tigt einen API-Schl\xFCssel \u2014 setze EXA_API_KEY-Umgebungsvariable oder `exaApiKey` in ~/.reasonix/config.json; kostenlose 1000/Monat-Registrierung unter https://exa.ai",
3051
+ exaUnauthorized: "web_search: Exa-API-Schl\xFCssel abgelehnt \u2014 \xFCberpr\xFCfe EXA_API_KEY oder erhalte einen unter https://exa.ai",
3052
+ exaRateLimit: "web_search: Exa-API ratelimited oder monatliches Kontingent \xFCberschritten \u2014 warte oder upgrade unter https://exa.ai/pricing",
3053
+ exaServerError: "web_search: Exa-Serverfehler ({status}) \u2014 versuche es sp\xE4ter erneut oder wechsle die Engine mit /search-engine bing|searxng|metaso|tavily|perplexity|exa",
3054
+ exaParseError: "web_search: Exa hat unparsbare Antwort zur\xFCckgegeben (HTTP {status}) \u2014 versuche es sp\xE4ter erneut",
3055
+ fetchStatus: "web_fetch {status} f\xFCr {url} \u2014 versuche: Best\xE4tige, dass die URL im Browser aufgel\xF6st wird; der Status deutet darauf hin, dass der Host eine Fehlerseite zur\xFCckgegeben hat",
3056
+ fetchRateLimit429: "web_fetch 429 f\xFCr {url} \u2014 versuche: 10s warten vor erneuter Abfrage; der Host ratelimitet diesen Client",
3057
+ fetchForbidden403: "web_fetch 403 f\xFCr {url} \u2014 versuche: Der Host blockiert diesen Client; die Seite erfordert m\xF6glicherweise eine Anmeldung oder blockiert Bots \u2014 verwende stattdessen web_search-Ausz\xFCge",
3058
+ fetchServerError5xx: "web_fetch {status} f\xFCr {url} \u2014 versuche: \xD6ffne die URL in einem Browser; falls sie l\xE4dt, ist dies vor\xFCbergehend und ein erneuter Versuch in 30s kann helfen",
3059
+ fetchTimeout: "web_fetch: Zeit\xFCberschreitung nach {ms}ms f\xFCr {url} \u2014 versuche: eine k\xFCrzere URL oder kleinere Inhalte; dies k\xF6nnte ein langsames CDN sein, oder einmal erneut versuchen",
3060
+ fetchTooLarge: "web_fetch abgelehnt: content-length {len} Bytes \xFCberschreitet {cap}-Byte-Grenze ({url}) \u2014 versuche: eine andere URL mit kleineren Inhalten; diese Seite ist zu gro\xDF zum Abrufen",
3061
+ fetchBodyTooLarge: "web_fetch abgelehnt: Antwortbody \xFCberschritt {cap}-Byte-Grenze ({seen} Bytes gesehen) \u2014 versuche: eine andere URL mit kleineren Inhalten; diese Seite hat die Gr\xF6\xDFenbeschr\xE4nkung \xFCberschritten",
3062
+ fetchInvalidUrl: "web_fetch: URL muss mit http:// oder https:// beginnen \u2014 versuche: eine absolute http(s)-URL \xFCbergeben (die URL ist fehlerhaft oder verwendet ein nicht unterst\xFCtztes Schema)"
3063
+ },
3064
+ choiceConfirm: {
3065
+ ...EN.choiceConfirm,
3066
+ customLabel: "Eigene Antwort eingeben",
3067
+ customDesc: "Keine der Optionen passt \u2014 gib eine Freitext-Antwort ein. Das Modell liest sie w\xF6rtlich.",
3068
+ cancelLabel: "Abbrechen \u2014 Frage verwerfen",
3069
+ cancelDesc: "Modell stoppt und fragt, was du stattdessen m\xF6chtest."
3070
+ },
3071
+ cardTitles: {
3072
+ ...EN.cardTitles,
3073
+ usage: "Nutzung",
3074
+ context: "Kontext",
3075
+ search: "Suche",
3076
+ subagent: "Subagent",
3077
+ reply: "Antwort",
3078
+ reasoning: "Reasoning",
3079
+ reasoningAborted: "Reasoning (abgebrochen)",
3080
+ reasoningEllipsis: "Reasoning\u2026",
3081
+ error: "Fehler",
3082
+ doctor: "Doctor",
3083
+ you: "du",
3084
+ task: "Aufgabe"
3085
+ },
3086
+ cardLabels: {
3087
+ ...EN.cardLabels,
3088
+ prompt: "Prompt",
3089
+ reason: "Grund",
3090
+ output: "Ausgabe",
3091
+ cache: "Cache",
3092
+ session: "Sitzung",
3093
+ balance: "Guthaben",
3094
+ turn: "Turn",
3095
+ system: "System",
3096
+ tools: "Tools",
3097
+ log: "Log",
3098
+ input: "Eingabe",
3099
+ topTools: "Top-Tools",
3100
+ logMsgs: "Log-Nachr",
3101
+ hitSingular: "{count} Treffer \xB7 {files} Datei",
3102
+ hitsPlural: "{count} Treffer \xB7 {files} Dateien",
3103
+ moreHitSingular: "\u22EE +{count} weiterer Treffer",
3104
+ moreHitsPlural: "\u22EE +{count} weitere Treffer",
3105
+ earlierLine: "\u22EE {count} ausgeblendete Zeile (Strg+R f\xFCr vollst\xE4ndige Ausgabe)",
3106
+ earlierLines: "\u22EE {count} ausgeblendete Zeilen (Strg+R f\xFCr vollst\xE4ndige Ausgabe)",
3107
+ hiddenLine: "\u22EE {count} ausgeblendete Zeile",
3108
+ hiddenLines: "\u22EE {count} ausgeblendete Zeilen",
3109
+ earlierStackLine: "\u22EE {count} fr\xFChere Stack-Zeile ausgeblendet",
3110
+ earlierStackLines: "\u22EE {count} fr\xFChere Stack-Zeilen ausgeblendet",
3111
+ agent: "Agent \xB7 {name}",
3112
+ response: "Antwort",
3113
+ writing: "Schreibe \u2026",
3114
+ tok: "Tok",
3115
+ pilcrow: "\xB6",
3116
+ aborted: "abgebrochen",
3117
+ truncatedByEsc: "[durch Esc gek\xFCrzt]",
3118
+ rejected: "abgelehnt",
3119
+ exit: "Exit {code}",
3120
+ bytesIn: "{bytes} rein",
3121
+ elapsedSec: "{secs}s",
3122
+ stackTrace: "Stacktrace",
3123
+ retries: "Wiederholungen",
3124
+ reasoningLabel: "Reasoning \xB7 {count} \xB6",
3125
+ runningLabel: "l\xE4uft",
3126
+ workingLabel: "arbeitet",
3127
+ defaultFooter: "\u2191\u2193 ausw\xE4hlen \xB7 \u23CE best\xE4tigen \xB7 Esc abbrechen",
3128
+ applyAction: "[a] anwenden",
3129
+ skipAction: "[s] \xFCberspringen",
3130
+ rejectAction: "[r] ablehnen",
3131
+ levelOk: "OK",
3132
+ levelWarn: "Warn",
3133
+ levelFail: "FEHLGESCHLAGEN",
3134
+ checksLabel: "Pr\xFCfungen",
3135
+ passed: "bestanden",
3136
+ warnTag: "Warn",
3137
+ failTag: "Fehl",
3138
+ stepLabel: "Schritt",
3139
+ done: "erledigt",
3140
+ inProgress: "\u2190 in Bearbeitung",
3141
+ upcoming: "bevorstehend",
3142
+ resumed: "fortgesetzt \xB7 ",
3143
+ archive: "\u23E4 archivieren \xB7 ",
3144
+ more: "\u22EE +{count} weitere",
3145
+ categoryUser: "Benutzer",
3146
+ categoryFeedback: "Feedback",
3147
+ categoryProject: "Projekt",
3148
+ categoryReference: "Referenz"
3149
+ },
3150
+ mcpHealth: {
3151
+ ...EN.mcpHealth,
3152
+ noData: "Keine Inspektionsdaten",
3153
+ healthy: "Gesund \xB7 {ms}ms",
3154
+ slow: "Langsam \xB7 {ms}ms",
3155
+ verySlow: "Sehr langsam \xB7 {ms}ms",
3156
+ slowToast: "\u26A0 MCP `{name}` langsam \xB7 {seconds}s p95 \xFCber die letzten {sampleSize} Aufrufe",
3157
+ emptyHint: "\u2139 keine MCP-Server konfiguriert \u2014 versuche: `reasonix setup` zur erneuten Auswahl, oder `reasonix mcp install filesystem` \xB7 Shell-Befehle werden pro Aufruf abgefragt (einmal erlauben / immer erlauben / ablehnen), kein globales Allow-All"
3158
+ },
3159
+ denyContextInput: {
3160
+ ...EN.denyContextInput,
3161
+ description: "Sag dem Agenten, warum du abgelehnt hast. Der n\xE4chste Versuch sieht deinen Grund als zus\xE4tzlichen Kontext."
3162
+ },
3163
+ cardStream: {
3164
+ ...EN.cardStream,
3165
+ scrollAbove: " \u2191 {scroll} / {max} Zeile dar\xFCber",
3166
+ scrollAbovePlural: " \u2191 {scroll} / {max} Zeilen dar\xFCber",
3167
+ scrollMore: " \u2014 {remaining} weitere",
3168
+ scrollPgUp: " \xB7 Bild\u2191 / Mausrad",
3169
+ scrollCopy: " \xB7 /copy aktiviert Kopiermodus"
3170
+ },
3171
+ slashArgPicker: {
3172
+ ...EN.slashArgPicker,
3173
+ noMatch: 'keine \xDCbereinstimmung f\xFCr "{partial}"',
3174
+ keepTyping: " \u2014 tippe weiter, oder R\xFCcktaste zum Bearbeiten",
3175
+ above: " \u2191 {hidden} dar\xFCber",
3176
+ below: " \u2193 {hidden} darunter",
3177
+ footer: " \u2191\u2193 navigieren \xB7 Tab / \u23CE ausw\xE4hlen \xB7 Esc abbrechen"
3178
+ },
3179
+ mcpMarketplace: {
3180
+ ...EN.mcpMarketplace,
3181
+ title: "MCP-Marktplatz",
3182
+ filter: "Filter: ",
3183
+ filterPlaceholder: "(tippen zum Filtern)",
3184
+ matchSingular: "{n} Treffer",
3185
+ matchPlural: "{n} Treffer",
3186
+ loading: "lade\u2026",
3187
+ noEntries: "Keine Eintr\xE4ge",
3188
+ opening: "\xD6ffne Registry\u2026",
3189
+ cached: "\xB7 zwischengespeichert",
3190
+ exhausted: "\xB7 ersch\xF6pft",
3191
+ loadingMore: "Lade mehr\u2026",
3192
+ allLoaded: "Alle Seiten geladen",
3193
+ fetchingDetail: "Hole Smithery-Details\u2026",
3194
+ noInstallInfo: "keine Installationsinfo f\xFCr {name} - versuche `npx -y @smithery/cli install {name}`",
3195
+ alreadyInstalled: "Bereits installiert: {spec}",
3196
+ installed: "Installiert \u2192 {spec}",
3197
+ uninstalled: "{name} deinstalliert",
3198
+ installFailed: "Installation fehlgeschlagen: {message}",
3199
+ notInstalled: "Nicht installiert: {name}",
3200
+ bridged: "\u2713 {name} installiert - verbunden",
3201
+ bridgeFailed: "\u25B2 {name} installiert - Verbindung fehlgeschlagen: {reason}",
3202
+ bridgeReloadFailed: "\u2713 {name} installiert - starte `reasonix code` neu zur Verbindung (Neuladen fehlgeschlagen: {message})",
3203
+ restartBridge: "\u2713 {name} installiert - starte `reasonix code` neu zur Verbindung",
3204
+ needsEnv: " \xB7 ben\xF6tigt Umgebungsvariable: {env}",
3205
+ badgeOfficial: "[off]",
3206
+ badgeSmithery: "[smt]",
3207
+ badgeLocal: "[loc]",
3208
+ footerHint: "Filter eingeben \xB7 \u2191\u2193 ausw\xE4hlen \xB7 \u23CE installieren/umschalten \xB7 Bild\u2193 mehr laden \xB7 Esc schlie\xDFen",
3209
+ specLine: "Spec: {runtime} {id} \xB7 {transport}",
3210
+ smitheryDetail: "(Smithery-Eintrag \u2014 Installationsdetails werden bei Enter abgerufen)",
3211
+ statusError: "Fehler: {message}"
3212
+ },
3213
+ mcpBrowser: {
3214
+ ...EN.mcpBrowser,
3215
+ title: "\u25C8 MCP-Browser",
3216
+ empty: "Keine MCP-Server angeh\xE4ngt. F\xFChre `reasonix setup` aus, um welche auszuw\xE4hlen, oder starte mit --mcp.",
3217
+ serverCount: "{count} Server",
3218
+ footer: "\u2191\u2193 ausw\xE4hlen \xB7 [r] neu verbinden \xB7 [d] deaktivieren \xB7 Esc beenden"
3219
+ },
3220
+ mcpBrowse: {
3221
+ ...EN.mcpBrowse,
3222
+ noResources: "Keine Ressourcen auf einem verbundenen MCP-Server (oder keine Server verbunden). `/mcp` zeigt den aktuellen Satz.",
3223
+ readOne: "Lese einen: `/resource <uri>` \u2014 oder verwende Tab in der Auswahl.",
3224
+ noPrompts: "Keine Prompts auf einem verbundenen MCP-Server (oder keine Server verbunden). `/mcp` zeigt den aktuellen Satz.",
3225
+ fetchOne: "Rufe einen ab: `/prompt <name>` \u2014 Argumente werden noch nicht unterst\xFCtzt; Prompts mit erforderlichen Argumenten geben einen Fehler vom Server zur\xFCck.",
3226
+ noServerForResource: 'kein Server bietet Ressource "{name}"',
3227
+ resourceHint: "`/resource` ohne Argument listet verf\xFCgbare Ressourcen.",
3228
+ readFailed: "readResource fehlgeschlagen",
3229
+ noServerForPrompt: 'kein Server bietet Prompt "{name}"',
3230
+ promptHint: "`/prompt` ohne Argument listet verf\xFCgbare Prompts.",
3231
+ fetchFailed: "getPrompt fehlgeschlagen"
3232
+ },
3233
+ mcpLifecycle: {
3234
+ ...EN.mcpLifecycle,
3235
+ handshake: "Handshake\u2026",
3236
+ connected: "verbunden",
3237
+ failed: "fehlgeschlagen",
3238
+ disabled: "deaktiviert",
3239
+ reconnect: "Wiederverbinden\u2026",
3240
+ initDetail: "initialisiere \u2192 tools/list \u2192 resources/list",
3241
+ reconnectDetail: "baue ab \xB7 neuer Handshake \xB7 liste Tools",
3242
+ disabledDetail: "via /mcp disable {name}",
3243
+ failedSetupHint: "\u2192 f\xFChre `reasonix setup` aus, um diesen Eintrag zu entfernen, oder behebe das zugrunde liegende Problem (fehlendes npm-Paket, Netzwerk usw.).",
3244
+ failedSetupConfigHint: "\u2192 f\xFChre `reasonix setup` aus, um fehlerhafte Eintr\xE4ge aus deiner gespeicherten Konfiguration zu entfernen.",
3245
+ abortedHint: "MCP-Start abgebrochen \u2014 {count} Server \xFCbersprungen. F\xFChre /mcp aus, um es erneut zu versuchen, sobald du das zugrunde liegende Problem behoben hast.",
3246
+ toolsReady: "Tools bereit",
3247
+ warnLabel: "Warn"
3248
+ },
3249
+ checkpointPicker: {
3250
+ ...EN.checkpointPicker,
3251
+ title: "Checkpoint wiederherstellen \u2014 {workspace}",
3252
+ header: " \u25C8 REASONIX \xB7 Checkpoint ausw\xE4hlen ",
3253
+ empty: " noch keine Checkpoints in diesem Arbeitsbereich - siehe /checkpoint zum Erstellen",
3254
+ more: " \u2026 {hidden} weitere",
3255
+ footer: " \u2191\u2193 ausw\xE4hlen \xB7 \u23CE wiederherstellen \xB7 [d] vergessen \xB7 Esc beenden",
3256
+ footerEmpty: " Esc beenden"
3257
+ },
3258
+ planReviseConfirm: {
3259
+ ...EN.planReviseConfirm,
3260
+ title: "Plan-\xDCberarbeitung vorgeschlagen",
3261
+ metaRight: "\u2212{removed} +{added} \xB7 {kept} behalten",
3262
+ updatedSummary: "Aktualisierte Zusammenfassung: {summary}",
3263
+ acceptLabel: "\xDCberarbeitung annehmen \u2014 neue Schrittliste anwenden",
3264
+ acceptHint: "Ersetzt den Restplan durch die vorgeschlagenen Schritte. Erledigte Schritte bleiben unber\xFChrt.",
3265
+ rejectLabel: "Ablehnen \u2014 Originalplan behalten",
3266
+ rejectHint: "Vorschlag verwerfen. Modell f\xE4hrt mit den urspr\xFCnglichen verbleibenden Schritten fort."
3267
+ },
3268
+ diffApp: {
3269
+ ...EN.diffApp,
3270
+ title: "reasonix diff",
3271
+ turnLabel: "Turn {turn} ({current}/{total})",
3272
+ turnsAligned: "{count} Turns ausgerichtet",
3273
+ paneEmpty: "(keine Datens\xE4tze auf dieser Seite f\xFCr diesen Turn)",
3274
+ kindMatch: "\u2713 \xDCbereinstimmung",
3275
+ kindDiverge: "\u2605 Abweichung",
3276
+ kindOnlyInA: "\u2190 nur in A",
3277
+ kindOnlyInB: "\u2192 nur in B"
3278
+ },
3279
+ recordView: {
3280
+ ...EN.recordView,
3281
+ userPrefix: "Du \xBB ",
3282
+ assistant: "Assistent",
3283
+ toolPrefix: "Tool<",
3284
+ argsLabel: " Args: ",
3285
+ resultArrow: " \u2192 ",
3286
+ error: "Fehler ",
3287
+ cache: " \xB7 Cache ",
3288
+ toolCallOnly: "(nur Tool-Call-Antwort)",
3289
+ truncateExtra: "(+{extra} Zeichen)"
3290
+ },
3291
+ replayApp: {
3292
+ ...EN.replayApp,
3293
+ emptyTranscript: "Leeres Transkript",
3294
+ turnProgress: "Turn {current}/{total}",
3295
+ noRecords: "Keine Datens\xE4tze",
3296
+ untracked: "(nicht verfolgt)",
3297
+ churned: "(umgewandelt \xD7{count})"
3298
+ },
3299
+ builtinSkills: {
3300
+ ...EN.builtinSkills,
3301
+ explore: 'Durchsuche die Codebasis in einem isolierten Subagenten \u2014 breit angelegte, schreibgesch\xFCtzte Untersuchung, die eine destillierte Antwort zur\xFCckgibt. Am besten f\xFCr: \xBBFinde alle Stellen, die\u2026", \xBBWie funktioniert X im gesamten Projekt", \xBBDurchsuche den Code nach Y".',
3302
+ research: 'Recherchiere eine Frage durch Kombination von Websuche + Codelesen in einem isolierten Subagenten. Am besten f\xFCr: \xBBWird X-Feature von Bibliothek Y unterst\xFCtzt?", \xBBWas ist der kanonische Weg, Z zu tun?", \xBBVergleiche unsere Implementierung mit dem Standard".',
3303
+ review: "\xDCberpr\xFCfe die ausstehenden \xC4nderungen (aktueller Branch-Diff) in einem isolierten Subagenten \u2014 kennzeichnet Korrektheit, Sicherheit, fehlende Tests, versteckte Verhaltens\xE4nderungen; meldet Befund + pro-Problem datei:zeile. Schreibgesch\xFCtzt; das \xFCbergeordnete Element entscheidet, was zu tun ist.",
3304
+ securityReview: "Sicherheitsfokussierte \xDCberpr\xFCfung des aktuellen Branch-Diffs in einem isolierten Subagenten \u2014 kennzeichnet Injection/Authz/Secrets/Deserialisierung/Pfad-Traversal/Krypto-Probleme, mit Schweregrad. Schreibgesch\xFCtzt. Verwende beim Ausliefern von \xC4nderungen, die Auth, Eingabeanalyse, Datei-E/A oder externe Anfragen betreffen.",
3305
+ test: "F\xFChre die Testsuite des Projekts aus, diagnostiziere Fehler, schlage SEARCH/REPLACE-Fixes vor, wiederhole bis gr\xFCn (oder stoppe nach 2 Fixversuchen beim gleichen Fehler). Inline \u2014 l\xE4uft in der \xFCbergeordneten Schleife, sodass du die Edit-Blocks siehst und /apply verwenden kannst. Erkennt npm/pnpm/yarn/pytest/go/cargo."
3306
+ },
3307
+ shortcutsHelp: {
3308
+ ...EN.shortcutsHelp,
3309
+ title: "Tastenk\xFCrzel",
3310
+ groupInput: "Eingabe",
3311
+ groupNavigation: "Navigation",
3312
+ groupSession: "Sitzung",
3313
+ groupSystem: "System",
3314
+ descEnter: "Nachricht senden",
3315
+ descShiftEnter: "Neue Zeile",
3316
+ descCtrlEnter: "Neue Zeile",
3317
+ descCtrlJ: "Neue Zeile",
3318
+ descCtrlU: "Eingabe leeren",
3319
+ descCtrlW: "Wort l\xF6schen",
3320
+ descCtrlP: "Tastenk\xFCrzel anzeigen/ausblenden",
3321
+ descCtrlX: "Im Editor \xF6ffnen",
3322
+ descArrows: "Eingabeverlauf",
3323
+ descPgUpDown: "Seite scrollen",
3324
+ descCtrlL: "Bildschirm leeren",
3325
+ descCtrlB: "Seitenleiste umschalten",
3326
+ descNewSession: "Neue Sitzung",
3327
+ descListSessions: "Sitzungen auflisten",
3328
+ descSwitchModel: "Modell wechseln",
3329
+ descSwitchEffort: "Reasoning-Effort wechseln",
3330
+ descSwitchTheme: "Theme wechseln",
3331
+ descCtrlC: "Beenden",
3332
+ descEsc: "Stoppen / Abbrechen",
3333
+ descCtrlR: "Ausf\xFChrlich umschalten",
3334
+ descCtrlO: "Antwort erweitern (nur w\xE4hrend Streaming)",
3335
+ descHelp: "Alle Befehle anzeigen",
3336
+ descShiftTab: "Edit-Modus wechseln",
3337
+ descAltS: "Eingabe speichern / abrufen"
3338
+ },
3339
+ mcpCli: {
3340
+ ...EN.mcpCli,
3341
+ bundledCatalog: "Mitgelieferte MCP-Server (Offline-Katalog):",
3342
+ justFetched: "Gerade abgerufen",
3343
+ cachedAge: "Zwischengespeichert, {age}",
3344
+ moreAvailable: "Mehr verf\xFCgbar",
3345
+ allLoaded: "Alle geladen",
3346
+ morePagesAvailable: "\u25B8 mehr Seiten verf\xFCgbar \u2014 `reasonix mcp list --pages <n>` oder --all",
3347
+ installHint: "Installieren: reasonix mcp install <name>",
3348
+ usageSearch: "Verwendung: reasonix mcp search <abfrage>",
3349
+ usageInstall: "Verwendung: reasonix mcp install <name>",
3350
+ noMatchesFor: 'Keine Treffer f\xFCr "{q}" in {count} geladenen Eintr\xE4gen ({source})',
3351
+ matchCount: '{count} Treffer f\xFCr "{q}" in {source}-Registry ({loaded} durchsuchte Eintr\xE4ge):',
3352
+ moreLoaded: "\u2026 {count} weitere geladen \u2014 verwende `reasonix mcp search <abfrage>` zum Filtern",
3353
+ moreMatches: "\u2026 {count} weitere Treffer",
3354
+ installed: "Installiert: {spec}",
3355
+ noServerFound: 'Kein MCP-Server namens "{target}" gefunden nach {pages} Seite(n) der {source}-Registry.',
3356
+ noServerTryMore: "Versuche: reasonix mcp install {target} --max-pages 100",
3357
+ noInstallMeta: 'Konnte Installationsmetadaten f\xFCr "{name}" nicht ableiten \u2014 versuche `npx -y @smithery/cli install {name}` direkt.',
3358
+ buildSpecFailed: "Kann Installationsspec f\xFCr {name} nicht erstellen: {message}",
3359
+ alreadyInstalled: "Bereits installiert: {spec}"
3360
+ }
3361
+ };
3362
+
1659
3363
  // src/i18n/zh-CN.ts
1660
3364
  var zhCN = {
1661
3365
  common: {
@@ -2313,6 +4017,8 @@ var zhCN = {
2313
4017
  deepseek5xxUnreachable: " \u65E0\u6CD5\u4ECE\u4F60\u7684\u7F51\u7EDC\u8BBF\u95EE DeepSeek API \u2014 \u53EF\u80FD\u662F DS \u6574\u4F53\u6545\u969C\uFF0C\u4E5F\u53EF\u80FD\u662F\u672C\u5730\u7F51\u7EDC\u95EE\u9898\u3002",
2314
4018
  deepseek5xxActionNetwork: " \u5EFA\u8BAE\uFF1A(1) \u68C0\u67E5\u7F51\u7EDC\uFF0C(2) \u7B49 30 \u79D2\u540E\u91CD\u8BD5\uFF0C(3) \u67E5\u770B\u72B6\u6001\u9875 https://status.deepseek.com\u3002",
2315
4019
  deepseek5xxActionRetry: " \u5EFA\u8BAE\uFF1A(1) \u7B49 30 \u79D2\u540E\u91CD\u8BD5\uFF0C(2) \u7528 /model \u5207\u6362\u6A21\u578B\uFF0C(3) \u67E5\u770B\u72B6\u6001\u9875 https://status.deepseek.com\u3002",
4020
+ upstream5xxHead: "\u4E0A\u6E38\u670D\u52A1\u4E0D\u53EF\u7528\uFF08{status}\uFF09\uFF0C\u76EE\u6807\u5730\u5740 {host} \u2014 \u4F60\u914D\u7F6E\u7684 API \u7AEF\u70B9\u8FD4\u56DE\u4E86\u670D\u52A1\u5668\u9519\u8BEF\uFF0C\u4E0D\u662F Reasonix \u6545\u969C\u3002\u5DF2\u6309\u6307\u6570\u9000\u907F\u91CD\u8BD5 4 \u6B21\u3002",
4021
+ upstream5xxActionRetry: " \u5EFA\u8BAE\uFF1A(1) \u786E\u8BA4\u672C\u5730/\u4EE3\u7406\u6A21\u578B\u670D\u52A1\u5728\u7EBF\uFF0C(2) \u7B49\u4E00\u4F1A\u513F\u518D\u91CD\u8BD5\uFF0C(3) \u7528 /model \u5207\u6362\u6A21\u578B\u3002",
2316
4022
  innerNoMessage: "\uFF08\u65E0\u9519\u8BEF\u4FE1\u606F\uFF09",
2317
4023
  reasonAborted: "[\u7528\u6237\u5DF2\u4E2D\u65AD\uFF08Esc\uFF09 \u2014 \u6B63\u5728\u603B\u7ED3\u5230\u76EE\u524D\u4E3A\u6B62\u7684\u53D1\u73B0]",
2318
4024
  reasonContextGuard: "[\u4E0A\u4E0B\u6587\u989D\u5EA6\u5373\u5C06\u8017\u5C3D \u2014 \u5728\u4E0B\u4E00\u6B21\u8C03\u7528\u6EA2\u51FA\u4E4B\u524D\u5148\u603B\u7ED3]",
@@ -2493,6 +4199,7 @@ var zhCN = {
2493
4199
  modelSet: "model \u2192 {id}",
2494
4200
  effortStatus: "effort \u2192 {current} \uFF08\u53EF\u9009\uFF1A{list}\uFF09",
2495
4201
  effortUsage: "\u7528\u6CD5\uFF1A/effort <{list}> \uFF08high \u4E3A\u5B89\u5168\u9ED8\u8BA4\uFF1Bmax \u662F DeepSeek \u6269\u5C55\uFF09",
4202
+ effortUsageNoMax: "\u7528\u6CD5\uFF1A/effort <{list}>",
2496
4203
  effortSet: "effort \u2192 {effort}",
2497
4204
  budgetNoCap: "\u672A\u8BBE\u7F6E\u4F1A\u8BDD\u9884\u7B97 \u2014 Reasonix \u5C06\u6301\u7EED\u8FD0\u884C\u76F4\u5230\u60A8\u505C\u6B62\u3002\u4F7F\u7528\u4EE5\u4E0B\u65B9\u5F0F\u8BBE\u7F6E\uFF1A/budget <usd> \uFF08\u4F8B\u5982 /budget 5\uFF09",
2498
4205
  budgetStatus: "\u9884\u7B97\uFF1A${spent} / ${cap}\uFF08{pct}%\uFF09\xB7 /budget off \u6E05\u9664\uFF0C/budget <usd> \u66F4\u6539",
@@ -3308,13 +5015,18 @@ var zhCN = {
3308
5015
  // src/i18n/index.ts
3309
5016
  var translations = {
3310
5017
  EN,
3311
- "zh-CN": zhCN
5018
+ "zh-CN": zhCN,
5019
+ de
3312
5020
  };
3313
- function detectSystemLanguage(locale = Intl.DateTimeFormat().resolvedOptions().locale) {
5021
+ function detectSystemLanguage(locale = systemLocale()) {
3314
5022
  if (locale.startsWith("zh")) return "zh-CN";
3315
5023
  if (locale.startsWith("en")) return "EN";
5024
+ if (locale.startsWith("de")) return "de";
3316
5025
  return null;
3317
5026
  }
5027
+ function systemLocale() {
5028
+ return process.env.LC_ALL || process.env.LC_MESSAGES || process.env.LANG || Intl.DateTimeFormat().resolvedOptions().locale;
5029
+ }
3318
5030
  var currentLang = loadLanguage() ?? detectSystemLanguage() ?? "EN";
3319
5031
  var listeners = [];
3320
5032
  function onLanguageChange(cb) {
@@ -3392,4 +5104,4 @@ export {
3392
5104
  tObj,
3393
5105
  t
3394
5106
  };
3395
- //# sourceMappingURL=chunk-PYIZZAVQ.js.map
5107
+ //# sourceMappingURL=chunk-DVD67FXQ.js.map