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/ja.ts CHANGED
@@ -35,7 +35,7 @@ const jaMessages = {
35
35
  },
36
36
  },
37
37
  chatInput: {
38
- placeholder: "タスクを入力、またはファイルをドロップ・ペースト・添付…",
38
+ placeholder: "Claude にメッセージ…",
39
39
  send: "送信",
40
40
  attachFile: "ファイルを添付",
41
41
  fileTooLarge: "ファイルが大きすぎます({sizeMB} MB)。上限は 30 MB です。",
@@ -75,6 +75,8 @@ const jaMessages = {
75
75
  clearAll: "すべてクリア",
76
76
  dismiss: "閉じる",
77
77
  cancel: "キャンセル",
78
+ showMore: "もっと見る ({count})",
79
+ showLess: "閉じる",
78
80
  },
79
81
  pluginDiagnostics: {
80
82
  title: "プラグイン設定の問題",
@@ -82,6 +84,15 @@ const jaMessages = {
82
84
  intraBody:
83
85
  "プラグイン「{first}」と「{second}」が同じ {dimension}「{key}」を登録しています。「{first}」が先に確保したため、「{second}」の登録は無視されます。",
84
86
  },
87
+ optionalDeps: {
88
+ // 旧来の `title` キーは、永続化済み履歴エントリの後方互換のため残す。
89
+ // 新規発火は `titleNotFound` / `titleNotResponding` を使用。
90
+ title: "任意の依存コマンドを利用できません",
91
+ titleNotFound: "{command} がインストールされていません",
92
+ titleNotResponding: "{command} が起動していません",
93
+ notFound: "{command} がインストールされていないため、関連機能を停止しています。{command} をインストールしてから MulmoClaude を再起動してください。",
94
+ notResponding: "{command} が起動していないため、関連機能を停止しています。{command} を起動してから MulmoClaude を再起動してください。",
95
+ },
85
96
  pluginErrorBoundary: {
86
97
  title: "プラグイン {pkg} がクラッシュしました",
87
98
  subtitle: "プラグインのレンダリングに失敗しました。エラーはコンソールに記録されています。",
@@ -111,6 +122,11 @@ const jaMessages = {
111
122
  error: "エラー",
112
123
  result: "結果",
113
124
  running: "実行中...",
125
+ mcpHint: {
126
+ title: (ctx: { named: (key: "server") => string }) => `${ctx.named("server")} のセットアップヒント`,
127
+ requiredKeys: "必要なキー",
128
+ setupGuide: "セットアップガイドを開く",
129
+ },
114
130
  },
115
131
  fileTreePane: {
116
132
  sort: "並び順:",
@@ -145,6 +161,7 @@ const jaMessages = {
145
161
  },
146
162
  settingsModal: {
147
163
  title: "設定",
164
+ version: "MulmoClaude v{version}",
148
165
  tabs: {
149
166
  gemini: "Gemini API キー",
150
167
  tools: "許可ツール",
@@ -256,15 +273,43 @@ const jaMessages = {
256
273
  errLabelConflict: "ラベル「{label}」は既に使用されています",
257
274
  },
258
275
  pluginLauncher: {
259
- todos: { label: "Todo", title: "Todo を開く" },
260
- calendar: { label: "カレンダー", title: "カレンダーを開く" },
261
- automations: { label: "自動化", title: "自動化を開く" },
262
- wiki: { label: "Wiki", title: "Wiki を開く" },
263
- sources: { label: "ソース", title: "情報ソースを開く" },
264
- news: { label: "ニュース", title: "ニュースビューアを開く" },
265
- skills: { label: "スキル", title: "スキルを開く" },
266
- roles: { label: "ロール", title: "ロールを開く" },
267
- files: { label: "ファイル", title: "ワークスペースファイルを開く" },
276
+ todos: { label: "Todo" },
277
+ calendar: { label: "カレンダー" },
278
+ automations: { label: "自動化" },
279
+ encore: { label: "Encore" },
280
+ wiki: { label: "Wiki" },
281
+ sources: { label: "ソース" },
282
+ news: { label: "ニュース" },
283
+ skills: { label: "スキル" },
284
+ roles: { label: "ロール" },
285
+ files: { label: "ファイル" },
286
+ },
287
+ encoreDashboard: {
288
+ title: "Encore",
289
+ subtitle: "Encore が追跡している定期的な義務の一覧です。",
290
+ loading: "義務を読み込み中…",
291
+ errorPrefix: "義務を読み込めませんでした: ",
292
+ empty: "まだ義務がありません。チャットから設定を依頼してください。",
293
+ noCycles: "サイクルはまだ記録されていません。",
294
+ cyclesSuffix: "サイクル",
295
+ targetCount: "{count} 件の対象 | {count} 件の対象",
296
+ cycleClosed: "完了",
297
+ chatButtonTitle: "この義務について新しいチャットで相談する",
298
+ bellButtonTitle: "このサイクルについて相談する",
299
+ addButtonLabel: "追加",
300
+ unexpectedResponse: "Encore から予期しない応答が返されました。",
301
+ status: {
302
+ active: "有効",
303
+ paused: "一時停止",
304
+ retired: "終了",
305
+ },
306
+ cadence: {
307
+ daily: "毎日",
308
+ weekly: "毎週",
309
+ monthly: "毎月",
310
+ biannual: "半年ごと",
311
+ annual: "毎年",
312
+ },
268
313
  },
269
314
  fileContentHeader: {
270
315
  showRendered: "レンダリング表示",
@@ -278,6 +323,11 @@ const jaMessages = {
278
323
  htmlPreview: "HTML プレビュー",
279
324
  pdfPreview: "PDF プレビュー",
280
325
  parseError: "パースエラー",
326
+ editJson: "JSON を編集",
327
+ jsonEditorLabel: "JSON エディタ",
328
+ invalidJson: "不正な JSON",
329
+ undo: "元に戻す",
330
+ redo: "やり直し",
281
331
  },
282
332
  filesView: {
283
333
  chatPlaceholder: "このファイルについて質問…",
@@ -387,6 +437,9 @@ const jaMessages = {
387
437
  urlLabel: "URL:",
388
438
  commandLabel: "コマンド:",
389
439
  dockerStdioUnsupported: "⚠ Docker サンドボックス有効時は起動しません。",
440
+ dockerStdioHostExecActive: "⚠ ホストで実行されます — このサーバーは Docker サンドボックスの外で動作します。",
441
+ dockerStdioHostExecOptIn:
442
+ "それでもホストで実行する(上級者向け)。このサーバーはローカル HTTP ゲートウェイ経由で Docker サンドボックスの外で動作し、マシンにアクセスできます。",
390
443
  learnMore: "詳細",
391
444
  addServerButton: "+ MCP サーバを追加",
392
445
  nameLabel: "名前",
@@ -568,6 +621,7 @@ const jaMessages = {
568
621
  yamlParseError: "YAML を解析できません — 'title' が含まれているか確認してください",
569
622
  propLabel: "{key}:",
570
623
  moreCount: "他 {count} 件",
624
+ invalidRange: "日付範囲が不正です (endDate: {endDate})",
571
625
  previewIcon: "📅",
572
626
  previewUpcoming: "今後 {count} 件",
573
627
  previewAutomations: "オートメーション {count} 件",
@@ -856,8 +910,9 @@ const jaMessages = {
856
910
  },
857
911
  todoKanban: {
858
912
  rename: "名前を変更",
859
- alreadyDoneColumn: "完了列",
860
913
  markAsDoneColumn: "完了列に指定",
914
+ removeAllItems: "すべての項目を削除",
915
+ removeAllItemsConfirm: "「{column}」のすべての項目({count}件)を削除しますか?この操作は取り消せません。",
861
916
  deleteColumn: "列を削除",
862
917
  columnActions: "列のアクション",
863
918
  addCard: "+ カードを追加",
@@ -1075,6 +1130,42 @@ const jaMessages = {
1075
1130
  errSaveFailed: "保存失敗: {error}",
1076
1131
  errDeleteFailed: "削除に失敗しました",
1077
1132
  confirmDelete: "スキル「{name}」を削除しますか? ~/mulmoclaude/.claude/skills/{name}/SKILL.md が削除されます。",
1133
+ sectionActive: "アクティブ",
1134
+ sectionCatalog: "カタログ",
1135
+ sectionLegend:
1136
+ "アクティブ: プロンプトに読み込まれる ({system} システム = mc- 同梱 · {project} プロジェクト = 編集可 · {user} ユーザー = ~/.claude/skills/)。カタログ: プロンプトを肥大化させずに閲覧・★スター・▶今だけ実行ができる。",
1137
+ catalogEmpty: "利用できるプリセットスキルがありません。",
1138
+ catalogPresetHeading: "プリセット",
1139
+ catalogStar: "スター",
1140
+ catalogStarred: "スター済み",
1141
+ catalogRunOnce: "今だけ実行",
1142
+ sourceUserTitle: "ユーザースキル (~/.claude/skills/、全ワークスペース共通)",
1143
+ sourceSystemTitle: "システムスキル (同梱、mc- 接頭辞 — 読み取り専用、launcher 起動時に上書き)",
1144
+ sourceProjectTitle: "プロジェクトスキル (ワークスペース直下の .claude/skills/、このワークスペースのみ)",
1145
+ sourcePresetTitle: "プリセットカタログ — スターでこのワークスペースに有効化",
1146
+ errCatalogListFailed: "カタログの読み込みに失敗しました: {error}",
1147
+ errCatalogStarFailed: "スキルのスター追加に失敗しました: {error}",
1148
+ errCatalogPreviewFailed: "スキルプレビューの読み込みに失敗しました: {error}",
1149
+ errCatalogRunOnceEmpty: "このスキルには実行できる本文がありません。",
1150
+ catalogAddRepo: "スキルリポジトリを追加",
1151
+ catalogAddRepoTitle: "スキルリポジトリを追加",
1152
+ catalogRepoUrlLabel: "GitHub URL",
1153
+ catalogRepoUrlPlaceholder: "https://github.com/owner/repo",
1154
+ catalogRepoSubpathLabel: "サブパス(任意)",
1155
+ catalogRepoSubpathPlaceholder: "skills",
1156
+ catalogAddRepoSubmit: "インストール",
1157
+ catalogAddRepoSuggestions: "おすすめリポジトリ",
1158
+ catalogUninstallRepo: "リポジトリをアンインストール",
1159
+ catalogUpdateRepo: "リポジトリを更新(最新を再取得)",
1160
+ catalogRepoOpenLink: "GitHub でリポジトリを開く(新しいタブ)",
1161
+ catalogUninstallConfirm: "このリポジトリをアンインストールしますか? すでに★したスキルはアクティブ一覧に残ります。",
1162
+ catalogRepoInstalling: "インストール中…",
1163
+ catalogRepoEmpty: "このリポジトリにスキルが見つかりません。",
1164
+ sourceExternalTitle: "外部スキル(GitHub リポジトリからインストール — ★ で有効化)",
1165
+ errCatalogRepoListFailed: "インストール済みリポジトリの読み込みに失敗しました: {error}",
1166
+ errCatalogRepoInstallFailed: "リポジトリのインストールに失敗しました: {error}",
1167
+ errCatalogRepoUninstallFailed: "リポジトリのアンインストールに失敗しました: {error}",
1168
+ errCatalogRepoInvalidUrl: "GitHub リポジトリの URL を入力してください。",
1078
1169
  },
1079
1170
  pluginManageRoles: {
1080
1171
  heading: "カスタムロール",
@@ -1129,6 +1220,8 @@ const jaMessages = {
1129
1220
  stop: "■ 停止",
1130
1221
  playPresentation: "プレゼンテーション再生",
1131
1222
  regenerateMovie: "動画を再生成",
1223
+ movieGenerationFailed: "動画の生成に失敗しました",
1224
+ retry: "再試行",
1132
1225
  errPrefix: "⚠ エラー",
1133
1226
  noBeats: "スクリプトにビートが見つかりません",
1134
1227
  editSource: "スクリプトソースを編集",
package/src/lang/ko.ts CHANGED
@@ -35,7 +35,7 @@ const koMessages = {
35
35
  },
36
36
  },
37
37
  chatInput: {
38
- placeholder: "작업을 입력하거나 파일을 드래그 / 붙여넣기 / 첨부하세요…",
38
+ placeholder: "Claude에게 메시지…",
39
39
  send: "전송",
40
40
  attachFile: "파일 첨부",
41
41
  fileTooLarge: "파일이 너무 큽니다 ({sizeMB} MB). 최대 30 MB 까지 가능합니다.",
@@ -75,6 +75,8 @@ const koMessages = {
75
75
  clearAll: "모두 지우기",
76
76
  dismiss: "닫기",
77
77
  cancel: "취소",
78
+ showMore: "더 보기 ({count})",
79
+ showLess: "접기",
78
80
  },
79
81
  pluginDiagnostics: {
80
82
  title: "플러그인 구성 문제",
@@ -83,6 +85,16 @@ const koMessages = {
83
85
  intraBody:
84
86
  '플러그인 "{first}"과(와) "{second}"이(가) 동일한 {dimension} "{key}"을(를) 등록합니다. "{first}"이(가) 먼저 등록했으므로 "{second}"의 등록은 무시됩니다.',
85
87
  },
88
+ optionalDeps: {
89
+ // 영구 저장된 기존 히스토리 항목과의 호환을 위해 일반적인 `title` 키는
90
+ // 그대로 둔다. 새 발화는 `titleNotFound` / `titleNotResponding` 사용.
91
+ title: "선택적 의존성을 사용할 수 없습니다",
92
+ titleNotFound: "{command}이(가) 설치되어 있지 않습니다",
93
+ titleNotResponding: "{command}이(가) 실행 중이 아닙니다",
94
+ notFound: "{command}을(를) 찾을 수 없습니다 — 관련 기능이 비활성화되었습니다. {command}을(를) 설치한 후 MulmoClaude를 재시작하면 활성화됩니다.",
95
+ notResponding:
96
+ "{command}은(는) 설치되어 있지만 실행 중이 아닙니다 — 관련 기능이 비활성화되었습니다. {command}을(를) 시작한 후 MulmoClaude를 재시작하면 활성화됩니다.",
97
+ },
86
98
  pluginErrorBoundary: {
87
99
  title: "플러그인 {pkg}이(가) 충돌했습니다",
88
100
  subtitle: "플러그인 렌더링에 실패했습니다. 오류가 콘솔에 기록되었습니다.",
@@ -112,6 +124,11 @@ const koMessages = {
112
124
  error: "오류",
113
125
  result: "결과",
114
126
  running: "실행 중...",
127
+ mcpHint: {
128
+ title: (ctx: { named: (key: "server") => string }) => `${ctx.named("server")} 설정 도움말`,
129
+ requiredKeys: "필수 키",
130
+ setupGuide: "설정 가이드 열기",
131
+ },
115
132
  },
116
133
  fileTreePane: {
117
134
  sort: "정렬:",
@@ -147,6 +164,7 @@ const koMessages = {
147
164
  },
148
165
  settingsModal: {
149
166
  title: "설정",
167
+ version: "MulmoClaude v{version}",
150
168
  tabs: {
151
169
  gemini: "Gemini API 키",
152
170
  tools: "허용된 도구",
@@ -257,15 +275,43 @@ const koMessages = {
257
275
  errLabelConflict: '라벨 "{label}" 은(는) 이미 사용 중입니다',
258
276
  },
259
277
  pluginLauncher: {
260
- todos: { label: "할 일", title: "할 일 열기" },
261
- calendar: { label: "캘린더", title: "캘린더 열기" },
262
- automations: { label: "자동화", title: "자동화 열기" },
263
- wiki: { label: "위키", title: "위키 열기" },
264
- sources: { label: "소스", title: "정보 소스 열기" },
265
- news: { label: "뉴스", title: "뉴스 뷰어 열기" },
266
- skills: { label: "스킬", title: "스킬 열기" },
267
- roles: { label: "역할", title: "역할 열기" },
268
- files: { label: "파일", title: "워크스페이스 파일 열기" },
278
+ todos: { label: "할 일" },
279
+ calendar: { label: "캘린더" },
280
+ automations: { label: "자동화" },
281
+ encore: { label: "Encore" },
282
+ wiki: { label: "위키" },
283
+ sources: { label: "소스" },
284
+ news: { label: "뉴스" },
285
+ skills: { label: "스킬" },
286
+ roles: { label: "역할" },
287
+ files: { label: "파일" },
288
+ },
289
+ encoreDashboard: {
290
+ title: "Encore",
291
+ subtitle: "Encore가 추적 중인 정기 의무 목록입니다.",
292
+ loading: "의무 불러오는 중…",
293
+ errorPrefix: "의무를 불러올 수 없습니다: ",
294
+ empty: "아직 등록된 의무가 없습니다. 채팅에서 설정을 요청하세요.",
295
+ noCycles: "기록된 주기가 없습니다.",
296
+ cyclesSuffix: "주기",
297
+ targetCount: "대상 {count}개",
298
+ cycleClosed: "완료",
299
+ chatButtonTitle: "이 의무를 새 채팅에서 논의하기",
300
+ bellButtonTitle: "이 주기 논의하기",
301
+ addButtonLabel: "추가",
302
+ unexpectedResponse: "Encore가 예기치 않은 응답을 반환했습니다.",
303
+ status: {
304
+ active: "활성",
305
+ paused: "일시 중지",
306
+ retired: "종료",
307
+ },
308
+ cadence: {
309
+ daily: "매일",
310
+ weekly: "매주",
311
+ monthly: "매월",
312
+ biannual: "반기",
313
+ annual: "매년",
314
+ },
269
315
  },
270
316
  fileContentHeader: {
271
317
  showRendered: "렌더링된 Markdown 표시",
@@ -279,6 +325,11 @@ const koMessages = {
279
325
  htmlPreview: "HTML 미리보기",
280
326
  pdfPreview: "PDF 미리보기",
281
327
  parseError: "파싱 오류",
328
+ editJson: "JSON 편집",
329
+ jsonEditorLabel: "JSON 편집기",
330
+ invalidJson: "잘못된 JSON",
331
+ undo: "실행 취소",
332
+ redo: "다시 실행",
282
333
  },
283
334
  filesView: {
284
335
  chatPlaceholder: "이 파일에 대해 질문하세요…",
@@ -388,6 +439,9 @@ const koMessages = {
388
439
  urlLabel: "URL:",
389
440
  commandLabel: "명령:",
390
441
  dockerStdioUnsupported: "⚠ Docker 샌드박스가 켜져 있는 동안에는 실행되지 않습니다.",
442
+ dockerStdioHostExecActive: "⚠ 호스트에서 실행됩니다 — 이 서버는 Docker 샌드박스를 벗어납니다.",
443
+ dockerStdioHostExecOptIn:
444
+ "그래도 호스트에서 실행(고급). 이 서버는 로컬 HTTP 게이트웨이를 통해 Docker 샌드박스 밖에서 실행되며 컴퓨터에 접근할 수 있습니다.",
391
445
  learnMore: "자세히 보기",
392
446
  addServerButton: "+ MCP 서버 추가",
393
447
  nameLabel: "이름",
@@ -568,6 +622,7 @@ const koMessages = {
568
622
  yamlParseError: "YAML 을 파싱할 수 없습니다 — 'title' 이 포함되어 있는지 확인하세요",
569
623
  propLabel: "{key}:",
570
624
  moreCount: "+{count}개 더",
625
+ invalidRange: "잘못된 날짜 범위 (endDate: {endDate})",
571
626
  previewIcon: "📅",
572
627
  previewUpcoming: "예정 {count}개",
573
628
  previewAutomations: "자동화 {count}개",
@@ -856,8 +911,9 @@ const koMessages = {
856
911
  },
857
912
  todoKanban: {
858
913
  rename: "이름 바꾸기",
859
- alreadyDoneColumn: "이미 완료 칼럼",
860
914
  markAsDoneColumn: "완료 칼럼으로 설정",
915
+ removeAllItems: "모든 항목 삭제",
916
+ removeAllItemsConfirm: '"{column}"의 모든 항목 {count}개를 삭제하시겠습니까? 이 작업은 취소할 수 없습니다.',
861
917
  deleteColumn: "칼럼 삭제",
862
918
  columnActions: "칼럼 작업",
863
919
  addCard: "+ 카드 추가",
@@ -1075,6 +1131,42 @@ const koMessages = {
1075
1131
  errSaveFailed: "저장 실패: {error}",
1076
1132
  errDeleteFailed: "삭제 실패",
1077
1133
  confirmDelete: '스킬 "{name}" 을(를) 삭제할까요? ~/mulmoclaude/.claude/skills/{name}/SKILL.md 가 제거됩니다.',
1134
+ sectionActive: "활성",
1135
+ sectionCatalog: "카탈로그",
1136
+ sectionLegend:
1137
+ "활성: 프롬프트에 로드됨 ({system} 시스템 = mc- 동봉 · {project} 프로젝트 = 편집 가능 · {user} 사용자 = ~/.claude/skills/). 카탈로그: 프롬프트를 키우지 않고 살펴보거나 ★별 표시 또는 ▶한 번만 실행할 수 있습니다.",
1138
+ catalogEmpty: "사용 가능한 프리셋 스킬이 없습니다.",
1139
+ catalogPresetHeading: "프리셋",
1140
+ catalogStar: "별 표시",
1141
+ catalogStarred: "별 표시됨",
1142
+ catalogRunOnce: "한 번만 실행",
1143
+ sourceUserTitle: "사용자 스킬 (~/.claude/skills/, 모든 워크스페이스 공통)",
1144
+ sourceSystemTitle: "시스템 스킬 (동봉, mc- 접두사 — 읽기 전용, 런처 부팅 시 덮어씀)",
1145
+ sourceProjectTitle: "프로젝트 스킬 (워크스페이스 .claude/skills/, 이 워크스페이스 전용)",
1146
+ sourcePresetTitle: "프리셋 카탈로그 — 별 표시를 눌러 이 워크스페이스에 활성화",
1147
+ errCatalogListFailed: "카탈로그를 불러오지 못했습니다: {error}",
1148
+ errCatalogStarFailed: "스킬에 별 표시를 추가하지 못했습니다: {error}",
1149
+ errCatalogPreviewFailed: "스킬 미리보기를 불러오지 못했습니다: {error}",
1150
+ errCatalogRunOnceEmpty: "이 스킬에는 실행할 본문이 없습니다.",
1151
+ catalogAddRepo: "스킬 저장소 추가",
1152
+ catalogAddRepoTitle: "스킬 저장소 추가",
1153
+ catalogRepoUrlLabel: "GitHub URL",
1154
+ catalogRepoUrlPlaceholder: "https://github.com/owner/repo",
1155
+ catalogRepoSubpathLabel: "하위 경로 (선택)",
1156
+ catalogRepoSubpathPlaceholder: "skills",
1157
+ catalogAddRepoSubmit: "설치",
1158
+ catalogAddRepoSuggestions: "추천 저장소",
1159
+ catalogUninstallRepo: "저장소 제거",
1160
+ catalogUpdateRepo: "저장소 업데이트(최신 다시 가져오기)",
1161
+ catalogRepoOpenLink: "GitHub에서 저장소 열기(새 탭)",
1162
+ catalogUninstallConfirm: "이 저장소를 제거할까요? 이미 별표한 스킬은 활성 목록에 남습니다.",
1163
+ catalogRepoInstalling: "설치 중…",
1164
+ catalogRepoEmpty: "이 저장소에서 스킬을 찾을 수 없습니다.",
1165
+ sourceExternalTitle: "외부 스킬 (GitHub 저장소에서 설치 — 별표로 활성화)",
1166
+ errCatalogRepoListFailed: "설치된 저장소를 불러오지 못했습니다: {error}",
1167
+ errCatalogRepoInstallFailed: "저장소 설치에 실패했습니다: {error}",
1168
+ errCatalogRepoUninstallFailed: "저장소 제거에 실패했습니다: {error}",
1169
+ errCatalogRepoInvalidUrl: "GitHub 저장소 URL을 입력하세요.",
1078
1170
  },
1079
1171
  pluginManageRoles: {
1080
1172
  heading: "커스텀 역할",
@@ -1129,6 +1221,8 @@ const koMessages = {
1129
1221
  stop: "■ 정지",
1130
1222
  playPresentation: "프레젠테이션 재생",
1131
1223
  regenerateMovie: "동영상 재생성",
1224
+ movieGenerationFailed: "동영상 생성에 실패했습니다",
1225
+ retry: "다시 시도",
1132
1226
  errPrefix: "⚠ 오류",
1133
1227
  noBeats: "스크립트에서 비트를 찾을 수 없습니다",
1134
1228
  editSource: "스크립트 원본 편집",
package/src/lang/pt-BR.ts CHANGED
@@ -28,7 +28,7 @@ const ptBRMessages = {
28
28
  },
29
29
  },
30
30
  chatInput: {
31
- placeholder: "Digite uma tarefa ou arraste / cole / anexe um arquivo…",
31
+ placeholder: "Mensagem para Claude…",
32
32
  send: "Enviar",
33
33
  attachFile: "Anexar arquivo",
34
34
  fileTooLarge: "Arquivo muito grande ({sizeMB} MB). O limite é 30 MB.",
@@ -68,6 +68,8 @@ const ptBRMessages = {
68
68
  clearAll: "Limpar",
69
69
  dismiss: "Dispensar",
70
70
  cancel: "Cancelar",
71
+ showMore: "Mostrar mais ({count})",
72
+ showLess: "Mostrar menos",
71
73
  },
72
74
  pluginDiagnostics: {
73
75
  title: "Problema de configuração do plugin",
@@ -75,6 +77,17 @@ const ptBRMessages = {
75
77
  intraBody:
76
78
  'Os plugins "{first}" e "{second}" registram o mesmo {dimension} "{key}". "{first}" o reivindicou primeiro, portanto o registro de "{second}" é ignorado.',
77
79
  },
80
+ optionalDeps: {
81
+ // `title` genérico mantido para compatibilidade com entradas do
82
+ // histórico persistidas antes da divisão por motivo; as novas
83
+ // usam `titleNotFound` / `titleNotResponding`.
84
+ title: "Dependência opcional indisponível",
85
+ titleNotFound: "{command} não está instalado",
86
+ titleNotResponding: "{command} não está em execução",
87
+ notFound: "{command} não encontrado — recursos relacionados foram desativados. Instale {command} e reinicie o MulmoClaude para habilitá-los.",
88
+ notResponding:
89
+ "{command} está instalado mas não está em execução — recursos relacionados foram desativados. Inicie {command} e reinicie o MulmoClaude para habilitá-los.",
90
+ },
78
91
  pluginErrorBoundary: {
79
92
  title: "O plugin {pkg} travou",
80
93
  subtitle: "O plugin falhou ao renderizar. O erro foi registrado no console.",
@@ -104,6 +117,11 @@ const ptBRMessages = {
104
117
  error: "Erro",
105
118
  result: "Resultado",
106
119
  running: "Executando...",
120
+ mcpHint: {
121
+ title: (ctx: { named: (key: "server") => string }) => `Dica de configuração: ${ctx.named("server")}`,
122
+ requiredKeys: "Chaves obrigatórias",
123
+ setupGuide: "Abrir guia de configuração",
124
+ },
107
125
  },
108
126
  fileTreePane: {
109
127
  sort: "Ordenar:",
@@ -140,6 +158,7 @@ const ptBRMessages = {
140
158
  },
141
159
  settingsModal: {
142
160
  title: "Configurações",
161
+ version: "MulmoClaude v{version}",
143
162
  tabs: {
144
163
  gemini: "Chave API do Gemini",
145
164
  tools: "Ferramentas permitidas",
@@ -251,15 +270,43 @@ const ptBRMessages = {
251
270
  errLabelConflict: 'Rótulo "{label}" já existe',
252
271
  },
253
272
  pluginLauncher: {
254
- todos: { label: "Tarefas", title: "Abrir tarefas" },
255
- calendar: { label: "Calendário", title: "Abrir calendário" },
256
- automations: { label: "Ações", title: "Abrir ações" },
257
- wiki: { label: "Wiki", title: "Abrir wiki" },
258
- sources: { label: "Fontes", title: "Abrir fontes de informação" },
259
- news: { label: "Notícias", title: "Abrir o leitor de notícias" },
260
- skills: { label: "Skills", title: "Abrir skills" },
261
- roles: { label: "Papéis", title: "Abrir papéis" },
262
- files: { label: "Arquivos", title: "Abrir arquivos do workspace" },
273
+ todos: { label: "Tarefas" },
274
+ calendar: { label: "Calendário" },
275
+ automations: { label: "Ações" },
276
+ encore: { label: "Encore" },
277
+ wiki: { label: "Wiki" },
278
+ sources: { label: "Fontes" },
279
+ news: { label: "Notícias" },
280
+ skills: { label: "Skills" },
281
+ roles: { label: "Papéis" },
282
+ files: { label: "Arquivos" },
283
+ },
284
+ encoreDashboard: {
285
+ title: "Encore",
286
+ subtitle: "Obrigações recorrentes que o Encore está acompanhando.",
287
+ loading: "Carregando obrigações…",
288
+ errorPrefix: "Não foi possível carregar as obrigações: ",
289
+ empty: "Ainda não há obrigações. Peça no chat para configurar uma.",
290
+ noCycles: "Nenhum ciclo registrado ainda.",
291
+ cyclesSuffix: "ciclos",
292
+ targetCount: "{count} alvo | {count} alvos",
293
+ cycleClosed: "Concluído",
294
+ chatButtonTitle: "Conversar sobre esta obrigação em um novo chat",
295
+ bellButtonTitle: "Conversar sobre este ciclo",
296
+ addButtonLabel: "Adicionar",
297
+ unexpectedResponse: "O Encore retornou uma resposta inesperada.",
298
+ status: {
299
+ active: "Ativa",
300
+ paused: "Pausada",
301
+ retired: "Encerrada",
302
+ },
303
+ cadence: {
304
+ daily: "Diária",
305
+ weekly: "Semanal",
306
+ monthly: "Mensal",
307
+ biannual: "Semestral",
308
+ annual: "Anual",
309
+ },
263
310
  },
264
311
  fileContentHeader: {
265
312
  showRendered: "Mostrar Markdown renderizado",
@@ -273,6 +320,11 @@ const ptBRMessages = {
273
320
  htmlPreview: "Pré-visualização HTML",
274
321
  pdfPreview: "Pré-visualização PDF",
275
322
  parseError: "erro de análise",
323
+ editJson: "Editar JSON",
324
+ jsonEditorLabel: "Editor JSON",
325
+ invalidJson: "JSON inválido",
326
+ undo: "Desfazer",
327
+ redo: "Refazer",
276
328
  },
277
329
  filesView: {
278
330
  chatPlaceholder: "Pergunte sobre este arquivo…",
@@ -387,6 +439,9 @@ const ptBRMessages = {
387
439
  urlLabel: "URL:",
388
440
  commandLabel: "Comando:",
389
441
  dockerStdioUnsupported: "⚠ Não será executado enquanto o sandbox do Docker estiver ativado.",
442
+ dockerStdioHostExecActive: "⚠ Executa no host: este servidor sai do sandbox do Docker.",
443
+ dockerStdioHostExecOptIn:
444
+ "Executar no host mesmo assim (avançado). Este servidor é executado fora do sandbox do Docker por meio de um gateway HTTP local e pode acessar sua máquina.",
390
445
  learnMore: "Saiba mais",
391
446
  addServerButton: "+ Adicionar servidor MCP",
392
447
  nameLabel: "Nome",
@@ -570,6 +625,7 @@ const ptBRMessages = {
570
625
  yamlParseError: "Não foi possível analisar o YAML — verifique se 'title' está presente",
571
626
  propLabel: "{key}:",
572
627
  moreCount: "+{count} mais",
628
+ invalidRange: "Intervalo de datas inválido (endDate: {endDate})",
573
629
  previewIcon: "📅",
574
630
  previewUpcoming: "{count} próximos",
575
631
  previewAutomations: "{count} automação | {count} automações",
@@ -859,8 +915,9 @@ const ptBRMessages = {
859
915
  },
860
916
  todoKanban: {
861
917
  rename: "Renomear",
862
- alreadyDoneColumn: "Já é a coluna de concluídas",
863
918
  markAsDoneColumn: "Definir como coluna de concluídas",
919
+ removeAllItems: "Remover todos os itens",
920
+ removeAllItemsConfirm: 'Remover todos os {count} itens em "{column}"? Esta ação não pode ser desfeita.',
864
921
  deleteColumn: "Excluir coluna",
865
922
  columnActions: "Ações da coluna",
866
923
  addCard: "+ Adicionar cartão",
@@ -1075,6 +1132,42 @@ const ptBRMessages = {
1075
1132
  errSaveFailed: "Falha ao salvar: {error}",
1076
1133
  errDeleteFailed: "Falha ao excluir",
1077
1134
  confirmDelete: 'Excluir a skill "{name}"? Isso remove ~/mulmoclaude/.claude/skills/{name}/SKILL.md.',
1135
+ sectionActive: "Ativas",
1136
+ sectionCatalog: "Catálogo",
1137
+ sectionLegend:
1138
+ "Ativas: carregadas no prompt ({system} Sistema = inclusas mc- · {project} Projeto = editáveis · {user} Usuário = ~/.claude/skills/). Catálogo: explore, ★favorite ou ▶execute uma vez sem inflar o prompt.",
1139
+ catalogEmpty: "Nenhuma skill de preset disponível.",
1140
+ catalogPresetHeading: "Presets",
1141
+ catalogStar: "Favoritar",
1142
+ catalogStarred: "Favoritada",
1143
+ catalogRunOnce: "Executar uma vez",
1144
+ sourceUserTitle: "Skill do usuário (~/.claude/skills/, disponível em todos os workspaces)",
1145
+ sourceSystemTitle: "Skill de sistema (inclusa, prefixo mc- — somente leitura, sobrescrita pelo launcher)",
1146
+ sourceProjectTitle: "Skill do projeto (.claude/skills/ do workspace, apenas este workspace)",
1147
+ sourcePresetTitle: "Catálogo de presets — clique em Favoritar para ativar neste workspace",
1148
+ errCatalogListFailed: "Falha ao carregar o catálogo: {error}",
1149
+ errCatalogStarFailed: "Falha ao favoritar a skill: {error}",
1150
+ errCatalogPreviewFailed: "Falha ao carregar a pré-visualização da skill: {error}",
1151
+ errCatalogRunOnceEmpty: "Esta skill não tem corpo para executar.",
1152
+ catalogAddRepo: "Adicionar repositório de skills",
1153
+ catalogAddRepoTitle: "Adicionar um repositório de skills",
1154
+ catalogRepoUrlLabel: "URL do GitHub",
1155
+ catalogRepoUrlPlaceholder: "https://github.com/owner/repo",
1156
+ catalogRepoSubpathLabel: "Subcaminho (opcional)",
1157
+ catalogRepoSubpathPlaceholder: "skills",
1158
+ catalogAddRepoSubmit: "Instalar",
1159
+ catalogAddRepoSuggestions: "Repositórios sugeridos",
1160
+ catalogUninstallRepo: "Desinstalar repositório",
1161
+ catalogUpdateRepo: "Atualizar repositório (rebuscar o mais recente)",
1162
+ catalogRepoOpenLink: "Abrir o repositório no GitHub (nova aba)",
1163
+ catalogUninstallConfirm: "Desinstalar este repositório? As skills que você já marcou com estrela permanecem na sua lista ativa.",
1164
+ catalogRepoInstalling: "Instalando…",
1165
+ catalogRepoEmpty: "Nenhuma skill encontrada neste repositório.",
1166
+ sourceExternalTitle: "Skill externa (instalada de um repositório do GitHub — clique na estrela para ativar)",
1167
+ errCatalogRepoListFailed: "Falha ao carregar os repositórios instalados: {error}",
1168
+ errCatalogRepoInstallFailed: "Falha ao instalar o repositório: {error}",
1169
+ errCatalogRepoUninstallFailed: "Falha ao desinstalar o repositório: {error}",
1170
+ errCatalogRepoInvalidUrl: "Informe uma URL de repositório do GitHub.",
1078
1171
  },
1079
1172
  pluginManageRoles: {
1080
1173
  heading: "Papéis personalizados",
@@ -1129,6 +1222,8 @@ const ptBRMessages = {
1129
1222
  stop: "■ Parar",
1130
1223
  playPresentation: "Reproduzir apresentação",
1131
1224
  regenerateMovie: "Regenerar vídeo",
1225
+ movieGenerationFailed: "Falha ao gerar o vídeo",
1226
+ retry: "Tentar novamente",
1132
1227
  errPrefix: "⚠ Erro",
1133
1228
  noBeats: "Nenhum beat encontrado no script",
1134
1229
  editSource: "Editar fonte do script",