mulmoclaude 0.1.2 → 0.4.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 (251) hide show
  1. package/bin/mulmoclaude.js +7 -24
  2. package/client/assets/html2canvas-Cx501zZr-Cv5snK9D.js +5 -0
  3. package/client/assets/index-CubzmCVK.css +2 -0
  4. package/client/assets/{index-D8rhwXLq.js → index-DtcyExH9.js} +80 -61
  5. package/client/assets/{index.es-D4YyL_Dg-BfRHLTZV.js → index.es-D4YyL_Dg-DnizuhIY.js} +5 -5
  6. package/client/index.html +2 -4
  7. package/package.json +13 -13
  8. package/server/agent/attachmentConverter.ts +2 -2
  9. package/server/agent/config.ts +12 -12
  10. package/server/agent/index.ts +9 -3
  11. package/server/agent/mcp-server.ts +19 -19
  12. package/server/agent/mcp-tools/index.ts +6 -6
  13. package/server/agent/mcp-tools/x.ts +7 -6
  14. package/server/agent/prompt.ts +195 -29
  15. package/server/agent/resumeFailover.ts +5 -5
  16. package/server/agent/sandboxMounts.ts +10 -10
  17. package/server/agent/stream.ts +4 -4
  18. package/server/api/auth/bearerAuth.ts +3 -3
  19. package/server/api/auth/token.ts +2 -2
  20. package/server/api/routes/agent.ts +21 -3
  21. package/server/api/routes/config.ts +1 -1
  22. package/server/api/routes/files.ts +22 -21
  23. package/server/api/routes/html.ts +2 -2
  24. package/server/api/routes/image.ts +7 -7
  25. package/server/api/routes/mulmo-script.ts +33 -31
  26. package/server/api/routes/pdf.ts +2 -2
  27. package/server/api/routes/plugins.ts +16 -6
  28. package/server/api/routes/roles.ts +2 -2
  29. package/server/api/routes/scheduler.ts +14 -12
  30. package/server/api/routes/schedulerHandlers.ts +12 -12
  31. package/server/api/routes/schedulerTasks.ts +19 -17
  32. package/server/api/routes/sessions.ts +26 -26
  33. package/server/api/routes/sessionsCursor.ts +4 -4
  34. package/server/api/routes/skills.ts +5 -5
  35. package/server/api/routes/sources.ts +3 -3
  36. package/server/api/routes/todosColumnsHandlers.ts +30 -30
  37. package/server/api/routes/todosHandlers.ts +1 -1
  38. package/server/api/routes/todosItemsHandlers.ts +14 -14
  39. package/server/api/routes/wiki.ts +36 -22
  40. package/server/api/sandboxStatus.ts +1 -1
  41. package/server/events/notifications.ts +6 -6
  42. package/server/events/pub-sub/index.ts +3 -3
  43. package/server/events/relay-client.ts +17 -16
  44. package/server/events/scheduler-adapter.ts +20 -20
  45. package/server/events/session-store/index.ts +10 -10
  46. package/server/events/task-manager/index.ts +7 -7
  47. package/server/index.ts +59 -65
  48. package/server/system/config.ts +5 -5
  49. package/server/system/credentials.ts +7 -5
  50. package/server/system/env.ts +5 -5
  51. package/server/utils/date.ts +18 -18
  52. package/server/utils/files/atomic.ts +16 -16
  53. package/server/utils/files/html-io.ts +5 -5
  54. package/server/utils/files/image-store.ts +19 -8
  55. package/server/utils/files/journal-io.ts +4 -4
  56. package/server/utils/files/json.ts +5 -5
  57. package/server/utils/files/markdown-store.ts +4 -4
  58. package/server/utils/files/naming.ts +2 -2
  59. package/server/utils/files/reference-dirs-io.ts +3 -3
  60. package/server/utils/files/roles-io.ts +12 -12
  61. package/server/utils/files/safe.ts +14 -14
  62. package/server/utils/files/scheduler-io.ts +5 -5
  63. package/server/utils/files/scheduler-overrides-io.ts +2 -2
  64. package/server/utils/files/session-io.ts +35 -35
  65. package/server/utils/files/spreadsheet-store.ts +7 -7
  66. package/server/utils/files/todos-io.ts +9 -9
  67. package/server/utils/files/user-tasks-io.ts +5 -5
  68. package/server/utils/files/workspace-io.ts +12 -12
  69. package/server/utils/gemini.ts +2 -2
  70. package/server/utils/gitignore.ts +9 -9
  71. package/server/utils/json.ts +5 -5
  72. package/server/utils/logBackgroundError.ts +12 -3
  73. package/server/utils/markdown.ts +5 -5
  74. package/server/utils/port.d.mts +6 -0
  75. package/server/utils/port.mjs +48 -0
  76. package/server/utils/request.ts +12 -6
  77. package/server/utils/spawn.ts +1 -1
  78. package/server/utils/types.ts +2 -2
  79. package/server/workspace/chat-index/indexer.ts +15 -15
  80. package/server/workspace/chat-index/summarizer.ts +4 -4
  81. package/server/workspace/custom-dirs.ts +16 -16
  82. package/server/workspace/journal/archivist.ts +35 -35
  83. package/server/workspace/journal/dailyPass.ts +31 -28
  84. package/server/workspace/journal/diff.ts +2 -2
  85. package/server/workspace/journal/index.ts +4 -4
  86. package/server/workspace/journal/indexFile.ts +29 -25
  87. package/server/workspace/journal/optimizationPass.ts +2 -2
  88. package/server/workspace/journal/state.ts +6 -6
  89. package/server/workspace/paths.ts +3 -3
  90. package/server/workspace/reference-dirs.ts +20 -20
  91. package/server/workspace/roles.ts +6 -6
  92. package/server/workspace/skills/discovery.ts +4 -4
  93. package/server/workspace/skills/parser.ts +6 -6
  94. package/server/workspace/skills/scheduler.ts +3 -3
  95. package/server/workspace/skills/user-tasks.ts +34 -34
  96. package/server/workspace/skills/writer.ts +3 -3
  97. package/server/workspace/sources/arxivDiscovery.ts +10 -10
  98. package/server/workspace/sources/classifier.ts +7 -7
  99. package/server/workspace/sources/fetchers/arxiv.ts +7 -7
  100. package/server/workspace/sources/fetchers/githubIssues.ts +7 -7
  101. package/server/workspace/sources/fetchers/githubReleases.ts +7 -7
  102. package/server/workspace/sources/fetchers/rss.ts +5 -5
  103. package/server/workspace/sources/fetchers/rssParser.ts +4 -4
  104. package/server/workspace/sources/interests.ts +12 -12
  105. package/server/workspace/sources/paths.ts +6 -6
  106. package/server/workspace/sources/pipeline/fetch.ts +36 -13
  107. package/server/workspace/sources/pipeline/index.ts +8 -13
  108. package/server/workspace/sources/pipeline/notify.ts +3 -3
  109. package/server/workspace/sources/pipeline/plan.ts +15 -13
  110. package/server/workspace/sources/pipeline/write.ts +5 -5
  111. package/server/workspace/sources/rateLimiter.ts +1 -1
  112. package/server/workspace/sources/registry.ts +16 -16
  113. package/server/workspace/sources/robots.ts +14 -14
  114. package/server/workspace/sources/sourceState.ts +17 -10
  115. package/server/workspace/sources/types.ts +9 -0
  116. package/server/workspace/sources/urls.ts +1 -1
  117. package/server/workspace/tool-trace/classify.ts +4 -4
  118. package/server/workspace/tool-trace/index.ts +1 -1
  119. package/server/workspace/tool-trace/writeSearch.ts +26 -16
  120. package/server/workspace/wiki-backlinks/index.ts +8 -8
  121. package/server/workspace/wiki-backlinks/sessionBacklinks.ts +15 -15
  122. package/server/workspace/workspace.ts +7 -7
  123. package/src/App.vue +315 -141
  124. package/src/components/CanvasViewToggle.vue +10 -7
  125. package/src/components/ChatInput.vue +67 -33
  126. package/src/components/FileContentHeader.vue +7 -4
  127. package/src/components/FileContentRenderer.vue +20 -6
  128. package/src/components/FileTree.vue +6 -3
  129. package/src/components/FileTreePane.vue +11 -8
  130. package/src/components/FilesView.vue +5 -3
  131. package/src/components/LockStatusPopup.vue +17 -14
  132. package/src/components/NotificationBell.vue +14 -5
  133. package/src/components/NotificationToast.vue +6 -3
  134. package/src/components/PluginLauncher.vue +19 -56
  135. package/src/components/RightSidebar.vue +13 -10
  136. package/src/components/RoleSelector.vue +2 -2
  137. package/src/components/SessionHistoryPanel.vue +38 -34
  138. package/src/components/SessionTabBar.vue +8 -10
  139. package/src/components/SettingsMcpTab.vue +49 -36
  140. package/src/components/SettingsModal.vue +24 -22
  141. package/src/components/SettingsReferenceDirsTab.vue +39 -34
  142. package/src/components/SettingsWorkspaceDirsTab.vue +37 -27
  143. package/src/components/SidebarHeader.vue +25 -4
  144. package/src/components/StackView.vue +4 -1
  145. package/src/components/SuggestionsPanel.vue +7 -4
  146. package/src/components/TodoExplorer.vue +26 -15
  147. package/src/components/ToolResultsPanel.vue +27 -13
  148. package/src/components/todo/TodoAddDialog.vue +19 -14
  149. package/src/components/todo/TodoEditDialog.vue +7 -2
  150. package/src/components/todo/TodoEditPanel.vue +17 -12
  151. package/src/components/todo/TodoKanbanView.vue +10 -5
  152. package/src/components/todo/TodoListView.vue +10 -7
  153. package/src/components/todo/TodoTableView.vue +5 -2
  154. package/src/composables/useAppApi.ts +9 -0
  155. package/src/composables/useClickOutside.ts +2 -2
  156. package/src/composables/useDynamicFavicon.ts +172 -37
  157. package/src/composables/useEventListeners.ts +7 -8
  158. package/src/composables/useFaviconState.ts +13 -2
  159. package/src/composables/useFileSelection.ts +24 -6
  160. package/src/composables/useFreshPluginData.ts +3 -3
  161. package/src/composables/useKeyNavigation.ts +11 -11
  162. package/src/composables/useLayoutMode.ts +32 -0
  163. package/src/composables/useMcpTools.ts +2 -2
  164. package/src/composables/useNotifications.ts +3 -3
  165. package/src/composables/usePdfDownload.ts +4 -4
  166. package/src/composables/usePendingCalls.ts +1 -1
  167. package/src/composables/usePubSub.ts +10 -10
  168. package/src/composables/useRoles.ts +1 -1
  169. package/src/composables/useSandboxStatus.ts +1 -1
  170. package/src/composables/useSessionDerived.ts +3 -3
  171. package/src/composables/useSessionHistory.ts +7 -17
  172. package/src/composables/useSessionSync.ts +8 -8
  173. package/src/composables/useViewLayout.ts +20 -34
  174. package/src/config/roles.ts +2 -2
  175. package/src/lang/de.ts +536 -0
  176. package/src/lang/en.ts +558 -0
  177. package/src/lang/es.ts +543 -0
  178. package/src/lang/fr.ts +536 -0
  179. package/src/lang/ja.ts +536 -0
  180. package/src/lang/ko.ts +540 -0
  181. package/src/lang/pt-BR.ts +534 -0
  182. package/src/lang/zh.ts +537 -0
  183. package/src/lib/vue-i18n.ts +97 -0
  184. package/src/main.ts +2 -0
  185. package/src/plugins/canvas/View.vue +102 -186
  186. package/src/plugins/canvas/definition.ts +0 -8
  187. package/src/plugins/chart/Preview.vue +5 -5
  188. package/src/plugins/chart/View.vue +9 -4
  189. package/src/plugins/manageRoles/Preview.vue +4 -1
  190. package/src/plugins/manageRoles/View.vue +59 -43
  191. package/src/plugins/manageSkills/Preview.vue +8 -3
  192. package/src/plugins/manageSkills/View.vue +29 -25
  193. package/src/plugins/manageSource/Preview.vue +2 -2
  194. package/src/plugins/manageSource/View.vue +73 -52
  195. package/src/plugins/markdown/Preview.vue +1 -1
  196. package/src/plugins/markdown/View.vue +26 -36
  197. package/src/plugins/presentHtml/Preview.vue +1 -1
  198. package/src/plugins/presentHtml/View.vue +7 -4
  199. package/src/plugins/presentHtml/helpers.ts +8 -8
  200. package/src/plugins/presentMulmoScript/Preview.vue +1 -1
  201. package/src/plugins/presentMulmoScript/View.vue +40 -30
  202. package/src/plugins/presentMulmoScript/helpers.ts +1 -1
  203. package/src/plugins/scheduler/Preview.vue +13 -10
  204. package/src/plugins/scheduler/TasksTab.vue +57 -28
  205. package/src/plugins/scheduler/View.vue +28 -19
  206. package/src/plugins/scheduler/formatSchedule.ts +93 -0
  207. package/src/plugins/spreadsheet/Preview.vue +8 -3
  208. package/src/plugins/spreadsheet/View.vue +21 -12
  209. package/src/plugins/textResponse/Preview.vue +15 -58
  210. package/src/plugins/textResponse/View.vue +29 -9
  211. package/src/plugins/todo/Preview.vue +13 -8
  212. package/src/plugins/todo/View.vue +38 -24
  213. package/src/plugins/todo/composables/useTodos.ts +5 -5
  214. package/src/plugins/ui-image/ImagePreview.vue +6 -3
  215. package/src/plugins/ui-image/ImageView.vue +7 -4
  216. package/src/plugins/wiki/Preview.vue +10 -7
  217. package/src/plugins/wiki/View.vue +202 -81
  218. package/src/plugins/wiki/helpers.ts +4 -4
  219. package/src/plugins/wiki/route.ts +112 -0
  220. package/src/router/guards.ts +46 -28
  221. package/src/router/index.ts +41 -26
  222. package/src/types/session.ts +4 -3
  223. package/src/types/vue-i18n.d.ts +20 -0
  224. package/src/utils/agent/request.ts +22 -3
  225. package/src/utils/canvas/layoutMode.ts +26 -0
  226. package/src/utils/dom/scrollable.ts +2 -2
  227. package/src/utils/files/expandedDirs.ts +1 -1
  228. package/src/utils/files/sortChildren.ts +6 -6
  229. package/src/utils/format/frontmatter.ts +6 -6
  230. package/src/utils/image/cacheBust.ts +16 -0
  231. package/src/utils/image/resolve.ts +16 -0
  232. package/src/utils/image/rewriteMarkdownImageRefs.ts +5 -5
  233. package/src/utils/markdown/extractFirstH1.ts +2 -2
  234. package/src/utils/path/relativeLink.ts +15 -15
  235. package/src/utils/path/workspaceLinkRouter.ts +81 -0
  236. package/src/utils/role/icon.ts +2 -2
  237. package/src/utils/role/merge.ts +2 -2
  238. package/src/utils/role/plugins.ts +1 -1
  239. package/src/utils/session/sessionFactory.ts +2 -2
  240. package/src/utils/session/sessionHelpers.ts +2 -2
  241. package/src/utils/tools/dedup.ts +4 -4
  242. package/src/utils/tools/result.ts +3 -3
  243. package/src/utils/types.ts +2 -2
  244. package/src/vite-env.d.ts +9 -0
  245. package/client/assets/chunk-vKJrgz-R-C_I3GbVV.js +0 -1
  246. package/client/assets/html2canvas-Cx501zZr-BF5dYYkY.js +0 -5
  247. package/client/assets/index-KNLBjwuh.css +0 -1
  248. package/client/assets/typeof-DBp4T-Ny-BC0P-2DM.js +0 -1
  249. package/src/composables/useCanvasViewMode.ts +0 -121
  250. package/src/utils/canvas/viewMode.ts +0 -46
  251. /package/client/assets/{purify.es-Fx1Nqyry-PeS5RUhs.js → purify.es-Fx1Nqyry-BwJECkqS.js} +0 -0
package/src/lang/de.ts ADDED
@@ -0,0 +1,536 @@
1
+ // German dictionary. Mirror the shape of src/lang/en.ts —
2
+ // missing keys fall back to English per createI18n's fallbackLocale.
3
+
4
+ const deMessages = {
5
+ common: {
6
+ save: "Speichern",
7
+ cancel: "Abbrechen",
8
+ loading: "Wird geladen...",
9
+ close: "Schließen",
10
+ dismiss: "Verwerfen",
11
+ add: "Hinzufügen",
12
+ remove: "Entfernen",
13
+ saving: "Wird gespeichert...",
14
+ saved: "Gespeichert",
15
+ noResultsYet: "Noch keine Ergebnisse",
16
+ noImageYet: "Noch kein Bild",
17
+ },
18
+ sessionTabBar: {
19
+ newSession: "Neue Sitzung",
20
+ sessionHistory: "Sitzungsverlauf",
21
+ activeSessions: "{count} aktive Sitzung (Agent läuft) | {count} aktive Sitzungen (Agent läuft)",
22
+ unreadReplies: "{count} ungelesene Antwort | {count} ungelesene Antworten",
23
+ },
24
+ chatInput: {
25
+ placeholder: "Aufgabe eingeben oder Datei ziehen / einfügen / anhängen…",
26
+ expandEditor: "Editor erweitern",
27
+ composeMessage: "Nachricht verfassen",
28
+ sendHint: "Cmd+Eingabe zum Senden",
29
+ send: "Senden",
30
+ attachFile: "Datei anhängen",
31
+ fileTooLarge: "Datei zu groß ({sizeMB} MB). Das Maximum beträgt 30 MB.",
32
+ unsupportedFileType: "Dateityp nicht unterstützt. Akzeptiert: Bilder, PDF, DOCX, XLSX, PPTX, Textdateien.",
33
+ },
34
+ sessionHistoryPanel: {
35
+ filters: {
36
+ all: "Alle",
37
+ unread: "Ungelesen",
38
+ human: "Mensch",
39
+ scheduler: "Scheduler",
40
+ skill: "Skill",
41
+ bridge: "Bridge",
42
+ },
43
+ failedToRefresh: "⚠ Aktualisieren fehlgeschlagen: {error}",
44
+ showingLastKnown: " — zeigt die zuletzt bekannte Liste.",
45
+ noSessions: "Noch keine Sitzungen.",
46
+ noMatching: "Keine passenden Sitzungen.",
47
+ running: "Läuft",
48
+ unread: "Ungelesen",
49
+ noMessages: "(keine Nachrichten)",
50
+ },
51
+ notificationBell: {
52
+ notifications: "Benachrichtigungen",
53
+ markAllRead: "Alle als gelesen markieren",
54
+ noNotifications: "Keine Benachrichtigungen",
55
+ dismiss: "Verwerfen",
56
+ },
57
+ sidebarHeader: {
58
+ home: "Zum neuesten Chat",
59
+ toolCallHistory: "Tool-Aufrufverlauf",
60
+ settings: "Einstellungen",
61
+ },
62
+ rightSidebar: {
63
+ toggleSystemPrompt: "System-Prompt umschalten",
64
+ systemPrompt: "System-Prompt",
65
+ availableTools: "Verfügbare Tools",
66
+ toggleToolDescription: "Tool-Beschreibung umschalten",
67
+ toolCallHistory: "Tool-Aufrufverlauf",
68
+ noToolCalls: "Noch keine Tool-Aufrufe",
69
+ arguments: "Argumente",
70
+ error: "Fehler",
71
+ result: "Ergebnis",
72
+ running: "Läuft...",
73
+ },
74
+ fileTreePane: {
75
+ sort: "Sortieren:",
76
+ sortByName: "Nach Name sortieren",
77
+ name: "Name",
78
+ sortByRecent: "Nach Änderungsdatum sortieren (neueste zuerst)",
79
+ recent: "Zuletzt",
80
+ reference: "Referenz",
81
+ // "RO" = Read-Only. Englische Abkürzung bleibt erhalten, um als
82
+ // kompaktes Badge neben dem Label "Referenz" zu passen.
83
+ readOnlyBadge: "RO",
84
+ },
85
+ fileTree: {
86
+ workspace: "(Arbeitsbereich)",
87
+ recentlyChanged: "Kürzlich geändert",
88
+ },
89
+ lockStatusPopup: {
90
+ sandboxEnabledTooltip: "Sandbox aktiviert (Docker)",
91
+ noSandboxTooltip: "Keine Sandbox (Docker nicht gefunden)",
92
+ sandboxEnabledLabel: "Sandbox aktiviert:",
93
+ sandboxEnabledBody: "Docker läuft. Der Dateisystemzugriff ist isoliert.",
94
+ noSandboxLabel: "Keine Sandbox:",
95
+ noSandboxBodyPrefix: "Claude kann auf alle Dateien auf Ihrem Rechner zugreifen. Installieren Sie",
96
+ noSandboxBodySuffix: ", um die Dateisystem-Isolation zu aktivieren.",
97
+ dockerDesktop: "Docker Desktop",
98
+ hostCredentials: "Angehängte Host-Zugangsdaten:",
99
+ credsLoading: "wird geladen…",
100
+ sshAgent: "SSH-Agent:",
101
+ forwarded: "weitergeleitet",
102
+ notForwarded: "nicht weitergeleitet",
103
+ mountedConfigs: "Eingebundene Konfigurationen:",
104
+ none: "keine",
105
+ testIsolation: "Sandbox-Isolation testen:",
106
+ },
107
+ settingsModal: {
108
+ title: "Einstellungen",
109
+ tabs: {
110
+ tools: "Erlaubte Tools",
111
+ mcp: "MCP-Server",
112
+ dirs: "Verzeichnisse",
113
+ refs: "Referenzverzeichnisse",
114
+ },
115
+ toolNamesLabel: "Tool-Namen",
116
+ invalidToolNamesPrefix: "Diese sehen nicht standardmäßig aus (erwartetes Präfix",
117
+ invalidToolNamesSuffix: "):",
118
+ mcpToolsError: "⚠ MCP-Tool-Status konnte nicht abgerufen werden: {error}. Alle Tools werden unabhängig von der Aktivierung angezeigt.",
119
+ changesHint: "Änderungen werden bei der nächsten Nachricht wirksam. Kein Neustart erforderlich.",
120
+ cannotSaveTooltip: "Kann nicht gespeichert werden, bis die Einstellungen erfolgreich geladen sind",
121
+ saving: "Wird gespeichert…",
122
+ loadingLabel: "Wird geladen…",
123
+ },
124
+ canvasViewToggle: {
125
+ stackViewTooltip: "Stapelansicht · klicken, um zur Einzelansicht zu wechseln (⌘1)",
126
+ singleViewTooltip: "Einzelansicht · klicken, um zur Stapelansicht zu wechseln (⌘2)",
127
+ switchToSingle: "Zur Einzelansicht wechseln",
128
+ switchToStack: "Zur Stapelansicht wechseln",
129
+ },
130
+ settingsWorkspaceDirs: {
131
+ explanation:
132
+ "Benutzerdefinierte Verzeichnisse zur Organisation von Dateien unter {dataDir} und {artifactsDir}. Claude nutzt sie, um das Speichern von Dateien zu steuern.",
133
+ noEntries: "Keine benutzerdefinierten Verzeichnisse konfiguriert.",
134
+ addDirTitle: "Verzeichnis hinzufügen",
135
+ pathPlaceholder: "data/kunden oder artifacts/berichte",
136
+ descPlaceholder: "Beschreibung (was in diesen Ordner gehört)",
137
+ errPathRequired: "Pfad ist erforderlich",
138
+ errMustStartWith: "Muss mit data/ oder artifacts/ beginnen",
139
+ errAlreadyExists: "Existiert bereits",
140
+ },
141
+ settingsReferenceDirs: {
142
+ explanation:
143
+ "Externe Verzeichnisse, die Claude lesen, aber nicht ändern kann. Im Docker-Modus werden sie schreibgeschützt eingebunden. Nützlich, um Obsidian-Vaults, Projektcode oder Dokumentordner zu referenzieren.",
144
+ noEntries: "Keine Referenzverzeichnisse konfiguriert.",
145
+ addDirTitle: "Referenzverzeichnis hinzufügen",
146
+ pathPlaceholder: "/Users/ich/ObsidianVault oder ~/Dokumente/notizen",
147
+ labelPlaceholder: "Label (optional — Standardwert ist der Ordnername)",
148
+ readOnlyBadge: "schreibgeschützt",
149
+ errPathRequired: "Pfad ist erforderlich",
150
+ errMustBeAbsolute: "Muss ein absoluter Pfad sein oder mit ~/ beginnen",
151
+ errAlreadyExists: "Existiert bereits",
152
+ errLabelConflict: 'Label "{label}" existiert bereits',
153
+ },
154
+ pluginLauncher: {
155
+ todos: { label: "To-dos", title: "To-dos öffnen (⌘4)" },
156
+ scheduler: { label: "Zeitplan", title: "Zeitplan öffnen (⌘5)" },
157
+ wiki: { label: "Wiki", title: "Wiki öffnen (⌘6)" },
158
+ skills: { label: "Skills", title: "Skills öffnen (⌘7)" },
159
+ roles: { label: "Rollen", title: "Rollen öffnen (⌘8)" },
160
+ files: { label: "Dateien", title: "Workspace-Dateien öffnen (⌘3)" },
161
+ },
162
+ fileContentHeader: {
163
+ showRendered: "Gerendertes Markdown anzeigen",
164
+ showRaw: "Rohquelltext anzeigen",
165
+ rendered: "Gerendert",
166
+ raw: "Roh",
167
+ closeFile: "Datei schließen",
168
+ },
169
+ fileContentRenderer: {
170
+ selectFile: "Datei auswählen",
171
+ htmlPreview: "HTML-Vorschau",
172
+ pdfPreview: "PDF-Vorschau",
173
+ parseError: "Parse-Fehler",
174
+ },
175
+ settingsMcpTab: {
176
+ explanation:
177
+ "Externe MCP-Server hinzufügen. HTTP-Server funktionieren in allen Modi. Stdio-Server nutzen {npx} / {node} / {tsx} aus dem Sandbox-Image; wenn Docker aktiviert ist, müssen die Pfade im Workspace liegen.",
178
+ localhostRewrite: "Im Docker-Modus wird {localhost} zu {hostDockerInternal} umgeschrieben.",
179
+ noServers: "Noch keine MCP-Server konfiguriert.",
180
+ enabled: "aktiviert",
181
+ urlLabel: "URL:",
182
+ commandLabel: "Befehl:",
183
+ dockerNonWorkspaceWarning: "⚠ Enthält Pfade außerhalb des Workspaces — diese werden in Docker nicht aufgelöst.",
184
+ addServerButton: "+ MCP-Server hinzufügen",
185
+ nameLabel: "Name",
186
+ namePlaceholder: "mein-server",
187
+ typeHttp: "HTTP",
188
+ typeStdio: "Stdio (Befehl)",
189
+ urlFieldLabel: "URL",
190
+ urlPlaceholder: "https://example.com/mcp",
191
+ commandFieldLabel: "Befehl",
192
+ argsLabel: "Argumente (eins pro Zeile)",
193
+ // Message-Function-Form — umgeht den Message-Compiler von vue-i18n,
194
+ // damit das literale `@` nicht als Linked-Message-Referenz
195
+ // interpretiert wird.
196
+ argsPlaceholder: () => "-y\n@modelcontextprotocol/server-filesystem\n/workspace/path",
197
+ errNoName: "Bitte einen Namen angeben oder eine URL / Argumente eingeben, aus denen sich einer ableiten lässt.",
198
+ errBadName: "Der Name muss mit einem Kleinbuchstaben beginnen und darf nur [a-z0-9_-] enthalten.",
199
+ errIdExists: 'Die Server-ID "{id}" existiert bereits.',
200
+ errBadHttpUrl: "Die HTTP-URL muss mit http:// oder https:// beginnen",
201
+ },
202
+ pluginScheduler: {
203
+ prev: "Zurück",
204
+ today: "Heute",
205
+ goToday: "Zu Heute",
206
+ next: "Weiter",
207
+ deleteItem: "Eintrag löschen",
208
+ closeEditor: "Editor schließen",
209
+ apiError: "⚠ Scheduler-Aktualisierung fehlgeschlagen: {error}",
210
+ tabCalendar: "Kalender",
211
+ tabTasks: "Aufgaben",
212
+ heading: "Scheduler",
213
+ itemCount: "{count} Eintrag | {count} Einträge",
214
+ noScheduled: "Keine geplanten Einträge",
215
+ unscheduled: "Nicht geplant",
216
+ editItem: "Eintrag bearbeiten",
217
+ update: "Aktualisieren",
218
+ editSource: "Quelle bearbeiten",
219
+ applyChanges: "Änderungen übernehmen",
220
+ propLabel: "{key}:",
221
+ moreCount: "+{count} weitere",
222
+ previewIcon: "📅",
223
+ previewUpcoming: "{count} anstehend",
224
+ previewMore: "+ {count} weitere…",
225
+ },
226
+ pluginSchedulerTasks: {
227
+ recommendedFrequencies: "Empfohlene Häufigkeiten",
228
+ tableTaskType: "Aufgabentyp",
229
+ tableSuggestedSchedule: "Empfohlener Zeitplan",
230
+ noTasks: "Keine geplanten Aufgaben",
231
+ runNow: "Jetzt ausführen",
232
+ enable: "Aktivieren",
233
+ disable: "Deaktivieren",
234
+ delete: "Löschen",
235
+ nextRun: "Nächste: {time}",
236
+ originSystem: "System",
237
+ originUser: "Benutzer",
238
+ originSkill: "Skill",
239
+ runFailed: "Ausführung fehlgeschlagen: {error}",
240
+ toggleFailed: "Umschalten fehlgeschlagen: {error}",
241
+ deleteFailed: "Löschen fehlgeschlagen: {error}",
242
+ },
243
+ pluginCanvas: {
244
+ undo: "Rückgängig",
245
+ redo: "Wiederherstellen",
246
+ clear: "Löschen",
247
+ styleLabel: "Stil:",
248
+ },
249
+ pluginChart: {
250
+ untitled: "Diagramm",
251
+ chartCount: "{count} Diagramm | {count} Diagramme",
252
+ chartTitle: "Diagramm {num}",
253
+ png: "PNG",
254
+ },
255
+ pluginTodo: {
256
+ clearFilters: "Alle Filter zurücksetzen",
257
+ deleteItem: "Eintrag löschen",
258
+ apiError: "⚠ Aktualisieren der To-dos fehlgeschlagen: {error}",
259
+ heading: "Aufgabenliste",
260
+ completedRatio: "{done}/{total} erledigt",
261
+ filter: "Filter:",
262
+ noItems: "Noch keine To-dos",
263
+ noMatchingFilter: "Keine Einträge passen zum aktiven Filter",
264
+ update: "Aktualisieren",
265
+ clearCompleted: "Erledigte entfernen",
266
+ clearButton: "Löschen ✕",
267
+ deleteSymbol: "✕",
268
+ },
269
+ todoExplorer: {
270
+ heading: "To-do",
271
+ doneRatio: "{done}/{total} erledigt",
272
+ addButton: "+ Hinzufügen",
273
+ addColumnButton: "+ Spalte",
274
+ labels: "Labels:",
275
+ searchPlaceholder: "Suchen...",
276
+ clearButton: "Löschen ✕",
277
+ clearFiltersTitle: "Label-Filter zurücksetzen",
278
+ emptyHint: 'Noch keine To-dos. Klicken Sie auf "+ Hinzufügen", um eines zu erstellen.',
279
+ addColumn: "Spalte hinzufügen",
280
+ newColumnLabelField: "Label",
281
+ newColumnPlaceholder: "Review",
282
+ noMatchingFilter: "Keine Einträge passen zum aktuellen Filter",
283
+ },
284
+ todoPreview: {
285
+ completedRatio: "{done}/{total} erledigt",
286
+ moreItems: "+ {count} weitere…",
287
+ headerIcon: "☑",
288
+ doneIcon: "✓",
289
+ pendingIcon: "○",
290
+ moreLabels: "+{count}",
291
+ },
292
+ todoDialogs: {
293
+ addTitle: "To-do hinzufügen",
294
+ editTitle: "To-do bearbeiten",
295
+ deleteButton: "Löschen",
296
+ deleteTitle: "Diesen Eintrag löschen",
297
+ noneOption: "— Keiner —",
298
+ fieldText: "Text",
299
+ fieldNote: "Notiz",
300
+ fieldStatus: "Status",
301
+ fieldPriority: "Priorität",
302
+ fieldDueDate: "Fälligkeitsdatum",
303
+ fieldLabels: "Labels",
304
+ fieldLabelsCommaSeparated: "Labels (durch Komma getrennt)",
305
+ textPlaceholder: "Was muss erledigt werden?",
306
+ labelsPlaceholder: "arbeit, dringend",
307
+ },
308
+ todoKanban: {
309
+ rename: "Umbenennen",
310
+ alreadyDoneColumn: 'Bereits Spalte „Erledigt"',
311
+ markAsDoneColumn: 'Als Spalte „Erledigt" markieren',
312
+ deleteColumn: "Spalte löschen",
313
+ columnActions: "Spaltenaktionen",
314
+ addCard: "+ Karte hinzufügen",
315
+ },
316
+ todoTableList: {
317
+ noMatchingFilter: "Keine Einträge passen zum aktuellen Filter",
318
+ },
319
+ pluginWiki: {
320
+ backToIndex: "Zurück zum Index",
321
+ pdf: "PDF",
322
+ pdfFailed: "⚠ PDF fehlgeschlagen",
323
+ tabIndex: "Index",
324
+ tabLog: "Protokoll",
325
+ tabLint: "Lint",
326
+ empty: "Das Wiki ist leer. Bitten Sie den Wiki Manager, eine Quelle einzulesen.",
327
+ previewMore: "+ {count} weitere…",
328
+ chatPlaceholder: "Fragen Sie zu dieser Seite…",
329
+ chatSend: "Neuen Chat zu dieser Seite starten",
330
+ },
331
+ pluginPresentHtml: {
332
+ saveAsPdf: "Als PDF speichern (öffnet Druckdialog)",
333
+ pdf: "PDF",
334
+ untitled: "HTML-Seite",
335
+ hideSource: "Quelltext ausblenden <>",
336
+ showSource: "Quelltext anzeigen <>",
337
+ },
338
+ pluginManageSource: {
339
+ titlePlaceholder: "Titel (optional)",
340
+ heading: "Informationsquellen",
341
+ sourceCount: "{count} Quelle | {count} Quellen",
342
+ addButton: "Hinzufügen",
343
+ rebuildNow: "Jetzt neu aufbauen",
344
+ rebuilding: "Wird neu aufgebaut…",
345
+ typeField: "Typ",
346
+ addingLabel: "Wird hinzugefügt…",
347
+ addAndRebuild: "Hinzufügen + Neu aufbauen",
348
+ emptyPickPack:
349
+ "Noch keine Quellen registriert. Wählen Sie unten ein Starter-Paket, klicken Sie oben auf {addBold} oder bitten Sie Claude, eine zu registrieren.",
350
+ emptyAddStrong: "+ Hinzufügen",
351
+ registering: "Wird registriert und abgerufen…",
352
+ removeLabel: "Entfernen",
353
+ removingLabel: "Wird entfernt…",
354
+ todaysBrief: "Heutiges Briefing",
355
+ todaysBriefLoading: "Heutiges Briefing wird geladen…",
356
+ briefNone: "Für dieses Datum wurde noch kein Briefing erstellt. Klicken Sie auf Jetzt neu aufbauen.",
357
+ briefEmpty: "Das heutige Briefing ist leer.",
358
+ briefLoadFailed: "Briefing konnte nicht geladen werden",
359
+ lastRebuildSummary: "Letzter Neuaufbau ({date}): {itemCount} Einträge aus {planned} Quellen, {duplicates} Duplikate verworfen.",
360
+ archiveErrorsSuffix: "({count} Archivfehler)",
361
+ kindRss: "RSS",
362
+ kindGithubRel: "GitHub-Releases",
363
+ kindGithubIss: "GitHub-Issues",
364
+ kindArxiv: "arXiv",
365
+ kindGithubReleases: "GitHub-Releases",
366
+ kindGithubIssues: "GitHub-Issues",
367
+ briefDateLabel: "({date})",
368
+ primaryRssPlaceholder: "https://news.ycombinator.com/rss",
369
+ primaryGithubPlaceholder: "https://github.com/owner/repo (oder owner/repo)",
370
+ primaryArxivPlaceholder: "cat:cs.CL",
371
+ primaryRssHint: "Feed-URL (RSS 2.0 / Atom / RDF)",
372
+ primaryGithubRelHint: "GitHub-Repo-URL oder owner/repo — ruft Releases ab",
373
+ primaryGithubIssHint: "GitHub-Repo-URL oder owner/repo — ruft Issues ab",
374
+ primaryArxivHint: "arXiv-Suchabfrage (z. B. cat:cs.CL oder au:hinton)",
375
+ confirmRemove: 'Quelle "{slug}" entfernen?',
376
+ flashRegistered: "Registriert. Neue Einträge werden abgerufen…",
377
+ flashRebuildReady: "Bereit: {itemCount} Einträge aus {planned} Quelle.|Bereit: {itemCount} Einträge aus {planned} Quellen.",
378
+ flashRebuildComplete: "Neuaufbau abgeschlossen: {itemCount} Einträge aus {planned} Quellen.",
379
+ flashRebuildFailed: "Neuaufbau fehlgeschlagen: {error}",
380
+ flashRegisterFailed: "Registrierung der Quelle fehlgeschlagen",
381
+ flashRegisterSucceededRebuildFailed: "Registrierung erfolgreich, aber Neuaufbau fehlgeschlagen: {error}",
382
+ flashRemoved: '"{slug}" entfernt.',
383
+ flashRemoveFailed: "Entfernen fehlgeschlagen: {error}",
384
+ flashRefreshListFailed: "Aktualisieren der Quellen fehlgeschlagen: {error}",
385
+ flashPresetAlreadyRegistered: 'Alle Quellen in "{label}" sind bereits registriert.',
386
+ flashPresetRegistered: '{count} Quelle aus "{label}" registriert. Wird abgerufen…|{count} Quellen aus "{label}" registriert. Wird abgerufen…',
387
+ flashPresetPartial: "{ok}/{total} registriert. Fehler: {errors}",
388
+ },
389
+ pluginManageSkills: {
390
+ deleteProjectSkill: "Diese Projekt-Skill löschen",
391
+ heading: "Skills",
392
+ previewCount: "{count} Skill | {count} Skills",
393
+ previewMore: "+{count} weitere",
394
+ subheading: ({ named }: { named: (key: string) => unknown }) => `${named("count")} verfügbar · zum Anzeigen klicken · "Run" ruft sie als /<name> auf`,
395
+ emptyWithPath: "Keine Skills gefunden. Fügen Sie Skill-Ordner unter {path} hinzu.",
396
+ emptySkillPath: "~/.claude/skills/",
397
+ selectHint: "Wählen Sie links eine Skill aus, um ihre SKILL.md anzuzeigen.",
398
+ loading: "Wird geladen…",
399
+ fieldDescription: "Beschreibung",
400
+ fieldBody: "Inhalt (Markdown)",
401
+ emptyBody: "(leerer Inhalt)",
402
+ btnEdit: "Bearbeiten",
403
+ btnDelete: "Löschen",
404
+ btnRun: "Ausführen",
405
+ errListFailed: "Skills konnten nicht geladen werden: {error}",
406
+ errDetailFailed: "Skill konnte nicht geladen werden: {error}",
407
+ errSaveFailed: "Speichern fehlgeschlagen: {error}",
408
+ errDeleteFailed: "Löschen fehlgeschlagen",
409
+ confirmDelete: 'Skill "{name}" löschen? Dies entfernt ~/mulmoclaude/.claude/skills/{name}/SKILL.md.',
410
+ },
411
+ pluginManageRoles: {
412
+ heading: "Benutzerdefinierte Rollen",
413
+ roleCount: "{count} Rolle | {count} Rollen",
414
+ previewCount: "{count} benutzerdefinierte Rolle | {count} benutzerdefinierte Rollen",
415
+ addButton: "+ Hinzufügen",
416
+ createPanel: "Neue Rolle erstellen",
417
+ fieldId: "ID",
418
+ fieldName: "Name",
419
+ fieldIcon: "Symbol",
420
+ fieldPrompt: "Prompt",
421
+ fieldPlugins: "Plugins",
422
+ fieldStarterQueries: "Einstiegsfragen",
423
+ onePerLine: "(eine pro Zeile)",
424
+ helpLink: "?",
425
+ idFormatted: "({id})",
426
+ missingEnv: "({env} fehlt)",
427
+ requiresEnv: "Erfordert {env} in .env",
428
+ collapse: "Einklappen",
429
+ expand: "Ausklappen",
430
+ idPlaceholder: "eindeutige-id",
431
+ creating: "Wird erstellt…",
432
+ create: "Erstellen",
433
+ updating: "Wird aktualisiert…",
434
+ update: "Aktualisieren",
435
+ cancel: "Abbrechen",
436
+ delete: "Löschen",
437
+ emptyHint: 'Noch keine benutzerdefinierten Rollen. Klicken Sie auf "+ Hinzufügen" oder bitten Sie Claude, eine zu erstellen.',
438
+ errIdRequired: "Die ID ist erforderlich.",
439
+ errIdInvalid: "Die ID darf nur Buchstaben, Zahlen, '-' und '_' enthalten.",
440
+ errNameRequired: "Der Name ist erforderlich.",
441
+ errIdDuplicate: "Eine Rolle mit der ID '{id}' existiert bereits.",
442
+ errCreateFailed: "Erstellen fehlgeschlagen",
443
+ errSaveFailed: "Speichern fehlgeschlagen",
444
+ errDeleteFailed: "Löschen fehlgeschlagen",
445
+ errNetworkError: "Netzwerkfehler",
446
+ errServerError: "Serverfehler: {status}",
447
+ },
448
+ pluginUiImage: {
449
+ promptLabel: "{label}:",
450
+ },
451
+ pluginMulmoScript: {
452
+ beatCount: "{count} Beat | {count} Beats",
453
+ movie: "Video",
454
+ generating: "Wird generiert…",
455
+ rendering: "Wird gerendert…",
456
+ saving: "Wird gespeichert…",
457
+ update: "Aktualisieren",
458
+ characters: "Charaktere",
459
+ drop: "Ablegen",
460
+ gen: "Generieren",
461
+ play: "▶ Abspielen",
462
+ stop: "■ Stoppen",
463
+ errPrefix: "⚠ Fehler",
464
+ noBeats: "Keine Beats im Skript gefunden",
465
+ editSource: "Skript-Quelle bearbeiten",
466
+ applyChanges: "Änderungen übernehmen",
467
+ generateAll: "Alle generieren",
468
+ orDropImage: "oder Bild ablegen",
469
+ generate: "Generieren",
470
+ generateAudio: "♪ Generieren",
471
+ saveErrorInvalidJson: "⚠ Ungültiges JSON: {error}",
472
+ saveErrorSaveFailed: "⚠ Speichern fehlgeschlagen: {error}",
473
+ },
474
+ pluginMarkdown: {
475
+ loading: "Dokument wird geladen...",
476
+ loadFailed: "⚠ Laden des Dokuments fehlgeschlagen: {error}",
477
+ refreshFailed: "⚠ Aktualisieren des Dokuments fehlgeschlagen: {error} — es wird der zuletzt erfolgreich geladene Inhalt angezeigt.",
478
+ noContent: "Kein Markdown-Inhalt verfügbar",
479
+ pdf: "PDF",
480
+ pdfFailedShort: "⚠ PDF fehlgeschlagen",
481
+ editSource: "Markdown-Quelle bearbeiten",
482
+ saving: "Wird gespeichert...",
483
+ applyChanges: "Änderungen übernehmen",
484
+ cancel: "Abbrechen",
485
+ saveFailed: "Speichern fehlgeschlagen: {error}",
486
+ saveError: "⚠ {error}",
487
+ copyLabel: "Kopieren",
488
+ copiedLabel: "Kopiert!",
489
+ },
490
+ pluginTextResponse: {
491
+ pdf: "PDF",
492
+ pdfFailed: "⚠ PDF fehlgeschlagen",
493
+ editContent: "Textinhalt bearbeiten",
494
+ applyChanges: "Änderungen übernehmen",
495
+ copyLabel: "Kopieren",
496
+ copiedLabel: "Kopiert!",
497
+ cancel: "Abbrechen",
498
+ },
499
+ pluginSpreadsheet: {
500
+ previewLabel: "📊 Tabelle",
501
+ previewUntitled: "Tabelle",
502
+ previewSheets: "{count} Blatt | {count} Blätter",
503
+ untitled: "Tabelle",
504
+ excel: "Excel",
505
+ valuePlaceholder: "Wert",
506
+ valueOrFormulaPlaceholder: "Wert oder Formel (z. B. 100 oder SUM(B2:B11))",
507
+ formatPlaceholder: "Format (z. B. $#,##0.00)",
508
+ loading: "Tabelle wird geladen...",
509
+ noData: "Keine Tabellendaten verfügbar",
510
+ editData: "Tabellendaten bearbeiten",
511
+ applyChanges: "Änderungen übernehmen",
512
+ update: "Aktualisieren",
513
+ stringType: "Zeichenkette",
514
+ formulaType: "Formel",
515
+ },
516
+ app: {
517
+ // `<i18n-t>`-Slots — die Namen `envKey` / `envFile` werden in App.vue
518
+ // als Inline-`<code>` gerendert, sodass die literalen Variablen- und
519
+ // Dateinamen unübersetzt bleiben.
520
+ geminiRequired: "Die Bildgenerierung erfordert {envKey}. Fügen Sie ihn zu {envFile} hinzu und starten Sie die App neu.",
521
+ startConversation: "Gespräch beginnen",
522
+ },
523
+ suggestionsPanel: {
524
+ suggestions: "Vorschläge",
525
+ sendEditHint: "klicken zum Senden · Shift+Klick zum Bearbeiten",
526
+ },
527
+ settingsToolsTab: {
528
+ // Wird über <i18n-t> mit den benannten Slots `allowedTools` und
529
+ // `claudeMcp` gerendert, damit die Inline-`<code>`-Tags ihren Stil
530
+ // behalten, während der Text übersetzbar ist.
531
+ explanation:
532
+ "Zusätzliche Tool-Namen, die Claude über {allowedTools} übergeben werden sollen. Einer pro Zeile. Nützlich für in Claude Code integrierte MCP-Server wie Gmail / Google Kalender, nachdem Sie sich über {claudeMcp} authentifiziert haben.",
533
+ },
534
+ };
535
+
536
+ export default deMessages;