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
@@ -0,0 +1,534 @@
1
+ // Brazilian Portuguese dictionary. Mirror the shape of src/lang/en.ts —
2
+ // missing keys fall back to English per createI18n's fallbackLocale.
3
+
4
+ const ptBRMessages = {
5
+ common: {
6
+ save: "Salvar",
7
+ cancel: "Cancelar",
8
+ loading: "Carregando...",
9
+ close: "Fechar",
10
+ dismiss: "Dispensar",
11
+ add: "Adicionar",
12
+ remove: "Remover",
13
+ saving: "Salvando...",
14
+ saved: "Salvo",
15
+ noResultsYet: "Ainda não há resultados",
16
+ noImageYet: "Ainda não há imagem",
17
+ },
18
+ sessionTabBar: {
19
+ newSession: "Nova sessão",
20
+ sessionHistory: "Histórico de sessões",
21
+ activeSessions: "{count} sessão ativa (agente em execução) | {count} sessões ativas (agente em execução)",
22
+ unreadReplies: "{count} resposta não lida | {count} respostas não lidas",
23
+ },
24
+ chatInput: {
25
+ placeholder: "Digite uma tarefa ou arraste / cole / anexe um arquivo…",
26
+ expandEditor: "Expandir editor",
27
+ composeMessage: "Escrever mensagem",
28
+ sendHint: "Cmd+Enter para enviar",
29
+ send: "Enviar",
30
+ attachFile: "Anexar arquivo",
31
+ fileTooLarge: "Arquivo muito grande ({sizeMB} MB). O limite é 30 MB.",
32
+ unsupportedFileType: "Tipo de arquivo não suportado. Aceitos: imagens, PDF, DOCX, XLSX, PPTX e arquivos de texto.",
33
+ },
34
+ sessionHistoryPanel: {
35
+ filters: {
36
+ all: "Todas",
37
+ unread: "Não lidas",
38
+ human: "Pessoa",
39
+ scheduler: "Agendador",
40
+ skill: "Skill",
41
+ bridge: "Bridge",
42
+ },
43
+ failedToRefresh: "⚠ Falha ao atualizar: {error}",
44
+ showingLastKnown: " — exibindo a última lista conhecida.",
45
+ noSessions: "Ainda não há sessões.",
46
+ noMatching: "Nenhuma sessão correspondente.",
47
+ running: "Em execução",
48
+ unread: "Não lida",
49
+ noMessages: "(sem mensagens)",
50
+ },
51
+ notificationBell: {
52
+ notifications: "Notificações",
53
+ markAllRead: "Marcar tudo como lido",
54
+ noNotifications: "Nenhuma notificação",
55
+ dismiss: "Dispensar",
56
+ },
57
+ sidebarHeader: {
58
+ home: "Ir para o chat mais recente",
59
+ toolCallHistory: "Histórico de chamadas de ferramentas",
60
+ settings: "Configurações",
61
+ },
62
+ rightSidebar: {
63
+ toggleSystemPrompt: "Alternar system prompt",
64
+ systemPrompt: "System Prompt",
65
+ availableTools: "Ferramentas disponíveis",
66
+ toggleToolDescription: "Alternar descrição da ferramenta",
67
+ toolCallHistory: "Histórico de chamadas de ferramentas",
68
+ noToolCalls: "Ainda não há chamadas de ferramentas",
69
+ arguments: "Argumentos",
70
+ error: "Erro",
71
+ result: "Resultado",
72
+ running: "Executando...",
73
+ },
74
+ fileTreePane: {
75
+ sort: "Ordenar:",
76
+ sortByName: "Ordenar por nome",
77
+ name: "Nome",
78
+ sortByRecent: "Ordenar por data de modificação (mais recentes primeiro)",
79
+ recent: "Recente",
80
+ reference: "Referência",
81
+ // "RO" = Read-Only. Abreviação em inglês mantida para caber como
82
+ // badge compacto ao lado do rótulo Referência.
83
+ readOnlyBadge: "RO",
84
+ },
85
+ fileTree: {
86
+ workspace: "(workspace)",
87
+ recentlyChanged: "Alterados recentemente",
88
+ },
89
+ lockStatusPopup: {
90
+ sandboxEnabledTooltip: "Sandbox habilitado (Docker)",
91
+ noSandboxTooltip: "Sem sandbox (Docker não encontrado)",
92
+ sandboxEnabledLabel: "Sandbox habilitado:",
93
+ sandboxEnabledBody: "Docker está em execução. O acesso ao sistema de arquivos está isolado.",
94
+ noSandboxLabel: "Sem sandbox:",
95
+ noSandboxBodyPrefix: "O Claude pode acessar todos os arquivos da sua máquina. Instale o",
96
+ noSandboxBodySuffix: "para habilitar o isolamento do sistema de arquivos.",
97
+ dockerDesktop: "Docker Desktop",
98
+ hostCredentials: "Credenciais do host anexadas:",
99
+ credsLoading: "carregando…",
100
+ sshAgent: "Agente SSH:",
101
+ forwarded: "encaminhado",
102
+ notForwarded: "não encaminhado",
103
+ mountedConfigs: "Configurações montadas:",
104
+ none: "nenhuma",
105
+ testIsolation: "Testar isolamento do sandbox:",
106
+ },
107
+ settingsModal: {
108
+ title: "Configurações",
109
+ tabs: {
110
+ tools: "Ferramentas permitidas",
111
+ mcp: "Servidores MCP",
112
+ dirs: "Diretórios",
113
+ refs: "Diretórios de referência",
114
+ },
115
+ toolNamesLabel: "Nomes de ferramentas",
116
+ invalidToolNamesPrefix: "Estes parecem não padrão (prefixo esperado",
117
+ invalidToolNamesSuffix: "):",
118
+ mcpToolsError: "⚠ Não foi possível obter o status das ferramentas MCP: {error}. Exibindo todas as ferramentas independentemente de estarem habilitadas.",
119
+ changesHint: "As alterações se aplicam na próxima mensagem. Não é preciso reiniciar.",
120
+ cannotSaveTooltip: "Não é possível salvar até as configurações carregarem com sucesso",
121
+ saving: "Salvando…",
122
+ loadingLabel: "Carregando…",
123
+ },
124
+ canvasViewToggle: {
125
+ stackViewTooltip: "Visão em pilha · clique para alternar para visão única (⌘1)",
126
+ singleViewTooltip: "Visão única · clique para alternar para visão em pilha (⌘2)",
127
+ switchToSingle: "Alternar para visão única",
128
+ switchToStack: "Alternar para visão em pilha",
129
+ },
130
+ settingsWorkspaceDirs: {
131
+ explanation: "Diretórios personalizados para organizar arquivos em {dataDir} e {artifactsDir}. O Claude os usa para decidir onde salvar arquivos.",
132
+ noEntries: "Nenhum diretório personalizado configurado.",
133
+ addDirTitle: "Adicionar diretório",
134
+ pathPlaceholder: "data/clientes ou artifacts/relatorios",
135
+ descPlaceholder: "Descrição (o que vai nesta pasta)",
136
+ errPathRequired: "Caminho é obrigatório",
137
+ errMustStartWith: "Deve começar com data/ ou artifacts/",
138
+ errAlreadyExists: "Já existe",
139
+ },
140
+ settingsReferenceDirs: {
141
+ explanation:
142
+ "Diretórios externos que o Claude pode ler, mas não modificar. No modo Docker, são montados como somente leitura. Úteis para referenciar vaults do Obsidian, código de projetos ou pastas de documentos.",
143
+ noEntries: "Nenhum diretório de referência configurado.",
144
+ addDirTitle: "Adicionar diretório de referência",
145
+ pathPlaceholder: "/Users/eu/ObsidianVault ou ~/Documentos/notas",
146
+ labelPlaceholder: "Rótulo (opcional — padrão é o nome da pasta)",
147
+ readOnlyBadge: "somente leitura",
148
+ errPathRequired: "Caminho é obrigatório",
149
+ errMustBeAbsolute: "Deve ser um caminho absoluto ou começar com ~/",
150
+ errAlreadyExists: "Já existe",
151
+ errLabelConflict: 'Rótulo "{label}" já existe',
152
+ },
153
+ pluginLauncher: {
154
+ todos: { label: "Tarefas", title: "Abrir tarefas (⌘4)" },
155
+ scheduler: { label: "Agenda", title: "Abrir agenda (⌘5)" },
156
+ wiki: { label: "Wiki", title: "Abrir wiki (⌘6)" },
157
+ skills: { label: "Skills", title: "Abrir skills (⌘7)" },
158
+ roles: { label: "Papéis", title: "Abrir papéis (⌘8)" },
159
+ files: { label: "Arquivos", title: "Abrir arquivos do workspace (⌘3)" },
160
+ },
161
+ fileContentHeader: {
162
+ showRendered: "Mostrar Markdown renderizado",
163
+ showRaw: "Mostrar código-fonte",
164
+ rendered: "Renderizado",
165
+ raw: "Fonte",
166
+ closeFile: "Fechar arquivo",
167
+ },
168
+ fileContentRenderer: {
169
+ selectFile: "Selecione um arquivo",
170
+ htmlPreview: "Pré-visualização HTML",
171
+ pdfPreview: "Pré-visualização PDF",
172
+ parseError: "erro de análise",
173
+ },
174
+ settingsMcpTab: {
175
+ explanation:
176
+ "Adicione servidores MCP externos. Servidores HTTP funcionam em todos os modos. Servidores Stdio usam o {npx} / {node} / {tsx} da imagem do sandbox; quando o Docker está habilitado, os caminhos devem ficar dentro do workspace.",
177
+ localhostRewrite: "No modo Docker, {localhost} é reescrito para {hostDockerInternal}.",
178
+ noServers: "Ainda não há servidores MCP configurados.",
179
+ enabled: "habilitado",
180
+ urlLabel: "URL:",
181
+ commandLabel: "Comando:",
182
+ dockerNonWorkspaceWarning: "⚠ Contém caminhos fora do workspace — não serão resolvidos dentro do Docker.",
183
+ addServerButton: "+ Adicionar servidor MCP",
184
+ nameLabel: "Nome",
185
+ namePlaceholder: "meu-servidor",
186
+ typeHttp: "HTTP",
187
+ typeStdio: "Stdio (comando)",
188
+ urlFieldLabel: "URL",
189
+ urlPlaceholder: "https://example.com/mcp",
190
+ commandFieldLabel: "Comando",
191
+ argsLabel: "Argumentos (um por linha)",
192
+ // Forma de função de mensagem — ignora o compilador de mensagens do
193
+ // vue-i18n para que o `@` literal não seja interpretado como
194
+ // referência a mensagem vinculada.
195
+ argsPlaceholder: () => "-y\n@modelcontextprotocol/server-filesystem\n/workspace/path",
196
+ errNoName: "Informe um Nome, ou forneça uma URL / argumentos dos quais possamos derivá-lo.",
197
+ errBadName: "O nome deve começar com letra minúscula e conter apenas [a-z0-9_-].",
198
+ errIdExists: 'O id de servidor "{id}" já existe.',
199
+ errBadHttpUrl: "A URL HTTP deve começar com http:// ou https://",
200
+ },
201
+ pluginScheduler: {
202
+ prev: "Anterior",
203
+ today: "Hoje",
204
+ goToday: "Ir para hoje",
205
+ next: "Próximo",
206
+ deleteItem: "Excluir item",
207
+ closeEditor: "Fechar editor",
208
+ apiError: "⚠ Falha ao atualizar o agendador: {error}",
209
+ tabCalendar: "Calendário",
210
+ tabTasks: "Tarefas",
211
+ heading: "Agendador",
212
+ itemCount: "{count} item | {count} itens",
213
+ noScheduled: "Nenhum item agendado",
214
+ unscheduled: "Sem agendamento",
215
+ editItem: "Editar item",
216
+ update: "Atualizar",
217
+ editSource: "Editar fonte",
218
+ applyChanges: "Aplicar alterações",
219
+ propLabel: "{key}:",
220
+ moreCount: "+{count} mais",
221
+ previewIcon: "📅",
222
+ previewUpcoming: "{count} próximos",
223
+ previewMore: "+ {count} mais…",
224
+ },
225
+ pluginSchedulerTasks: {
226
+ recommendedFrequencies: "Frequências recomendadas",
227
+ tableTaskType: "Tipo de tarefa",
228
+ tableSuggestedSchedule: "Agendamento sugerido",
229
+ noTasks: "Nenhuma tarefa agendada",
230
+ runNow: "Executar agora",
231
+ enable: "Habilitar",
232
+ disable: "Desabilitar",
233
+ delete: "Excluir",
234
+ nextRun: "Próxima: {time}",
235
+ originSystem: "Sistema",
236
+ originUser: "Usuário",
237
+ originSkill: "Skill",
238
+ runFailed: "Falha na execução: {error}",
239
+ toggleFailed: "Falha ao alternar: {error}",
240
+ deleteFailed: "Falha ao excluir: {error}",
241
+ },
242
+ pluginCanvas: {
243
+ undo: "Desfazer",
244
+ redo: "Refazer",
245
+ clear: "Limpar",
246
+ styleLabel: "Estilo:",
247
+ },
248
+ pluginChart: {
249
+ untitled: "Gráfico",
250
+ chartCount: "{count} gráfico | {count} gráficos",
251
+ chartTitle: "Gráfico {num}",
252
+ png: "PNG",
253
+ },
254
+ pluginTodo: {
255
+ clearFilters: "Limpar todos os filtros",
256
+ deleteItem: "Excluir item",
257
+ apiError: "⚠ Falha ao atualizar as tarefas: {error}",
258
+ heading: "Lista de tarefas",
259
+ completedRatio: "{done}/{total} concluídas",
260
+ filter: "Filtro:",
261
+ noItems: "Ainda não há tarefas",
262
+ noMatchingFilter: "Nenhum item corresponde ao filtro ativo",
263
+ update: "Atualizar",
264
+ clearCompleted: "Limpar concluídas",
265
+ clearButton: "Limpar ✕",
266
+ deleteSymbol: "✕",
267
+ },
268
+ todoExplorer: {
269
+ heading: "Tarefas",
270
+ doneRatio: "{done}/{total} feitas",
271
+ addButton: "+ Adicionar",
272
+ addColumnButton: "+ Coluna",
273
+ labels: "Rótulos:",
274
+ searchPlaceholder: "Buscar...",
275
+ clearButton: "Limpar ✕",
276
+ clearFiltersTitle: "Limpar filtros de rótulo",
277
+ emptyHint: 'Ainda não há tarefas. Clique em "+ Adicionar" para criar uma.',
278
+ addColumn: "Adicionar coluna",
279
+ newColumnLabelField: "Rótulo",
280
+ newColumnPlaceholder: "Revisar",
281
+ noMatchingFilter: "Nenhum item corresponde ao filtro atual",
282
+ },
283
+ todoPreview: {
284
+ completedRatio: "{done}/{total} concluídas",
285
+ moreItems: "+ {count} mais…",
286
+ headerIcon: "☑",
287
+ doneIcon: "✓",
288
+ pendingIcon: "○",
289
+ moreLabels: "+{count}",
290
+ },
291
+ todoDialogs: {
292
+ addTitle: "Adicionar tarefa",
293
+ editTitle: "Editar tarefa",
294
+ deleteButton: "Excluir",
295
+ deleteTitle: "Excluir este item",
296
+ noneOption: "— Nenhum —",
297
+ fieldText: "Texto",
298
+ fieldNote: "Nota",
299
+ fieldStatus: "Status",
300
+ fieldPriority: "Prioridade",
301
+ fieldDueDate: "Data de vencimento",
302
+ fieldLabels: "Rótulos",
303
+ fieldLabelsCommaSeparated: "Rótulos (separados por vírgula)",
304
+ textPlaceholder: "O que precisa ser feito?",
305
+ labelsPlaceholder: "trabalho, urgente",
306
+ },
307
+ todoKanban: {
308
+ rename: "Renomear",
309
+ alreadyDoneColumn: "Já é a coluna de concluídas",
310
+ markAsDoneColumn: "Definir como coluna de concluídas",
311
+ deleteColumn: "Excluir coluna",
312
+ columnActions: "Ações da coluna",
313
+ addCard: "+ Adicionar cartão",
314
+ },
315
+ todoTableList: {
316
+ noMatchingFilter: "Nenhum item corresponde ao filtro atual",
317
+ },
318
+ pluginWiki: {
319
+ backToIndex: "Voltar ao índice",
320
+ pdf: "PDF",
321
+ pdfFailed: "⚠ Falha no PDF",
322
+ tabIndex: "Índice",
323
+ tabLog: "Log",
324
+ tabLint: "Lint",
325
+ empty: "O wiki está vazio. Peça ao Wiki Manager para ingerir uma fonte.",
326
+ previewMore: "+ {count} mais…",
327
+ chatPlaceholder: "Pergunte sobre esta página…",
328
+ chatSend: "Iniciar um novo chat sobre esta página",
329
+ },
330
+ pluginPresentHtml: {
331
+ saveAsPdf: "Salvar como PDF (abre o diálogo de impressão)",
332
+ pdf: "PDF",
333
+ untitled: "Página HTML",
334
+ hideSource: "Ocultar fonte <>",
335
+ showSource: "Mostrar fonte <>",
336
+ },
337
+ pluginManageSource: {
338
+ titlePlaceholder: "Título (opcional)",
339
+ heading: "Fontes de informação",
340
+ sourceCount: "{count} fonte | {count} fontes",
341
+ addButton: "Adicionar",
342
+ rebuildNow: "Reconstruir agora",
343
+ rebuilding: "Reconstruindo…",
344
+ typeField: "Tipo",
345
+ addingLabel: "Adicionando…",
346
+ addAndRebuild: "Adicionar + Reconstruir",
347
+ emptyPickPack: "Ainda não há fontes registradas. Escolha um pacote inicial abaixo, clique em {addBold} acima ou peça ao Claude para registrar uma.",
348
+ emptyAddStrong: "+ Adicionar",
349
+ registering: "Registrando + buscando…",
350
+ removeLabel: "Remover",
351
+ removingLabel: "Removendo…",
352
+ todaysBrief: "Resumo de hoje",
353
+ todaysBriefLoading: "Carregando o resumo de hoje…",
354
+ briefNone: "Ainda não há resumo para esta data. Clique em Reconstruir agora.",
355
+ briefEmpty: "O resumo de hoje está vazio.",
356
+ briefLoadFailed: "Falha ao carregar o resumo",
357
+ lastRebuildSummary: "Última reconstrução ({date}): {itemCount} itens de {planned} fontes, {duplicates} duplicatas descartadas.",
358
+ archiveErrorsSuffix: "({count} erros de arquivamento)",
359
+ kindRss: "RSS",
360
+ kindGithubRel: "Releases do GitHub",
361
+ kindGithubIss: "Issues do GitHub",
362
+ kindArxiv: "arXiv",
363
+ kindGithubReleases: "Releases do GitHub",
364
+ kindGithubIssues: "Issues do GitHub",
365
+ briefDateLabel: "({date})",
366
+ primaryRssPlaceholder: "https://news.ycombinator.com/rss",
367
+ primaryGithubPlaceholder: "https://github.com/owner/repo (ou owner/repo)",
368
+ primaryArxivPlaceholder: "cat:cs.CL",
369
+ primaryRssHint: "URL do feed (RSS 2.0 / Atom / RDF)",
370
+ primaryGithubRelHint: "URL do repo do GitHub ou owner/repo — busca releases",
371
+ primaryGithubIssHint: "URL do repo do GitHub ou owner/repo — busca issues",
372
+ primaryArxivHint: "Consulta de busca do arXiv (ex.: cat:cs.CL ou au:hinton)",
373
+ confirmRemove: 'Remover a fonte "{slug}"?',
374
+ flashRegistered: "Registrada. Buscando novos itens…",
375
+ flashRebuildReady: "Pronto: {itemCount} itens de {planned} fonte.|Pronto: {itemCount} itens de {planned} fontes.",
376
+ flashRebuildComplete: "Reconstrução concluída: {itemCount} itens de {planned} fontes.",
377
+ flashRebuildFailed: "Falha na reconstrução: {error}",
378
+ flashRegisterFailed: "Falha ao registrar a fonte",
379
+ flashRegisterSucceededRebuildFailed: "Registro bem-sucedido, mas falha na reconstrução: {error}",
380
+ flashRemoved: 'Removida "{slug}".',
381
+ flashRemoveFailed: "Falha ao remover: {error}",
382
+ flashRefreshListFailed: "Falha ao atualizar as fontes: {error}",
383
+ flashPresetAlreadyRegistered: 'Todas as fontes em "{label}" já estão registradas.',
384
+ flashPresetRegistered: 'Registrada {count} fonte de "{label}". Buscando…|Registradas {count} fontes de "{label}". Buscando…',
385
+ flashPresetPartial: "Registradas {ok}/{total}. Erros: {errors}",
386
+ },
387
+ pluginManageSkills: {
388
+ deleteProjectSkill: "Excluir esta skill de projeto",
389
+ heading: "Skills",
390
+ previewCount: "{count} skill | {count} skills",
391
+ previewMore: "+{count} mais",
392
+ subheading: ({ named }: { named: (key: string) => unknown }) => `${named("count")} disponíveis · clique para visualizar · "Run" invoca como /<name>`,
393
+ emptyWithPath: "Nenhuma skill encontrada. Adicione pastas de skills em {path}.",
394
+ emptySkillPath: "~/.claude/skills/",
395
+ selectHint: "Selecione uma skill à esquerda para ver seu SKILL.md.",
396
+ loading: "Carregando…",
397
+ fieldDescription: "Descrição",
398
+ fieldBody: "Corpo (Markdown)",
399
+ emptyBody: "(corpo vazio)",
400
+ btnEdit: "Editar",
401
+ btnDelete: "Excluir",
402
+ btnRun: "Executar",
403
+ errListFailed: "Falha ao carregar skills: {error}",
404
+ errDetailFailed: "Falha ao carregar a skill: {error}",
405
+ errSaveFailed: "Falha ao salvar: {error}",
406
+ errDeleteFailed: "Falha ao excluir",
407
+ confirmDelete: 'Excluir a skill "{name}"? Isso remove ~/mulmoclaude/.claude/skills/{name}/SKILL.md.',
408
+ },
409
+ pluginManageRoles: {
410
+ heading: "Papéis personalizados",
411
+ roleCount: "{count} papel | {count} papéis",
412
+ previewCount: "{count} papel personalizado | {count} papéis personalizados",
413
+ addButton: "+ Adicionar",
414
+ createPanel: "Criar novo papel",
415
+ fieldId: "ID",
416
+ fieldName: "Nome",
417
+ fieldIcon: "Ícone",
418
+ fieldPrompt: "Prompt",
419
+ fieldPlugins: "Plugins",
420
+ fieldStarterQueries: "Consultas iniciais",
421
+ onePerLine: "(uma por linha)",
422
+ helpLink: "?",
423
+ idFormatted: "({id})",
424
+ missingEnv: "({env} ausente)",
425
+ requiresEnv: "Requer {env} no .env",
426
+ collapse: "Recolher",
427
+ expand: "Expandir",
428
+ idPlaceholder: "id-unico",
429
+ creating: "Criando…",
430
+ create: "Criar",
431
+ updating: "Atualizando…",
432
+ update: "Atualizar",
433
+ cancel: "Cancelar",
434
+ delete: "Excluir",
435
+ emptyHint: 'Ainda não há papéis personalizados. Clique em "+ Adicionar" ou peça ao Claude para criar um.',
436
+ errIdRequired: "O ID é obrigatório.",
437
+ errIdInvalid: "O ID pode conter apenas letras, números, '-' e '_'.",
438
+ errNameRequired: "O nome é obrigatório.",
439
+ errIdDuplicate: "Já existe um papel com ID '{id}'.",
440
+ errCreateFailed: "Falha ao criar",
441
+ errSaveFailed: "Falha ao salvar",
442
+ errDeleteFailed: "Falha ao excluir",
443
+ errNetworkError: "Erro de rede",
444
+ errServerError: "Erro do servidor: {status}",
445
+ },
446
+ pluginUiImage: {
447
+ promptLabel: "{label}:",
448
+ },
449
+ pluginMulmoScript: {
450
+ beatCount: "{count} beat | {count} beats",
451
+ movie: "Vídeo",
452
+ generating: "Gerando…",
453
+ rendering: "Renderizando…",
454
+ saving: "Salvando…",
455
+ update: "Atualizar",
456
+ characters: "Personagens",
457
+ drop: "Soltar",
458
+ gen: "Gerar",
459
+ play: "▶ Reproduzir",
460
+ stop: "■ Parar",
461
+ errPrefix: "⚠ Erro",
462
+ noBeats: "Nenhum beat encontrado no script",
463
+ editSource: "Editar fonte do script",
464
+ applyChanges: "Aplicar alterações",
465
+ generateAll: "Gerar tudo",
466
+ orDropImage: "ou solte uma imagem",
467
+ generate: "Gerar",
468
+ generateAudio: "♪ Gerar",
469
+ saveErrorInvalidJson: "⚠ JSON inválido: {error}",
470
+ saveErrorSaveFailed: "⚠ Falha ao salvar: {error}",
471
+ },
472
+ pluginMarkdown: {
473
+ loading: "Carregando documento...",
474
+ loadFailed: "⚠ Falha ao carregar o documento: {error}",
475
+ refreshFailed: "⚠ Falha ao atualizar o documento: {error} — exibindo o último conteúdo carregado com sucesso.",
476
+ noContent: "Nenhum conteúdo Markdown disponível",
477
+ pdf: "PDF",
478
+ pdfFailedShort: "⚠ Falha no PDF",
479
+ editSource: "Editar fonte Markdown",
480
+ saving: "Salvando...",
481
+ applyChanges: "Aplicar alterações",
482
+ cancel: "Cancelar",
483
+ saveFailed: "Falha ao salvar: {error}",
484
+ saveError: "⚠ {error}",
485
+ copyLabel: "Copiar",
486
+ copiedLabel: "Copiado!",
487
+ },
488
+ pluginTextResponse: {
489
+ pdf: "PDF",
490
+ pdfFailed: "⚠ Falha no PDF",
491
+ editContent: "Editar conteúdo de texto",
492
+ applyChanges: "Aplicar alterações",
493
+ copyLabel: "Copiar",
494
+ copiedLabel: "Copiado!",
495
+ cancel: "Cancelar",
496
+ },
497
+ pluginSpreadsheet: {
498
+ previewLabel: "📊 Planilha",
499
+ previewUntitled: "Planilha",
500
+ previewSheets: "{count} aba | {count} abas",
501
+ untitled: "Planilha",
502
+ excel: "Excel",
503
+ valuePlaceholder: "Valor",
504
+ valueOrFormulaPlaceholder: "Valor ou Fórmula (ex.: 100 ou SUM(B2:B11))",
505
+ formatPlaceholder: "Formato (ex.: $#,##0.00)",
506
+ loading: "Carregando planilha...",
507
+ noData: "Nenhum dado de planilha disponível",
508
+ editData: "Editar dados da planilha",
509
+ applyChanges: "Aplicar alterações",
510
+ update: "Atualizar",
511
+ stringType: "Texto",
512
+ formulaType: "Fórmula",
513
+ },
514
+ app: {
515
+ // Slots `<i18n-t>` — os nomes `envKey` / `envFile` renderizam como
516
+ // `<code>` inline no App.vue, então os literais de variável e nome
517
+ // de arquivo permanecem não traduzidos.
518
+ geminiRequired: "A geração de imagens requer {envKey}. Adicione-o a {envFile} e reinicie o app.",
519
+ startConversation: "Iniciar uma conversa",
520
+ },
521
+ suggestionsPanel: {
522
+ suggestions: "Sugestões",
523
+ sendEditHint: "clique para enviar · shift+clique para editar",
524
+ },
525
+ settingsToolsTab: {
526
+ // Renderizado via <i18n-t> com slots nomeados `allowedTools` e
527
+ // `claudeMcp` para que as tags `<code>` inline mantenham seu estilo
528
+ // enquanto o texto é traduzível.
529
+ explanation:
530
+ "Nomes adicionais de ferramentas a serem passados ao Claude via {allowedTools}. Um por linha. Útil para servidores MCP integrados ao Claude Code como Gmail / Google Calendar após autenticar via {claudeMcp}.",
531
+ },
532
+ };
533
+
534
+ export default ptBRMessages;