mulmoclaude 0.6.2 → 0.6.4

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 (182) hide show
  1. package/README.md +26 -0
  2. package/bin/mulmoclaude.js +11 -1
  3. package/client/assets/JsonEditor-D6WBWLoa.js +10 -0
  4. package/client/assets/JsonEditor-Di5xGeZY.css +1 -0
  5. package/client/assets/_plugin-vue_export-helper-BOai-rQB.js +1 -0
  6. package/client/assets/chunk-D8eiyYIV-LcKZGJv5.js +1 -0
  7. package/client/assets/{html2canvas-CDGcmOD3-Bkf2uOth.js → html2canvas-CDGcmOD3-XVrO-eyz.js} +1 -1
  8. package/client/assets/index-CyBr8Mkr.css +2 -0
  9. package/client/assets/index-zZIqEbNX.js +5106 -0
  10. package/client/assets/{index.es-DqtpmBm8-D9mAh_KQ.js → index.es-DqtpmBm8-DHT6q10o.js} +1 -1
  11. package/client/assets/material-symbols-outlined-DtIK7AQn.woff2 +0 -0
  12. package/client/assets/runtime-protocol-vue-D6kcV0wa.js +1 -0
  13. package/client/assets/{runtime-vue-BVUzgYGA.js → runtime-vue-fFYhnNg3.js} +1 -1
  14. package/client/assets/{vue-C8UuIO9J.js → vue-D4w8THF_.js} +1 -1
  15. package/client/assets/vue-i18n-CQbxVmNs.js +3 -0
  16. package/client/assets/vue.runtime.esm-bundler-BTyIdNAI.js +4 -0
  17. package/client/index.html +10 -10
  18. package/package.json +9 -8
  19. package/server/agent/backend/claude-code.ts +34 -0
  20. package/server/agent/backend/fake-echo.ts +370 -0
  21. package/server/agent/backend/index.ts +16 -1
  22. package/server/agent/config.ts +74 -24
  23. package/server/agent/index.ts +104 -80
  24. package/server/agent/mcpFailureMonitor.ts +167 -0
  25. package/server/agent/mcpPreflight.ts +185 -0
  26. package/server/agent/prompt.ts +50 -359
  27. package/server/agent/stdioHttpShim.ts +171 -0
  28. package/server/agent/stream.ts +12 -1
  29. package/server/api/routes/encore.ts +55 -0
  30. package/server/api/routes/files.ts +22 -0
  31. package/server/api/routes/mulmo-script.ts +19 -1
  32. package/server/api/routes/schedulerHandlers.ts +52 -4
  33. package/server/api/routes/sessions.ts +15 -0
  34. package/server/api/routes/skills.ts +263 -0
  35. package/server/build/dispatcher.mjs +299 -0
  36. package/server/encore/INVARIANTS.md +272 -0
  37. package/server/encore/boot.ts +39 -0
  38. package/server/encore/closure.ts +36 -0
  39. package/server/encore/cycle.ts +276 -0
  40. package/server/encore/dispatch.ts +103 -0
  41. package/server/encore/handlers/amend.ts +99 -0
  42. package/server/encore/handlers/appendNote.ts +74 -0
  43. package/server/encore/handlers/defineEncore.ts +42 -0
  44. package/server/encore/handlers/listTickets.ts +107 -0
  45. package/server/encore/handlers/markStepDone.ts +41 -0
  46. package/server/encore/handlers/markTargetSkipped.ts +33 -0
  47. package/server/encore/handlers/query.ts +138 -0
  48. package/server/encore/handlers/recordValues.ts +44 -0
  49. package/server/encore/handlers/resolveNotification.ts +121 -0
  50. package/server/encore/handlers/setup.ts +81 -0
  51. package/server/encore/handlers/shared.ts +137 -0
  52. package/server/encore/handlers/snooze.ts +87 -0
  53. package/server/encore/handlers/startObligationChat.ts +64 -0
  54. package/server/encore/handlers/startSetupChat.ts +50 -0
  55. package/server/encore/lock.ts +61 -0
  56. package/server/encore/notifier.ts +123 -0
  57. package/server/encore/obligation.ts +25 -0
  58. package/server/encore/paths.ts +78 -0
  59. package/server/encore/reconcile.ts +661 -0
  60. package/server/encore/tick.ts +191 -0
  61. package/server/encore/yaml-fm.ts +63 -0
  62. package/server/events/notifications.ts +19 -91
  63. package/server/index.ts +94 -9
  64. package/server/notifier/engine.ts +102 -1
  65. package/server/notifier/macosReminderAdapter.ts +30 -0
  66. package/server/notifier/runtime-api.ts +41 -1
  67. package/server/notifier/types.ts +15 -2
  68. package/server/plugins/runtime.ts +11 -2
  69. package/server/prompts/index.ts +39 -0
  70. package/server/prompts/system/journal-pointer.md +12 -0
  71. package/server/prompts/system/memory-management-atomic.md +33 -0
  72. package/server/prompts/system/memory-management-topic.md +60 -0
  73. package/server/prompts/system/news-concierge.md +24 -0
  74. package/server/prompts/system/sandbox-tools.md +10 -0
  75. package/server/prompts/system/sources-context.md +16 -0
  76. package/server/prompts/system/system.md +91 -0
  77. package/server/system/announceOptionalDeps.ts +57 -0
  78. package/server/system/appVersion.ts +34 -0
  79. package/server/system/config.ts +17 -1
  80. package/server/system/docker.ts +14 -6
  81. package/server/system/env.ts +18 -5
  82. package/server/system/optionalDeps.ts +129 -0
  83. package/server/utils/cli-flags.d.mts +14 -0
  84. package/server/utils/cli-flags.mjs +53 -0
  85. package/server/utils/files/encore-io.ts +111 -0
  86. package/server/utils/time.ts +6 -0
  87. package/server/workspace/helps/business.md +2 -2
  88. package/server/workspace/helps/encore-dsl.md +482 -0
  89. package/server/workspace/helps/index.md +15 -13
  90. package/server/workspace/helps/mulmoscript.md +3 -3
  91. package/server/workspace/helps/sandbox.md +2 -2
  92. package/server/workspace/hooks/dispatcher.ts +7 -5
  93. package/server/workspace/hooks/provision.ts +6 -3
  94. package/server/workspace/paths.ts +13 -4
  95. package/server/workspace/skills/catalog.ts +355 -0
  96. package/server/workspace/skills/external/catalog.ts +283 -0
  97. package/server/workspace/skills/external/clone.ts +129 -0
  98. package/server/workspace/skills/external/id.ts +194 -0
  99. package/server/workspace/skills/external/install.ts +417 -0
  100. package/server/workspace/skills/external/presets.ts +50 -0
  101. package/server/workspace/skills-preset.ts +29 -17
  102. package/server/workspace/workspace.ts +10 -5
  103. package/src/App.vue +37 -8
  104. package/src/components/FileContentRenderer.vue +102 -9
  105. package/src/components/JsonEditor.vue +160 -0
  106. package/src/components/NotificationBell.vue +35 -3
  107. package/src/components/PluginLauncher.vue +20 -41
  108. package/src/components/RightSidebar.vue +19 -0
  109. package/src/components/SettingsMcpTab.vue +58 -11
  110. package/src/components/SettingsModal.vue +22 -1
  111. package/src/components/StackView.vue +10 -1
  112. package/src/components/TodoExplorer.vue +16 -0
  113. package/src/components/todo/TodoKanbanView.vue +34 -6
  114. package/src/composables/useNotifications.ts +21 -1
  115. package/src/config/apiRoutes.ts +0 -6
  116. package/src/config/mcpCatalog.ts +12 -7
  117. package/src/config/mcpTypes.ts +5 -0
  118. package/src/config/roles.ts +52 -15
  119. package/src/config/systemFileDescriptors.ts +12 -0
  120. package/src/lang/de.ts +108 -12
  121. package/src/lang/en.ts +105 -11
  122. package/src/lang/es.ts +106 -11
  123. package/src/lang/fr.ts +106 -11
  124. package/src/lang/ja.ts +104 -11
  125. package/src/lang/ko.ts +105 -11
  126. package/src/lang/pt-BR.ts +106 -11
  127. package/src/lang/zh.ts +103 -11
  128. package/src/main.ts +1 -0
  129. package/src/plugins/_generated/metas.ts +4 -0
  130. package/src/plugins/_generated/registrations.ts +2 -0
  131. package/src/plugins/_generated/server-bindings.ts +5 -0
  132. package/src/plugins/encore/EncoreDashboard.vue +504 -0
  133. package/src/plugins/encore/EncoreRedirect.vue +116 -0
  134. package/src/plugins/encore/View.vue +36 -0
  135. package/src/plugins/encore/defineEncoreDefinition.ts +74 -0
  136. package/src/plugins/encore/defineEncoreMeta.ts +13 -0
  137. package/src/plugins/encore/index.ts +93 -0
  138. package/src/plugins/encore/manageEncoreDefinition.ts +100 -0
  139. package/src/plugins/encore/manageEncoreMeta.ts +36 -0
  140. package/src/plugins/manageSkills/View.vue +832 -30
  141. package/src/plugins/manageSkills/categories.ts +125 -0
  142. package/src/plugins/manageSkills/meta.ts +30 -0
  143. package/src/plugins/markdown/definition.ts +3 -3
  144. package/src/plugins/meta-types.ts +5 -0
  145. package/src/plugins/presentMulmoScript/Preview.vue +3 -3
  146. package/src/plugins/presentMulmoScript/View.vue +157 -33
  147. package/src/plugins/presentMulmoScript/meta.ts +4 -0
  148. package/src/plugins/scheduler/View.vue +45 -9
  149. package/src/plugins/scheduler/calendarDefinition.ts +6 -2
  150. package/src/plugins/scheduler/multiDayHelpers.ts +95 -0
  151. package/src/plugins/skill/View.vue +1 -5
  152. package/src/plugins/spreadsheet/View.vue +3 -3
  153. package/src/plugins/spreadsheet/definition.ts +1 -1
  154. package/src/plugins/textResponse/Preview.vue +14 -1
  155. package/src/plugins/textResponse/View.vue +39 -24
  156. package/src/plugins/wiki/components/WikiPageBody.vue +4 -0
  157. package/src/router/index.ts +11 -0
  158. package/src/router/pageRoutes.ts +1 -0
  159. package/src/types/encore-dsl/at-expression.ts +120 -0
  160. package/src/types/encore-dsl/at-resolver.ts +32 -0
  161. package/src/types/encore-dsl/cadence.ts +289 -0
  162. package/src/types/encore-dsl/schema.ts +288 -0
  163. package/src/types/notification.ts +2 -1
  164. package/src/types/session.ts +6 -0
  165. package/src/types/sse.ts +5 -0
  166. package/src/types/toolCallHistory.ts +7 -0
  167. package/src/utils/agent/eventDispatch.ts +26 -5
  168. package/src/utils/agent/mcpHint.ts +50 -0
  169. package/src/utils/image/htmlSrcAttrs.ts +117 -13
  170. package/src/utils/session/sessionEntries.ts +8 -32
  171. package/client/assets/PluginScopedRoot-YjvQq0Nn.js +0 -3
  172. package/client/assets/chunk-CernVdwh.js +0 -1
  173. package/client/assets/chunk-D8eiyYIV-CAXpUwLd.js +0 -1
  174. package/client/assets/index-BwrlMMHr.js +0 -5005
  175. package/client/assets/index-CvvNuegU.css +0 -2
  176. package/client/assets/material-symbols-outlined-BOZVWuR3.woff2 +0 -0
  177. package/client/assets/runtime-protocol-vue-C1To4M3t.js +0 -1
  178. package/client/assets/vue.runtime.esm-bundler-DQ8Kjjui.js +0 -4
  179. package/server/api/routes/notifications.ts +0 -195
  180. package/server/notifier/legacy-adapters.ts +0 -76
  181. package/server/workspace/hooks/dispatcher.mjs +0 -300
  182. package/src/composables/useSelectedResult.ts +0 -49
package/src/lang/en.ts CHANGED
@@ -50,7 +50,7 @@ const enMessages = {
50
50
  },
51
51
  },
52
52
  chatInput: {
53
- placeholder: "Type a task, or drop / paste / attach a file…",
53
+ placeholder: "Message Claude…",
54
54
  send: "Send",
55
55
  attachFile: "Attach file",
56
56
  fileTooLarge: "File too large ({sizeMB} MB). Maximum is 30 MB.",
@@ -90,12 +90,24 @@ const enMessages = {
90
90
  clearAll: "Clear",
91
91
  dismiss: "Dismiss",
92
92
  cancel: "Cancel",
93
+ showMore: "Show more ({count})",
94
+ showLess: "Show less",
93
95
  },
94
96
  pluginDiagnostics: {
95
97
  title: "Plugin configuration issue",
96
98
  hostBody: 'Plugin "{plugin}" tried to register the {label} key "{key}" but it is reserved by the host. The plugin\'s entry has been dropped.',
97
99
  intraBody: 'Plugins "{first}" and "{second}" both register {dimension} "{key}". "{first}" claimed it first, so "{second}"\'s registration is ignored.',
98
100
  },
101
+ optionalDeps: {
102
+ // Generic `title` kept for backward compatibility with persisted
103
+ // history entries published before the reason-aware split below;
104
+ // new code paths use `titleNotFound` / `titleNotResponding`.
105
+ title: "Optional dependency unavailable",
106
+ titleNotFound: "{command} not installed",
107
+ titleNotResponding: "{command} not running",
108
+ notFound: "{command} not found — related features are disabled. Install {command} and restart MulmoClaude to enable them.",
109
+ notResponding: "{command} is installed but not running — related features are disabled. Start {command} and restart MulmoClaude to enable them.",
110
+ },
99
111
  pluginErrorBoundary: {
100
112
  title: "Plugin {pkg} crashed",
101
113
  subtitle: "The plugin failed to render. The error has been logged to the console.",
@@ -125,6 +137,11 @@ const enMessages = {
125
137
  error: "Error",
126
138
  result: "Result",
127
139
  running: "Running...",
140
+ mcpHint: {
141
+ title: (ctx: { named: (key: "server") => string }) => `${ctx.named("server")} setup hint`,
142
+ requiredKeys: "Required keys",
143
+ setupGuide: "Open setup guide",
144
+ },
128
145
  },
129
146
  fileTreePane: {
130
147
  sort: "Sort:",
@@ -161,6 +178,7 @@ const enMessages = {
161
178
  },
162
179
  settingsModal: {
163
180
  title: "Settings",
181
+ version: "MulmoClaude v{version}",
164
182
  tabs: {
165
183
  gemini: "Gemini API Key",
166
184
  tools: "Allowed Tools",
@@ -272,15 +290,43 @@ const enMessages = {
272
290
  errLabelConflict: 'Label "{label}" already exists',
273
291
  },
274
292
  pluginLauncher: {
275
- todos: { label: "Todos", title: "Open todos" },
276
- calendar: { label: "Calendar", title: "Open calendar" },
277
- automations: { label: "Actions", title: "Open actions" },
278
- wiki: { label: "Wiki", title: "Open wiki" },
279
- sources: { label: "Sources", title: "Open information sources" },
280
- news: { label: "News", title: "Open news viewer" },
281
- skills: { label: "Skills", title: "Open skills" },
282
- roles: { label: "Roles", title: "Open roles" },
283
- files: { label: "Files", title: "Open workspace files" },
293
+ todos: { label: "Todos" },
294
+ calendar: { label: "Calendar" },
295
+ automations: { label: "Actions" },
296
+ encore: { label: "Encore" },
297
+ wiki: { label: "Wiki" },
298
+ sources: { label: "Sources" },
299
+ news: { label: "News" },
300
+ skills: { label: "Skills" },
301
+ roles: { label: "Roles" },
302
+ files: { label: "Files" },
303
+ },
304
+ encoreDashboard: {
305
+ title: "Encore",
306
+ subtitle: "Recurring obligations Encore is tracking.",
307
+ loading: "Loading obligations…",
308
+ errorPrefix: "Couldn't load obligations: ",
309
+ empty: "No obligations yet. Ask in chat to set one up.",
310
+ noCycles: "No cycles recorded yet.",
311
+ cyclesSuffix: "cycles",
312
+ targetCount: "{count} target | {count} targets",
313
+ cycleClosed: "Closed",
314
+ chatButtonTitle: "Discuss this obligation in a new chat",
315
+ bellButtonTitle: "Discuss this cycle",
316
+ addButtonLabel: "Add",
317
+ unexpectedResponse: "Encore returned an unexpected response.",
318
+ status: {
319
+ active: "Active",
320
+ paused: "Paused",
321
+ retired: "Retired",
322
+ },
323
+ cadence: {
324
+ daily: "Daily",
325
+ weekly: "Weekly",
326
+ monthly: "Monthly",
327
+ biannual: "Biannual",
328
+ annual: "Annual",
329
+ },
284
330
  },
285
331
  fileContentHeader: {
286
332
  showRendered: "Show rendered Markdown",
@@ -294,6 +340,11 @@ const enMessages = {
294
340
  htmlPreview: "HTML preview",
295
341
  pdfPreview: "PDF preview",
296
342
  parseError: "parse error",
343
+ editJson: "Edit JSON",
344
+ jsonEditorLabel: "JSON editor",
345
+ invalidJson: "Invalid JSON",
346
+ undo: "Undo",
347
+ redo: "Redo",
297
348
  },
298
349
  filesView: {
299
350
  chatPlaceholder: "Ask about this file…",
@@ -412,6 +463,9 @@ const enMessages = {
412
463
  urlLabel: "URL:",
413
464
  commandLabel: "Command:",
414
465
  dockerStdioUnsupported: "⚠ Won't run while the Docker sandbox is enabled.",
466
+ dockerStdioHostExecActive: "⚠ Runs on the host — this server escapes the Docker sandbox.",
467
+ dockerStdioHostExecOptIn:
468
+ "Run on the host anyway (advanced). This server runs outside the Docker sandbox via a local HTTP gateway and can access your machine.",
415
469
  learnMore: "Learn more",
416
470
  addServerButton: "+ Add MCP Server",
417
471
  nameLabel: "Name",
@@ -592,6 +646,7 @@ const enMessages = {
592
646
  yamlParseError: "Could not parse YAML — ensure 'title' is present",
593
647
  propLabel: "{key}:",
594
648
  moreCount: "+{count} more",
649
+ invalidRange: "Invalid date range (endDate: {endDate})",
595
650
  previewIcon: "📅",
596
651
  previewUpcoming: "{count} upcoming",
597
652
  previewAutomations: "{count} automation | {count} automations",
@@ -855,8 +910,9 @@ const enMessages = {
855
910
  },
856
911
  todoKanban: {
857
912
  rename: "Rename",
858
- alreadyDoneColumn: "Already done column",
859
913
  markAsDoneColumn: "Mark as done column",
914
+ removeAllItems: "Remove all items",
915
+ removeAllItemsConfirm: 'Remove all {count} item(s) in "{column}"? This cannot be undone.',
860
916
  deleteColumn: "Delete column",
861
917
  columnActions: "Column actions",
862
918
  addCard: "+ Add card",
@@ -1074,6 +1130,42 @@ const enMessages = {
1074
1130
  errSaveFailed: "Save failed: {error}",
1075
1131
  errDeleteFailed: "Failed to delete",
1076
1132
  confirmDelete: 'Delete skill "{name}"? This removes ~/mulmoclaude/.claude/skills/{name}/SKILL.md.',
1133
+ sectionActive: "Active",
1134
+ sectionCatalog: "Catalog",
1135
+ sectionLegend:
1136
+ "Active: loaded into the prompt ({system} System = mc- bundled · {project} Project = editable · {user} User = ~/.claude/skills/). Catalog: browse, ★ star or ▶ run once without bloating the prompt.",
1137
+ catalogEmpty: "No preset skills available.",
1138
+ catalogPresetHeading: "Presets",
1139
+ catalogStar: "Star",
1140
+ catalogStarred: "Starred",
1141
+ catalogRunOnce: "Run once",
1142
+ sourceUserTitle: "User skill (~/.claude/skills/, available in every workspace)",
1143
+ sourceSystemTitle: "System skill (bundled, mc- prefix — read-only, overwritten by the launcher)",
1144
+ sourceProjectTitle: "Project skill (workspace .claude/skills/, this workspace only)",
1145
+ sourcePresetTitle: "Preset catalog — click Star to activate in this workspace",
1146
+ errCatalogListFailed: "Failed to load catalog: {error}",
1147
+ errCatalogStarFailed: "Failed to star skill: {error}",
1148
+ errCatalogPreviewFailed: "Failed to load skill preview: {error}",
1149
+ errCatalogRunOnceEmpty: "This skill has no body to run.",
1150
+ catalogAddRepo: "Add skill repository",
1151
+ catalogAddRepoTitle: "Add a skill repository",
1152
+ catalogRepoUrlLabel: "GitHub URL",
1153
+ catalogRepoUrlPlaceholder: "https://github.com/owner/repo",
1154
+ catalogRepoSubpathLabel: "Subpath (optional)",
1155
+ catalogRepoSubpathPlaceholder: "skills",
1156
+ catalogAddRepoSubmit: "Install",
1157
+ catalogAddRepoSuggestions: "Suggested repositories",
1158
+ catalogUninstallRepo: "Uninstall repository",
1159
+ catalogUpdateRepo: "Update repository (re-fetch latest)",
1160
+ catalogRepoOpenLink: "Open repository on GitHub (new tab)",
1161
+ catalogUninstallConfirm: "Uninstall this repository? Skills you already starred stay in your active list.",
1162
+ catalogRepoInstalling: "Installing…",
1163
+ catalogRepoEmpty: "No skills found in this repository.",
1164
+ sourceExternalTitle: "External skill (installed from a GitHub repo — click Star to activate)",
1165
+ errCatalogRepoListFailed: "Failed to load installed repositories: {error}",
1166
+ errCatalogRepoInstallFailed: "Failed to install repository: {error}",
1167
+ errCatalogRepoUninstallFailed: "Failed to uninstall repository: {error}",
1168
+ errCatalogRepoInvalidUrl: "Enter a GitHub repository URL.",
1077
1169
  },
1078
1170
  pluginManageRoles: {
1079
1171
  heading: "Custom Roles",
@@ -1128,6 +1220,8 @@ const enMessages = {
1128
1220
  stop: "■ Stop",
1129
1221
  playPresentation: "Play presentation",
1130
1222
  regenerateMovie: "Regenerate movie",
1223
+ movieGenerationFailed: "Movie generation failed",
1224
+ retry: "Retry",
1131
1225
  errPrefix: "⚠ Error",
1132
1226
  noBeats: "No beats found in script",
1133
1227
  editSource: "Edit Script Source",
package/src/lang/es.ts CHANGED
@@ -33,7 +33,7 @@ const esMessages = {
33
33
  },
34
34
  },
35
35
  chatInput: {
36
- placeholder: "Escribe una tarea, o arrastra / pega / adjunta un archivo…",
36
+ placeholder: "Mensaje para Claude…",
37
37
  send: "Enviar",
38
38
  attachFile: "Adjuntar archivo",
39
39
  fileTooLarge: "El archivo es demasiado grande ({sizeMB} MB). El máximo es 30 MB.",
@@ -73,6 +73,8 @@ const esMessages = {
73
73
  clearAll: "Borrar",
74
74
  dismiss: "Descartar",
75
75
  cancel: "Cancelar",
76
+ showMore: "Mostrar más ({count})",
77
+ showLess: "Mostrar menos",
76
78
  },
77
79
  pluginDiagnostics: {
78
80
  title: "Problema de configuración del plugin",
@@ -80,6 +82,17 @@ const esMessages = {
80
82
  intraBody:
81
83
  'Los plugins "{first}" y "{second}" registran ambos el {dimension} "{key}". "{first}" lo reclamó primero, por lo que el registro de "{second}" se ignora.',
82
84
  },
85
+ optionalDeps: {
86
+ // `title` genérico conservado por compatibilidad con entradas de
87
+ // historial persistidas antes de la división por motivo; las
88
+ // nuevas usan `titleNotFound` / `titleNotResponding`.
89
+ title: "Dependencia opcional no disponible",
90
+ titleNotFound: "{command} no está instalado",
91
+ titleNotResponding: "{command} no está en ejecución",
92
+ notFound: "No se encontró {command} — las funciones relacionadas se han desactivado. Instala {command} y reinicia MulmoClaude para habilitarlas.",
93
+ notResponding:
94
+ "{command} está instalado pero no se está ejecutando — las funciones relacionadas se han desactivado. Inicia {command} y reinicia MulmoClaude para habilitarlas.",
95
+ },
83
96
  pluginErrorBoundary: {
84
97
  title: "El plugin {pkg} se ha bloqueado",
85
98
  subtitle: "El plugin no se pudo renderizar. El error se ha registrado en la consola.",
@@ -109,6 +122,11 @@ const esMessages = {
109
122
  error: "Error",
110
123
  result: "Resultado",
111
124
  running: "Ejecutando...",
125
+ mcpHint: {
126
+ title: (ctx: { named: (key: "server") => string }) => `Ayuda de configuración: ${ctx.named("server")}`,
127
+ requiredKeys: "Claves requeridas",
128
+ setupGuide: "Abrir guía de configuración",
129
+ },
112
130
  },
113
131
  fileTreePane: {
114
132
  sort: "Orden:",
@@ -145,6 +163,7 @@ const esMessages = {
145
163
  },
146
164
  settingsModal: {
147
165
  title: "Ajustes",
166
+ version: "MulmoClaude v{version}",
148
167
  tabs: {
149
168
  gemini: "Clave API de Gemini",
150
169
  tools: "Herramientas permitidas",
@@ -258,15 +277,43 @@ const esMessages = {
258
277
  errLabelConflict: 'La etiqueta "{label}" ya existe',
259
278
  },
260
279
  pluginLauncher: {
261
- todos: { label: "Tareas", title: "Abrir tareas" },
262
- calendar: { label: "Calendario", title: "Abrir calendario" },
263
- automations: { label: "Acciones", title: "Abrir acciones" },
264
- wiki: { label: "Wiki", title: "Abrir wiki" },
265
- sources: { label: "Fuentes", title: "Abrir fuentes de información" },
266
- news: { label: "Noticias", title: "Abrir el lector de noticias" },
267
- skills: { label: "Skills", title: "Abrir skills" },
268
- roles: { label: "Roles", title: "Abrir roles" },
269
- files: { label: "Archivos", title: "Abrir archivos del área de trabajo" },
280
+ todos: { label: "Tareas" },
281
+ calendar: { label: "Calendario" },
282
+ automations: { label: "Acciones" },
283
+ encore: { label: "Encore" },
284
+ wiki: { label: "Wiki" },
285
+ sources: { label: "Fuentes" },
286
+ news: { label: "Noticias" },
287
+ skills: { label: "Skills" },
288
+ roles: { label: "Roles" },
289
+ files: { label: "Archivos" },
290
+ },
291
+ encoreDashboard: {
292
+ title: "Encore",
293
+ subtitle: "Obligaciones recurrentes que Encore está siguiendo.",
294
+ loading: "Cargando obligaciones…",
295
+ errorPrefix: "No se pudieron cargar las obligaciones: ",
296
+ empty: "Aún no hay obligaciones. Pide en el chat para configurar una.",
297
+ noCycles: "Aún no se han registrado ciclos.",
298
+ cyclesSuffix: "ciclos",
299
+ targetCount: "{count} objetivo | {count} objetivos",
300
+ cycleClosed: "Cerrado",
301
+ chatButtonTitle: "Hablar sobre esta obligación en un chat nuevo",
302
+ bellButtonTitle: "Hablar sobre este ciclo",
303
+ addButtonLabel: "Añadir",
304
+ unexpectedResponse: "Encore devolvió una respuesta inesperada.",
305
+ status: {
306
+ active: "Activa",
307
+ paused: "Pausada",
308
+ retired: "Retirada",
309
+ },
310
+ cadence: {
311
+ daily: "Diaria",
312
+ weekly: "Semanal",
313
+ monthly: "Mensual",
314
+ biannual: "Semestral",
315
+ annual: "Anual",
316
+ },
270
317
  },
271
318
  fileContentHeader: {
272
319
  showRendered: "Mostrar Markdown renderizado",
@@ -280,6 +327,11 @@ const esMessages = {
280
327
  htmlPreview: "Vista previa HTML",
281
328
  pdfPreview: "Vista previa PDF",
282
329
  parseError: "error al analizar",
330
+ editJson: "Editar JSON",
331
+ jsonEditorLabel: "Editor JSON",
332
+ invalidJson: "JSON no válido",
333
+ undo: "Deshacer",
334
+ redo: "Rehacer",
283
335
  },
284
336
  filesView: {
285
337
  chatPlaceholder: "Pregunta sobre este archivo…",
@@ -394,6 +446,9 @@ const esMessages = {
394
446
  urlLabel: "URL:",
395
447
  commandLabel: "Comando:",
396
448
  dockerStdioUnsupported: "⚠ No se ejecutará mientras el sandbox de Docker esté activado.",
449
+ dockerStdioHostExecActive: "⚠ Se ejecuta en el host: este servidor sale del sandbox de Docker.",
450
+ dockerStdioHostExecOptIn:
451
+ "Ejecutar en el host de todos modos (avanzado). Este servidor se ejecuta fuera del sandbox de Docker mediante una pasarela HTTP local y puede acceder a tu equipo.",
397
452
  learnMore: "Más información",
398
453
  addServerButton: "+ Añadir servidor MCP",
399
454
  nameLabel: "Nombre",
@@ -577,6 +632,7 @@ const esMessages = {
577
632
  yamlParseError: "No se pudo analizar el YAML — asegúrate de que 'title' esté presente",
578
633
  propLabel: "{key}:",
579
634
  moreCount: "+{count} más",
635
+ invalidRange: "Rango de fechas no válido (endDate: {endDate})",
580
636
  previewIcon: "📅",
581
637
  previewUpcoming: "{count} próximos",
582
638
  previewAutomations: "{count} automatización | {count} automatizaciones",
@@ -867,8 +923,9 @@ const esMessages = {
867
923
  },
868
924
  todoKanban: {
869
925
  rename: "Cambiar nombre",
870
- alreadyDoneColumn: "Columna ya marcada como hecha",
871
926
  markAsDoneColumn: "Marcar como columna de hechas",
927
+ removeAllItems: "Eliminar todos los elementos",
928
+ removeAllItemsConfirm: '¿Eliminar los {count} elementos de "{column}"? Esta acción no se puede deshacer.',
872
929
  deleteColumn: "Eliminar columna",
873
930
  columnActions: "Acciones de columna",
874
931
  addCard: "+ Añadir tarjeta",
@@ -1086,6 +1143,42 @@ const esMessages = {
1086
1143
  errSaveFailed: "Error al guardar: {error}",
1087
1144
  errDeleteFailed: "Error al eliminar",
1088
1145
  confirmDelete: '¿Eliminar la skill "{name}"? Esto borrará ~/mulmoclaude/.claude/skills/{name}/SKILL.md.',
1146
+ sectionActive: "Activas",
1147
+ sectionCatalog: "Catálogo",
1148
+ sectionLegend:
1149
+ "Activas: cargadas en el prompt ({system} Sistema = incluidas mc- · {project} Proyecto = editables · {user} Usuario = ~/.claude/skills/). Catálogo: explora, ★destaca o ▶ejecuta una vez sin inflar el prompt.",
1150
+ catalogEmpty: "No hay skills de preajuste disponibles.",
1151
+ catalogPresetHeading: "Preajustes",
1152
+ catalogStar: "Destacar",
1153
+ catalogStarred: "Destacada",
1154
+ catalogRunOnce: "Ejecutar una vez",
1155
+ sourceUserTitle: "Skill de usuario (~/.claude/skills/, disponible en todos los espacios)",
1156
+ sourceSystemTitle: "Skill de sistema (incluida, prefijo mc- — solo lectura, sobrescrita por el launcher)",
1157
+ sourceProjectTitle: "Skill del proyecto (.claude/skills/ del workspace, solo este espacio)",
1158
+ sourcePresetTitle: "Catálogo de preajustes — pulsa Destacar para activarla en este espacio",
1159
+ errCatalogListFailed: "Error al cargar el catálogo: {error}",
1160
+ errCatalogStarFailed: "Error al destacar la skill: {error}",
1161
+ errCatalogPreviewFailed: "Error al cargar la vista previa de la skill: {error}",
1162
+ errCatalogRunOnceEmpty: "Esta skill no tiene cuerpo para ejecutar.",
1163
+ catalogAddRepo: "Añadir repositorio de skills",
1164
+ catalogAddRepoTitle: "Añadir un repositorio de skills",
1165
+ catalogRepoUrlLabel: "URL de GitHub",
1166
+ catalogRepoUrlPlaceholder: "https://github.com/owner/repo",
1167
+ catalogRepoSubpathLabel: "Subruta (opcional)",
1168
+ catalogRepoSubpathPlaceholder: "skills",
1169
+ catalogAddRepoSubmit: "Instalar",
1170
+ catalogAddRepoSuggestions: "Repositorios sugeridos",
1171
+ catalogUninstallRepo: "Desinstalar repositorio",
1172
+ catalogUpdateRepo: "Actualizar repositorio (volver a obtener lo último)",
1173
+ catalogRepoOpenLink: "Abrir el repositorio en GitHub (nueva pestaña)",
1174
+ catalogUninstallConfirm: "¿Desinstalar este repositorio? Las skills que ya marcaste con estrella permanecen en tu lista activa.",
1175
+ catalogRepoInstalling: "Instalando…",
1176
+ catalogRepoEmpty: "No se encontraron skills en este repositorio.",
1177
+ sourceExternalTitle: "Skill externa (instalada desde un repositorio de GitHub — pulsa la estrella para activar)",
1178
+ errCatalogRepoListFailed: "No se pudieron cargar los repositorios instalados: {error}",
1179
+ errCatalogRepoInstallFailed: "No se pudo instalar el repositorio: {error}",
1180
+ errCatalogRepoUninstallFailed: "No se pudo desinstalar el repositorio: {error}",
1181
+ errCatalogRepoInvalidUrl: "Introduce una URL de repositorio de GitHub.",
1089
1182
  },
1090
1183
  pluginManageRoles: {
1091
1184
  heading: "Roles personalizados",
@@ -1140,6 +1233,8 @@ const esMessages = {
1140
1233
  stop: "■ Detener",
1141
1234
  playPresentation: "Reproducir presentación",
1142
1235
  regenerateMovie: "Regenerar vídeo",
1236
+ movieGenerationFailed: "Error al generar el vídeo",
1237
+ retry: "Reintentar",
1143
1238
  errPrefix: "⚠ Error",
1144
1239
  noBeats: "No se encontraron beats en el script",
1145
1240
  editSource: "Editar fuente del script",
package/src/lang/fr.ts CHANGED
@@ -28,7 +28,7 @@ const frMessages = {
28
28
  },
29
29
  },
30
30
  chatInput: {
31
- placeholder: "Saisissez une tâche, ou glissez / collez / joignez un fichier…",
31
+ placeholder: "Message à Claude…",
32
32
  send: "Envoyer",
33
33
  attachFile: "Joindre un fichier",
34
34
  fileTooLarge: "Fichier trop volumineux ({sizeMB} Mo). La limite est de 30 Mo.",
@@ -68,6 +68,8 @@ const frMessages = {
68
68
  clearAll: "Tout effacer",
69
69
  dismiss: "Ignorer",
70
70
  cancel: "Annuler",
71
+ showMore: "Voir plus ({count})",
72
+ showLess: "Réduire",
71
73
  },
72
74
  pluginDiagnostics: {
73
75
  title: "Problème de configuration du plugin",
@@ -75,6 +77,17 @@ const frMessages = {
75
77
  intraBody:
76
78
  "Les plugins « {first} » et « {second} » enregistrent tous deux le {dimension} « {key} ». « {first} » l'a réclamé en premier, donc l'enregistrement de « {second} » est ignoré.",
77
79
  },
80
+ optionalDeps: {
81
+ // `title` générique conservé pour la compatibilité avec les
82
+ // entrées d'historique persistées avant la séparation par motif ;
83
+ // les nouvelles utilisent `titleNotFound` / `titleNotResponding`.
84
+ title: "Dépendance optionnelle indisponible",
85
+ titleNotFound: "{command} n'est pas installé",
86
+ titleNotResponding: "{command} n'est pas en cours d'exécution",
87
+ notFound: "{command} introuvable — les fonctionnalités associées ont été désactivées. Installez {command} et redémarrez MulmoClaude pour les activer.",
88
+ notResponding:
89
+ "{command} est installé mais n'est pas en cours d'exécution — les fonctionnalités associées ont été désactivées. Démarrez {command} et redémarrez MulmoClaude pour les activer.",
90
+ },
78
91
  pluginErrorBoundary: {
79
92
  title: "Le plugin {pkg} a planté",
80
93
  subtitle: "Le plugin n'a pas pu être affiché. L'erreur a été consignée dans la console.",
@@ -104,6 +117,11 @@ const frMessages = {
104
117
  error: "Erreur",
105
118
  result: "Résultat",
106
119
  running: "En cours...",
120
+ mcpHint: {
121
+ title: (ctx: { named: (key: "server") => string }) => `Aide à la configuration : ${ctx.named("server")}`,
122
+ requiredKeys: "Clés requises",
123
+ setupGuide: "Ouvrir le guide de configuration",
124
+ },
107
125
  },
108
126
  fileTreePane: {
109
127
  sort: "Tri :",
@@ -140,6 +158,7 @@ const frMessages = {
140
158
  },
141
159
  settingsModal: {
142
160
  title: "Paramètres",
161
+ version: "MulmoClaude v{version}",
143
162
  tabs: {
144
163
  gemini: "Clé API Gemini",
145
164
  tools: "Outils autorisés",
@@ -252,15 +271,43 @@ const frMessages = {
252
271
  errLabelConflict: 'L\'étiquette "{label}" existe déjà',
253
272
  },
254
273
  pluginLauncher: {
255
- todos: { label: "Tâches", title: "Ouvrir les tâches" },
256
- calendar: { label: "Calendrier", title: "Ouvrir le calendrier" },
257
- automations: { label: "Actions", title: "Ouvrir les actions" },
258
- wiki: { label: "Wiki", title: "Ouvrir le wiki" },
259
- sources: { label: "Sources", title: "Ouvrir les sources d'information" },
260
- news: { label: "Actualités", title: "Ouvrir le lecteur d'actualités" },
261
- skills: { label: "Skills", title: "Ouvrir les skills" },
262
- roles: { label: "Rôles", title: "Ouvrir les rôles" },
263
- files: { label: "Fichiers", title: "Ouvrir les fichiers du workspace" },
274
+ todos: { label: "Tâches" },
275
+ calendar: { label: "Calendrier" },
276
+ automations: { label: "Actions" },
277
+ encore: { label: "Encore" },
278
+ wiki: { label: "Wiki" },
279
+ sources: { label: "Sources" },
280
+ news: { label: "Actualités" },
281
+ skills: { label: "Skills" },
282
+ roles: { label: "Rôles" },
283
+ files: { label: "Fichiers" },
284
+ },
285
+ encoreDashboard: {
286
+ title: "Encore",
287
+ subtitle: "Obligations récurrentes suivies par Encore.",
288
+ loading: "Chargement des obligations…",
289
+ errorPrefix: "Impossible de charger les obligations : ",
290
+ empty: "Aucune obligation pour le moment. Demandez dans le chat pour en configurer une.",
291
+ noCycles: "Aucun cycle enregistré pour le moment.",
292
+ cyclesSuffix: "cycles",
293
+ targetCount: "{count} cible | {count} cibles",
294
+ cycleClosed: "Clos",
295
+ chatButtonTitle: "Discuter de cette obligation dans un nouveau chat",
296
+ bellButtonTitle: "Discuter de ce cycle",
297
+ addButtonLabel: "Ajouter",
298
+ unexpectedResponse: "Encore a renvoyé une réponse inattendue.",
299
+ status: {
300
+ active: "Active",
301
+ paused: "En pause",
302
+ retired: "Retirée",
303
+ },
304
+ cadence: {
305
+ daily: "Quotidienne",
306
+ weekly: "Hebdomadaire",
307
+ monthly: "Mensuelle",
308
+ biannual: "Semestrielle",
309
+ annual: "Annuelle",
310
+ },
264
311
  },
265
312
  fileContentHeader: {
266
313
  showRendered: "Afficher le Markdown rendu",
@@ -274,6 +321,11 @@ const frMessages = {
274
321
  htmlPreview: "Aperçu HTML",
275
322
  pdfPreview: "Aperçu PDF",
276
323
  parseError: "erreur d'analyse",
324
+ editJson: "Modifier le JSON",
325
+ jsonEditorLabel: "Éditeur JSON",
326
+ invalidJson: "JSON invalide",
327
+ undo: "Annuler",
328
+ redo: "Rétablir",
277
329
  },
278
330
  filesView: {
279
331
  chatPlaceholder: "Posez une question sur ce fichier…",
@@ -388,6 +440,9 @@ const frMessages = {
388
440
  urlLabel: "URL :",
389
441
  commandLabel: "Commande :",
390
442
  dockerStdioUnsupported: "⚠ Ne s'exécutera pas lorsque le sandbox Docker est activé.",
443
+ dockerStdioHostExecActive: "⚠ S'exécute sur l'hôte : ce serveur sort du sandbox Docker.",
444
+ dockerStdioHostExecOptIn:
445
+ "Exécuter quand même sur l'hôte (avancé). Ce serveur s'exécute hors du sandbox Docker via une passerelle HTTP locale et peut accéder à votre machine.",
391
446
  learnMore: "En savoir plus",
392
447
  addServerButton: "+ Ajouter un serveur MCP",
393
448
  nameLabel: "Nom",
@@ -571,6 +626,7 @@ const frMessages = {
571
626
  yamlParseError: "Impossible d'analyser le YAML — vérifiez que « title » est présent",
572
627
  propLabel: "{key} :",
573
628
  moreCount: "+{count} de plus",
629
+ invalidRange: "Plage de dates invalide (endDate: {endDate})",
574
630
  previewIcon: "📅",
575
631
  previewUpcoming: "{count} à venir",
576
632
  previewAutomations: "{count} automatisation | {count} automatisations",
@@ -863,8 +919,9 @@ const frMessages = {
863
919
  },
864
920
  todoKanban: {
865
921
  rename: "Renommer",
866
- alreadyDoneColumn: "Déjà la colonne des terminées",
867
922
  markAsDoneColumn: "Définir comme colonne des terminées",
923
+ removeAllItems: "Supprimer tous les éléments",
924
+ removeAllItemsConfirm: "Supprimer les {count} éléments de « {column} » ? Cette action est irréversible.",
868
925
  deleteColumn: "Supprimer la colonne",
869
926
  columnActions: "Actions de colonne",
870
927
  addCard: "+ Ajouter une carte",
@@ -1080,6 +1137,42 @@ const frMessages = {
1080
1137
  errSaveFailed: "Échec de l'enregistrement : {error}",
1081
1138
  errDeleteFailed: "Échec de la suppression",
1082
1139
  confirmDelete: 'Supprimer la skill "{name}" ? Cela retire ~/mulmoclaude/.claude/skills/{name}/SKILL.md.',
1140
+ sectionActive: "Actives",
1141
+ sectionCatalog: "Catalogue",
1142
+ sectionLegend:
1143
+ "Actives : chargées dans le prompt ({system} Système = incluses mc- · {project} Projet = modifiables · {user} Utilisateur = ~/.claude/skills/). Catalogue : parcourez, ★ajoutez aux favoris ou ▶exécutez une fois sans alourdir le prompt.",
1144
+ catalogEmpty: "Aucune skill de préréglage disponible.",
1145
+ catalogPresetHeading: "Préréglages",
1146
+ catalogStar: "Favori",
1147
+ catalogStarred: "Favoris",
1148
+ catalogRunOnce: "Exécuter une fois",
1149
+ sourceUserTitle: "Skill utilisateur (~/.claude/skills/, disponible dans tous les espaces)",
1150
+ sourceSystemTitle: "Skill système (incluse, préfixe mc- — lecture seule, écrasée par le launcher)",
1151
+ sourceProjectTitle: "Skill de projet (.claude/skills/ de l'espace, espace courant uniquement)",
1152
+ sourcePresetTitle: "Catalogue de préréglages — cliquez sur Favori pour activer dans cet espace",
1153
+ errCatalogListFailed: "Échec du chargement du catalogue : {error}",
1154
+ errCatalogStarFailed: "Échec de l'ajout aux favoris : {error}",
1155
+ errCatalogPreviewFailed: "Échec du chargement de l'aperçu : {error}",
1156
+ errCatalogRunOnceEmpty: "Cette skill n'a pas de contenu à exécuter.",
1157
+ catalogAddRepo: "Ajouter un dépôt de skills",
1158
+ catalogAddRepoTitle: "Ajouter un dépôt de skills",
1159
+ catalogRepoUrlLabel: "URL GitHub",
1160
+ catalogRepoUrlPlaceholder: "https://github.com/owner/repo",
1161
+ catalogRepoSubpathLabel: "Sous-chemin (facultatif)",
1162
+ catalogRepoSubpathPlaceholder: "skills",
1163
+ catalogAddRepoSubmit: "Installer",
1164
+ catalogAddRepoSuggestions: "Dépôts suggérés",
1165
+ catalogUninstallRepo: "Désinstaller le dépôt",
1166
+ catalogUpdateRepo: "Mettre à jour le dépôt (récupérer la dernière version)",
1167
+ catalogRepoOpenLink: "Ouvrir le dépôt sur GitHub (nouvel onglet)",
1168
+ catalogUninstallConfirm: "Désinstaller ce dépôt ? Les skills déjà mises en favori restent dans votre liste active.",
1169
+ catalogRepoInstalling: "Installation…",
1170
+ catalogRepoEmpty: "Aucune skill trouvée dans ce dépôt.",
1171
+ sourceExternalTitle: "Skill externe (installée depuis un dépôt GitHub — cliquez sur l'étoile pour activer)",
1172
+ errCatalogRepoListFailed: "Échec du chargement des dépôts installés : {error}",
1173
+ errCatalogRepoInstallFailed: "Échec de l'installation du dépôt : {error}",
1174
+ errCatalogRepoUninstallFailed: "Échec de la désinstallation du dépôt : {error}",
1175
+ errCatalogRepoInvalidUrl: "Saisissez une URL de dépôt GitHub.",
1083
1176
  },
1084
1177
  pluginManageRoles: {
1085
1178
  heading: "Rôles personnalisés",
@@ -1134,6 +1227,8 @@ const frMessages = {
1134
1227
  stop: "■ Arrêter",
1135
1228
  playPresentation: "Lire la présentation",
1136
1229
  regenerateMovie: "Régénérer la vidéo",
1230
+ movieGenerationFailed: "Échec de la génération de la vidéo",
1231
+ retry: "Réessayer",
1137
1232
  errPrefix: "⚠ Erreur",
1138
1233
  noBeats: "Aucun beat trouvé dans le script",
1139
1234
  editSource: "Modifier la source du script",