mulmoclaude 0.3.0 → 0.5.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.
- package/bin/mulmoclaude.js +7 -24
- package/client/assets/html2canvas-Cx501zZr-DiKaqnKs.js +5 -0
- package/client/assets/{index-eHWB79u5.js → index-C94GcmNa.js} +203 -198
- package/client/assets/index-CY-WpQUm.css +2 -0
- package/client/assets/{index.es-D4YyL_Dg-BfRHLTZV.js → index.es-D4YyL_Dg-5ipqh8Pe.js} +5 -5
- package/client/assets/material-symbols-outlined-NzYEeyps.woff2 +0 -0
- package/client/index.html +2 -4
- package/package.json +17 -15
- package/server/agent/attachmentConverter.ts +2 -2
- package/server/agent/backend/claude-code.ts +170 -0
- package/server/agent/backend/index.ts +14 -0
- package/server/agent/backend/types.ts +65 -0
- package/server/agent/index.ts +31 -159
- package/server/agent/mcp-server.ts +88 -10
- package/server/agent/mcp-tools/index.ts +8 -7
- package/server/agent/mcp-tools/notify.ts +76 -0
- package/server/agent/mcp-tools/x.ts +12 -2
- package/server/agent/plugin-names.ts +10 -4
- package/server/agent/prompt.ts +187 -26
- package/server/agent/resumeFailover.ts +5 -5
- package/server/agent/sandboxMounts.ts +3 -3
- package/server/api/auth/bearerAuth.ts +3 -3
- package/server/api/auth/token.ts +2 -2
- package/server/api/routes/agent.ts +99 -4
- package/server/api/routes/chart.ts +13 -0
- package/server/api/routes/chat-index.ts +2 -1
- package/server/api/routes/config.ts +35 -8
- package/server/api/routes/files.ts +75 -24
- package/server/api/routes/html.ts +15 -2
- package/server/api/routes/image.ts +75 -20
- package/server/api/routes/mulmo-script.ts +33 -31
- package/server/api/routes/news.ts +146 -0
- package/server/api/routes/notifications.ts +58 -2
- package/server/api/routes/pdf.ts +2 -2
- package/server/api/routes/plugins.ts +73 -91
- package/server/api/routes/presentHtml.ts +9 -0
- package/server/api/routes/roles.ts +12 -2
- package/server/api/routes/scheduler.ts +20 -11
- package/server/api/routes/schedulerTasks.ts +58 -21
- package/server/api/routes/sessions.ts +15 -4
- package/server/api/routes/sessionsCursor.ts +4 -4
- package/server/api/routes/skills.ts +26 -5
- package/server/api/routes/sources.ts +8 -7
- package/server/api/routes/todos.ts +30 -0
- package/server/api/routes/todosColumnsHandlers.ts +13 -27
- package/server/api/routes/todosHandlers.ts +1 -1
- package/server/api/routes/todosItemsHandlers.ts +14 -14
- package/server/api/routes/wiki/frontmatter.ts +86 -0
- package/server/api/routes/wiki.ts +335 -75
- package/server/api/sandboxStatus.ts +1 -1
- package/server/events/notifications.ts +32 -8
- package/server/events/pub-sub/index.ts +3 -3
- package/server/events/relay-client.ts +26 -16
- package/server/events/resolveRelayBridgeOptions.ts +125 -0
- package/server/index.ts +72 -49
- package/server/system/config.ts +5 -5
- package/server/system/credentials.ts +7 -5
- package/server/system/env.ts +15 -5
- package/server/system/macosNotify.ts +152 -0
- package/server/utils/errors.ts +11 -2
- package/server/utils/fetch.ts +54 -0
- package/server/utils/files/atomic.ts +18 -17
- package/server/utils/files/image-store.ts +19 -13
- package/server/utils/files/journal-io.ts +2 -2
- package/server/utils/files/json.ts +5 -5
- package/server/utils/files/markdown-image-fill.ts +131 -0
- package/server/utils/files/markdown-store.ts +22 -6
- package/server/utils/files/naming.ts +20 -10
- package/server/utils/files/reference-dirs-io.ts +3 -3
- package/server/utils/files/roles-io.ts +4 -4
- package/server/utils/files/safe.ts +14 -14
- package/server/utils/files/scheduler-overrides-io.ts +2 -2
- package/server/utils/files/spreadsheet-store.ts +15 -10
- package/server/utils/files/workspace-io.ts +12 -12
- package/server/utils/gemini.ts +30 -4
- package/server/utils/gitignore.ts +9 -9
- package/server/utils/id.ts +40 -8
- package/server/utils/json.ts +5 -5
- package/server/utils/logBackgroundError.ts +12 -3
- package/server/utils/logPreview.ts +24 -0
- package/server/utils/markdown.ts +5 -5
- package/server/utils/port.d.mts +6 -0
- package/server/utils/port.mjs +48 -0
- package/server/utils/promptMeta.ts +32 -0
- package/server/utils/request.ts +12 -6
- package/server/utils/slug.ts +65 -4
- package/server/utils/spawn.ts +1 -1
- package/server/utils/types.ts +2 -2
- package/server/workspace/chat-index/index.ts +1 -1
- package/server/workspace/chat-index/summarizer.ts +5 -5
- package/server/workspace/custom-dirs.ts +5 -5
- package/server/workspace/helps/gemini.md +57 -0
- package/server/workspace/helps/index.md +2 -1
- package/server/workspace/helps/sources.md +42 -0
- package/server/workspace/helps/wiki.md +40 -5
- package/server/workspace/journal/archivist-cli.ts +121 -0
- package/server/workspace/journal/{archivist.ts → archivist-schemas.ts} +12 -120
- package/server/workspace/journal/dailyPass.ts +78 -38
- package/server/workspace/journal/diff.ts +2 -2
- package/server/workspace/journal/index.ts +56 -5
- package/server/workspace/journal/memoryExtractor.ts +1 -1
- package/server/workspace/journal/optimizationPass.ts +4 -5
- package/server/workspace/journal/paths.ts +8 -24
- package/server/workspace/journal/state.ts +18 -8
- package/server/workspace/news/reader.ts +248 -0
- package/server/workspace/paths.ts +4 -3
- package/server/workspace/reference-dirs.ts +3 -3
- package/server/workspace/skills/parser.ts +6 -6
- package/server/workspace/skills/scheduler.ts +5 -4
- package/server/workspace/skills/user-tasks.ts +3 -2
- package/server/workspace/skills/writer.ts +3 -3
- package/server/workspace/sources/arxivDiscovery.ts +2 -2
- package/server/workspace/sources/classifier.ts +1 -1
- package/server/workspace/sources/fetchers/rss.ts +5 -5
- package/server/workspace/sources/fetchers/rssParser.ts +4 -4
- package/server/workspace/sources/interests.ts +3 -3
- package/server/workspace/sources/paths.ts +6 -6
- package/server/workspace/sources/pipeline/fetch.ts +59 -13
- package/server/workspace/sources/pipeline/index.ts +59 -7
- package/server/workspace/sources/pipeline/notify.ts +13 -5
- package/server/workspace/sources/pipeline/plan.ts +11 -9
- package/server/workspace/sources/pipeline/summarize.ts +1 -1
- package/server/workspace/sources/pipeline/write.ts +5 -5
- package/server/workspace/sources/rateLimiter.ts +1 -1
- package/server/workspace/sources/sourceState.ts +9 -4
- package/server/workspace/sources/types.ts +9 -0
- package/server/workspace/sources/urls.ts +1 -1
- package/server/workspace/tool-trace/classify.ts +4 -4
- package/server/workspace/workspace.ts +7 -7
- package/src/App.vue +477 -251
- package/src/components/CanvasViewToggle.vue +12 -10
- package/src/components/ChatInput.vue +112 -105
- package/src/components/FileContentHeader.vue +10 -7
- package/src/components/FileContentRenderer.vue +37 -10
- package/src/components/FileTree.vue +34 -4
- package/src/components/FileTreePane.vue +32 -27
- package/src/components/FilesView.vue +5 -3
- package/src/components/FilterChip.vue +22 -0
- package/src/components/LockStatusPopup.vue +19 -13
- package/src/components/NewsView.vue +252 -0
- package/src/components/NotificationBell.vue +35 -9
- package/src/components/NotificationToast.vue +4 -1
- package/src/components/PageChatComposer.vue +101 -0
- package/src/components/PluginLauncher.vue +36 -62
- package/src/components/RightSidebar.vue +13 -10
- package/src/components/RoleSelector.vue +3 -2
- package/src/components/SessionHeaderControls.vue +63 -0
- package/src/components/SessionHistoryExpandButton.vue +30 -0
- package/src/components/SessionHistoryPanel.vue +64 -93
- package/src/components/SessionHistoryToggleButton.vue +40 -0
- package/src/components/SessionRoleIcon.vue +72 -0
- package/src/components/SessionSidebar.vue +96 -0
- package/src/components/SessionTabBar.vue +44 -51
- package/src/components/SettingsMcpTab.vue +361 -52
- package/src/components/SettingsModal.vue +203 -72
- package/src/components/SettingsReferenceDirsTab.vue +72 -51
- package/src/components/SettingsWorkspaceDirsTab.vue +74 -51
- package/src/components/SidebarHeader.vue +50 -16
- package/src/components/SourcesManager.vue +900 -0
- package/src/components/SourcesView.vue +45 -0
- package/src/components/StackView.vue +84 -48
- package/src/components/SuggestionsPanel.vue +25 -36
- package/src/components/SystemFileBanner.vue +106 -0
- package/src/components/ThinkingIndicator.vue +41 -0
- package/src/components/TodoExplorer.vue +72 -22
- package/src/components/todo/TodoAddDialog.vue +17 -12
- package/src/components/todo/TodoEditDialog.vue +7 -2
- package/src/components/todo/TodoEditPanel.vue +15 -10
- package/src/components/todo/TodoKanbanView.vue +16 -6
- package/src/components/todo/TodoListView.vue +14 -3
- package/src/components/todo/TodoTableView.vue +36 -5
- package/src/composables/favicon/conditions.ts +76 -0
- package/src/composables/favicon/resolveColor.ts +93 -0
- package/src/composables/favicon/types.ts +61 -0
- package/src/composables/useAppApi.ts +23 -0
- package/src/composables/useChatScroll.ts +5 -5
- package/src/composables/useCurrentRole.ts +32 -0
- package/src/composables/useDynamicFavicon.ts +174 -58
- package/src/composables/useEventListeners.ts +7 -12
- package/src/composables/useFaviconState.ts +93 -12
- package/src/composables/useFileSelection.ts +25 -6
- package/src/composables/useHealth.ts +76 -7
- package/src/composables/useLayoutMode.ts +27 -0
- package/src/composables/useNewsItems.ts +38 -0
- package/src/composables/useNewsReadState.ts +75 -0
- package/src/composables/useNotifications.ts +76 -13
- package/src/composables/usePendingCalls.ts +11 -1
- package/src/composables/useRoles.ts +6 -10
- package/src/composables/useRunElapsed.ts +80 -0
- package/src/composables/useSessionDerived.ts +21 -5
- package/src/composables/useSessionHistory.ts +7 -17
- package/src/composables/useSidePanelVisible.ts +25 -0
- package/src/composables/useViewLayout.ts +16 -37
- package/src/config/apiRoutes.ts +19 -6
- package/src/config/historyFilters.ts +30 -0
- package/src/config/mcpCatalog.ts +285 -0
- package/src/config/mcpTypes.ts +26 -0
- package/src/config/roles.ts +19 -51
- package/src/config/systemFileDescriptors.ts +170 -0
- package/src/config/toolNames.ts +6 -1
- package/src/config/workspacePaths.ts +1 -0
- package/src/index.css +14 -0
- package/src/lang/de.ts +706 -0
- package/src/lang/en.ts +726 -0
- package/src/lang/es.ts +712 -0
- package/src/lang/fr.ts +704 -0
- package/src/lang/ja.ts +707 -0
- package/src/lang/ko.ts +709 -0
- package/src/lang/pt-BR.ts +702 -0
- package/src/lang/zh.ts +705 -0
- package/src/lib/vue-i18n.ts +97 -0
- package/src/main.ts +3 -0
- package/src/plugins/canvas/View.vue +104 -186
- package/src/plugins/canvas/definition.ts +0 -8
- package/src/plugins/canvas/index.ts +3 -2
- package/src/plugins/chart/Preview.vue +1 -1
- package/src/plugins/chart/View.vue +9 -4
- package/src/plugins/chart/index.ts +3 -2
- package/src/plugins/editImage/index.ts +3 -2
- package/src/plugins/generateImage/index.ts +3 -2
- package/src/plugins/manageRoles/Preview.vue +4 -1
- package/src/plugins/manageRoles/View.vue +67 -46
- package/src/plugins/manageRoles/index.ts +3 -2
- package/src/plugins/manageSkills/Preview.vue +8 -3
- package/src/plugins/manageSkills/View.vue +39 -34
- package/src/plugins/manageSkills/index.ts +3 -2
- package/src/plugins/manageSource/Preview.vue +1 -1
- package/src/plugins/manageSource/View.vue +3 -687
- package/src/plugins/manageSource/index.ts +3 -2
- package/src/plugins/markdown/Preview.vue +1 -1
- package/src/plugins/markdown/View.vue +164 -73
- package/src/plugins/markdown/definition.ts +6 -4
- package/src/plugins/markdown/index.ts +3 -2
- package/src/plugins/presentForm/Preview.vue +99 -0
- package/src/plugins/presentForm/View.vue +675 -0
- package/src/plugins/presentForm/definition.ts +127 -0
- package/src/plugins/presentForm/index.ts +18 -0
- package/src/plugins/presentForm/plugin.ts +94 -0
- package/src/plugins/presentForm/types.ts +109 -0
- package/src/plugins/presentHtml/Preview.vue +1 -1
- package/src/plugins/presentHtml/View.vue +7 -4
- package/src/plugins/presentHtml/index.ts +3 -2
- package/src/plugins/presentMulmoScript/Preview.vue +1 -1
- package/src/plugins/presentMulmoScript/View.vue +36 -26
- package/src/plugins/presentMulmoScript/index.ts +3 -2
- package/src/plugins/scheduler/AutomationsPreview.vue +37 -0
- package/src/plugins/scheduler/AutomationsView.vue +23 -0
- package/src/plugins/scheduler/CalendarView.vue +23 -0
- package/src/plugins/scheduler/LegacySchedulerView.vue +32 -0
- package/src/plugins/scheduler/Preview.vue +7 -4
- package/src/plugins/scheduler/TasksTab.vue +119 -28
- package/src/plugins/scheduler/View.vue +75 -32
- package/src/plugins/scheduler/automationsDefinition.ts +58 -0
- package/src/plugins/scheduler/calendarDefinition.ts +46 -0
- package/src/plugins/scheduler/formatSchedule.ts +93 -0
- package/src/plugins/scheduler/index.ts +68 -14
- package/src/plugins/scheduler/legacyShape.ts +34 -0
- package/src/plugins/spreadsheet/Preview.vue +9 -5
- package/src/plugins/spreadsheet/View.vue +43 -57
- package/src/plugins/spreadsheet/engine/responseDecoder.ts +2 -1
- package/src/plugins/spreadsheet/index.ts +3 -2
- package/src/plugins/textResponse/Preview.vue +15 -58
- package/src/plugins/textResponse/View.vue +42 -45
- package/src/plugins/textResponse/utils.ts +25 -0
- package/src/plugins/todo/Preview.vue +11 -6
- package/src/plugins/todo/View.vue +27 -13
- package/src/plugins/todo/composables/useTodos.ts +3 -1
- package/src/plugins/todo/index.ts +3 -2
- package/src/plugins/ui-image/ImagePreview.vue +6 -3
- package/src/plugins/ui-image/ImageView.vue +7 -4
- package/src/plugins/wiki/Preview.vue +5 -2
- package/src/plugins/wiki/View.vue +539 -92
- package/src/plugins/wiki/index.ts +5 -2
- package/src/plugins/wiki/route.ts +121 -0
- package/src/router/guards.ts +43 -24
- package/src/router/index.ts +53 -26
- package/src/router/pageRoutes.ts +23 -0
- package/src/tools/index.ts +12 -5
- package/src/tools/legacyPluginNames.ts +13 -0
- package/src/types/notification.ts +31 -6
- package/src/types/vue-i18n.d.ts +20 -0
- package/src/utils/agent/eventDispatch.ts +3 -6
- package/src/utils/agent/formatElapsed.ts +37 -0
- package/src/utils/agent/request.ts +22 -1
- package/src/utils/canvas/layoutMode.ts +26 -0
- package/src/utils/canvas/sidePanelVisible.ts +19 -0
- package/src/utils/dom/scrollIntoViewByTestId.ts +38 -0
- package/src/utils/errors.ts +9 -2
- package/src/utils/files/filename.ts +24 -0
- package/src/utils/filesPreview/schedulerPreview.ts +9 -3
- package/src/utils/id.ts +18 -0
- package/src/utils/image/cacheBust.ts +16 -0
- package/src/utils/image/resolve.ts +16 -0
- package/src/utils/markdown/taskList.ts +175 -0
- package/src/utils/mcp/interpolateSpec.ts +97 -0
- package/src/utils/notification/dispatch.ts +51 -15
- package/src/utils/path/workspaceLinkRouter.ts +99 -0
- package/src/utils/session/mergeSessions.ts +5 -0
- package/src/utils/sources/filter.ts +69 -0
- package/src/vite-env.d.ts +9 -0
- package/client/assets/chunk-vKJrgz-R-C_I3GbVV.js +0 -1
- package/client/assets/html2canvas-Cx501zZr-BF5dYYkY.js +0 -5
- package/client/assets/index-Bm70FDU2.css +0 -1
- package/client/assets/typeof-DBp4T-Ny-BC0P-2DM.js +0 -1
- package/server/workspace/journal/linkRewrite.ts +0 -4
- package/src/components/ToolResultsPanel.vue +0 -77
- package/src/composables/useCanvasViewMode.ts +0 -121
- package/src/plugins/scheduler/definition.ts +0 -57
- package/src/utils/canvas/viewMode.ts +0 -46
- package/src/utils/role/plugins.ts +0 -12
- package/src/utils/session/seedRoleDefault.ts +0 -35
- /package/client/assets/{purify.es-Fx1Nqyry-PeS5RUhs.js → purify.es-Fx1Nqyry-BwJECkqS.js} +0 -0
package/src/lang/en.ts
ADDED
|
@@ -0,0 +1,726 @@
|
|
|
1
|
+
// English dictionary for vue-i18n.
|
|
2
|
+
//
|
|
3
|
+
// Structure is grouped by feature area (common, chat, session, ...).
|
|
4
|
+
// Prefer nested objects over flat keys so related strings stay
|
|
5
|
+
// together and the namespace serves as self-documentation.
|
|
6
|
+
|
|
7
|
+
// No `as const` — the module augmentation in src/types/vue-i18n.d.ts
|
|
8
|
+
// reads `typeof en` to feed `DefineLocaleMessage`, and readonly literal
|
|
9
|
+
// types would conflict with vue-i18n's writable message interface.
|
|
10
|
+
|
|
11
|
+
// ⚠️ Angle-bracket text (e.g. `<name>`, `</tag>`) in a plain string
|
|
12
|
+
// message trips vue-i18n's XSS heuristic and logs
|
|
13
|
+
// `[intlify] Detected HTML in '…' message` on every mount. If the
|
|
14
|
+
// copy must contain `<...>`, use the **function form** so the
|
|
15
|
+
// message compiler is skipped entirely:
|
|
16
|
+
//
|
|
17
|
+
// subheading: ({ named }: { named: (key: string) => unknown }) =>
|
|
18
|
+
// `${named("count")} available · invokes as /<name>`,
|
|
19
|
+
//
|
|
20
|
+
// See `argsPlaceholder` and `pluginManageSkills.subheading` for
|
|
21
|
+
// worked examples. Mirror the same form in every other lang file
|
|
22
|
+
// when the English side uses a function.
|
|
23
|
+
|
|
24
|
+
const enMessages = {
|
|
25
|
+
common: {
|
|
26
|
+
save: "Save",
|
|
27
|
+
cancel: "Cancel",
|
|
28
|
+
loading: "Loading...",
|
|
29
|
+
close: "Close",
|
|
30
|
+
dismiss: "Dismiss",
|
|
31
|
+
add: "Add",
|
|
32
|
+
remove: "Remove",
|
|
33
|
+
saving: "Saving...",
|
|
34
|
+
saved: "Saved",
|
|
35
|
+
noResultsYet: "No results yet",
|
|
36
|
+
noImageYet: "No image yet",
|
|
37
|
+
sendChat: "Start a new chat",
|
|
38
|
+
},
|
|
39
|
+
sessionTabBar: {
|
|
40
|
+
newSession: "New session",
|
|
41
|
+
// vue-i18n pluralization: `t(key, count)` picks singular / plural
|
|
42
|
+
// based on the number. `{count}` is interpolated.
|
|
43
|
+
activeSessions: "{count} active session (agent running) | {count} active sessions (agent running)",
|
|
44
|
+
unreadReplies: "{count} unread reply | {count} unread replies",
|
|
45
|
+
unreadDot: "New reply",
|
|
46
|
+
origin: {
|
|
47
|
+
scheduler: "Started by scheduler",
|
|
48
|
+
skill: "Started by skill",
|
|
49
|
+
bridge: "Started by bridge",
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
chatInput: {
|
|
53
|
+
placeholder: "Type a task, or drop / paste / attach a file…",
|
|
54
|
+
send: "Send",
|
|
55
|
+
attachFile: "Attach file",
|
|
56
|
+
fileTooLarge: "File too large ({sizeMB} MB). Maximum is 30 MB.",
|
|
57
|
+
unsupportedFileType: "File type not supported. Accepted: images, PDF, DOCX, XLSX, PPTX, text files.",
|
|
58
|
+
},
|
|
59
|
+
sessionHistoryPanel: {
|
|
60
|
+
filters: {
|
|
61
|
+
all: "All",
|
|
62
|
+
unread: "Unread",
|
|
63
|
+
human: "Human",
|
|
64
|
+
scheduler: "Scheduler",
|
|
65
|
+
skill: "Skill",
|
|
66
|
+
bridge: "Bridge",
|
|
67
|
+
},
|
|
68
|
+
failedToRefresh: "⚠ Failed to refresh: {error}",
|
|
69
|
+
showingLastKnown: " — showing last known list.",
|
|
70
|
+
noSessions: "No sessions yet.",
|
|
71
|
+
noMatching: "No matching sessions.",
|
|
72
|
+
running: "Running",
|
|
73
|
+
noMessages: "(no messages)",
|
|
74
|
+
openRowAria: "Open session: {preview}",
|
|
75
|
+
},
|
|
76
|
+
notificationBell: {
|
|
77
|
+
notifications: "Notifications",
|
|
78
|
+
markAllRead: "Mark all read",
|
|
79
|
+
noNotifications: "No notifications",
|
|
80
|
+
dismiss: "Dismiss",
|
|
81
|
+
},
|
|
82
|
+
sidebarHeader: {
|
|
83
|
+
home: "Go to latest chat",
|
|
84
|
+
toolCallHistory: "Tool call history",
|
|
85
|
+
settings: "Settings",
|
|
86
|
+
settingsGeminiMissing: "Settings — Gemini API key missing",
|
|
87
|
+
},
|
|
88
|
+
rightSidebar: {
|
|
89
|
+
toggleSystemPrompt: "Toggle system prompt",
|
|
90
|
+
systemPrompt: "System Prompt",
|
|
91
|
+
availableTools: "Available Tools",
|
|
92
|
+
toggleToolDescription: "Toggle tool description",
|
|
93
|
+
toolCallHistory: "Tool Call History",
|
|
94
|
+
noToolCalls: "No tool calls yet",
|
|
95
|
+
arguments: "Arguments",
|
|
96
|
+
error: "Error",
|
|
97
|
+
result: "Result",
|
|
98
|
+
running: "Running...",
|
|
99
|
+
},
|
|
100
|
+
fileTreePane: {
|
|
101
|
+
sort: "Sort:",
|
|
102
|
+
sortByName: "Sort by name",
|
|
103
|
+
name: "Name",
|
|
104
|
+
sortByRecent: "Sort by modified date (newest first)",
|
|
105
|
+
recent: "Recent",
|
|
106
|
+
reference: "Reference",
|
|
107
|
+
// "RO" = Read-Only. Kept short on purpose — rendered as a compact
|
|
108
|
+
// badge next to the Reference label.
|
|
109
|
+
readOnlyBadge: "RO",
|
|
110
|
+
},
|
|
111
|
+
fileTree: {
|
|
112
|
+
workspace: "(workspace)",
|
|
113
|
+
recentlyChanged: "Recently changed",
|
|
114
|
+
},
|
|
115
|
+
lockStatusPopup: {
|
|
116
|
+
sandboxEnabledTooltip: "Sandbox enabled (Docker)",
|
|
117
|
+
noSandboxTooltip: "No sandbox (Docker not found)",
|
|
118
|
+
sandboxEnabledLabel: "Sandbox enabled:",
|
|
119
|
+
sandboxEnabledBody: "Docker is running. Filesystem access is isolated.",
|
|
120
|
+
noSandboxLabel: "No sandbox:",
|
|
121
|
+
noSandboxBodyPrefix: "Claude can access all files on your machine. Install",
|
|
122
|
+
noSandboxBodySuffix: "to enable filesystem isolation.",
|
|
123
|
+
dockerDesktop: "Docker Desktop",
|
|
124
|
+
hostCredentials: "Host credentials attached:",
|
|
125
|
+
credsLoading: "loading…",
|
|
126
|
+
sshAgent: "SSH agent:",
|
|
127
|
+
forwarded: "forwarded",
|
|
128
|
+
notForwarded: "not forwarded",
|
|
129
|
+
mountedConfigs: "Mounted configs:",
|
|
130
|
+
none: "none",
|
|
131
|
+
testIsolation: "Test sandbox isolation:",
|
|
132
|
+
},
|
|
133
|
+
settingsModal: {
|
|
134
|
+
title: "Settings",
|
|
135
|
+
tabs: {
|
|
136
|
+
gemini: "Gemini API Key",
|
|
137
|
+
tools: "Allowed Tools",
|
|
138
|
+
mcp: "MCP Servers",
|
|
139
|
+
dirs: "Directories",
|
|
140
|
+
refs: "Reference Dirs",
|
|
141
|
+
},
|
|
142
|
+
// `<i18n-t>` slots — named `envKey` / `envFile` render as inline
|
|
143
|
+
// `<code>` in SettingsModal.vue, so the literal variable and file
|
|
144
|
+
// names stay untranslated while the surrounding copy is localised.
|
|
145
|
+
geminiRequired: "Image generation requires {envKey}. Add it to {envFile} and restart the app.",
|
|
146
|
+
geminiAskButton: "Ask Claude",
|
|
147
|
+
geminiAskMessage: "What is the role of the Gemini API key in this app?",
|
|
148
|
+
toolNamesLabel: "Tool names",
|
|
149
|
+
invalidToolNamesPrefix: "These look non-standard (expected prefix",
|
|
150
|
+
invalidToolNamesSuffix: "):",
|
|
151
|
+
mcpToolsError: "⚠ Could not fetch MCP tool status: {error}. Showing all tools regardless of enablement.",
|
|
152
|
+
changesHint: "Changes apply on the next message. No restart needed.",
|
|
153
|
+
cannotSaveTooltip: "Cannot save until settings load successfully",
|
|
154
|
+
saving: "Saving…",
|
|
155
|
+
loadingLabel: "Loading…",
|
|
156
|
+
unsavedMarker: "●",
|
|
157
|
+
unsavedToolsConfirm: "Allowed Tools has unsaved changes. Close anyway?",
|
|
158
|
+
unsavedMcpDraftConfirm: "An MCP server draft is still open. Close anyway?",
|
|
159
|
+
mcpSaveFailed: "Failed to save MCP server changes.",
|
|
160
|
+
},
|
|
161
|
+
canvasViewToggle: {
|
|
162
|
+
stackViewTooltip: "Stack view · click to switch to Single",
|
|
163
|
+
singleViewTooltip: "Single view · click to switch to Stack",
|
|
164
|
+
switchToSingle: "Switch to Single view",
|
|
165
|
+
switchToStack: "Switch to Stack view",
|
|
166
|
+
},
|
|
167
|
+
sessionHistoryToggle: {
|
|
168
|
+
showTooltip: "Show session history panel on the left",
|
|
169
|
+
hideTooltip: "Hide session history panel",
|
|
170
|
+
show: "Show session history",
|
|
171
|
+
hide: "Hide session history",
|
|
172
|
+
},
|
|
173
|
+
sessionHistoryExpand: {
|
|
174
|
+
expandTooltip: "Expand session history panel to full width",
|
|
175
|
+
collapseTooltip: "Collapse session history panel",
|
|
176
|
+
expand: "Expand session history",
|
|
177
|
+
collapse: "Collapse session history",
|
|
178
|
+
},
|
|
179
|
+
settingsWorkspaceDirs: {
|
|
180
|
+
explanation: "Custom directories for organizing files under {dataDir} and {artifactsDir}. Claude uses these to route file saves.",
|
|
181
|
+
noEntries: "No custom directories configured.",
|
|
182
|
+
addDirTitle: "Add directory",
|
|
183
|
+
pathPlaceholder: "data/clients or artifacts/reports",
|
|
184
|
+
descPlaceholder: "Description (what goes in this folder)",
|
|
185
|
+
errPathRequired: "Path required",
|
|
186
|
+
errMustStartWith: "Must start with data/ or artifacts/",
|
|
187
|
+
errAlreadyExists: "Already exists",
|
|
188
|
+
},
|
|
189
|
+
settingsReferenceDirs: {
|
|
190
|
+
explanation:
|
|
191
|
+
"External directories Claude can read but not modify. In Docker mode, these are mounted read-only. Useful for referencing Obsidian vaults, project code, or document folders.",
|
|
192
|
+
noEntries: "No reference directories configured.",
|
|
193
|
+
addDirTitle: "Add reference directory",
|
|
194
|
+
pathPlaceholder: "/Users/me/ObsidianVault or ~/Documents/notes",
|
|
195
|
+
labelPlaceholder: "Label (optional — defaults to folder name)",
|
|
196
|
+
readOnlyBadge: "read-only",
|
|
197
|
+
errPathRequired: "Path required",
|
|
198
|
+
errMustBeAbsolute: "Must be an absolute path or start with ~/",
|
|
199
|
+
errAlreadyExists: "Already exists",
|
|
200
|
+
errLabelConflict: 'Label "{label}" already exists',
|
|
201
|
+
},
|
|
202
|
+
pluginLauncher: {
|
|
203
|
+
todos: { label: "Todos", title: "Open todos" },
|
|
204
|
+
calendar: { label: "Calendar", title: "Open calendar" },
|
|
205
|
+
automations: { label: "Actions", title: "Open actions" },
|
|
206
|
+
wiki: { label: "Wiki", title: "Open wiki" },
|
|
207
|
+
sources: { label: "Sources", title: "Open information sources" },
|
|
208
|
+
news: { label: "News", title: "Open news viewer" },
|
|
209
|
+
skills: { label: "Skills", title: "Open skills" },
|
|
210
|
+
roles: { label: "Roles", title: "Open roles" },
|
|
211
|
+
files: { label: "Files", title: "Open workspace files" },
|
|
212
|
+
},
|
|
213
|
+
fileContentHeader: {
|
|
214
|
+
showRendered: "Show rendered Markdown",
|
|
215
|
+
showRaw: "Show raw source",
|
|
216
|
+
rendered: "Rendered",
|
|
217
|
+
raw: "Raw",
|
|
218
|
+
closeFile: "Close file",
|
|
219
|
+
},
|
|
220
|
+
fileContentRenderer: {
|
|
221
|
+
selectFile: "Select a file",
|
|
222
|
+
htmlPreview: "HTML preview",
|
|
223
|
+
pdfPreview: "PDF preview",
|
|
224
|
+
parseError: "parse error",
|
|
225
|
+
},
|
|
226
|
+
settingsMcpTab: {
|
|
227
|
+
explanation:
|
|
228
|
+
"Add external MCP servers. HTTP servers work in every mode. Stdio servers use the sandbox image's {npx} / {node} / {tsx}; paths must live under the workspace when Docker is enabled.",
|
|
229
|
+
localhostRewrite: "In Docker mode {localhost} is rewritten to {hostDockerInternal}.",
|
|
230
|
+
noServers: "No MCP servers configured yet.",
|
|
231
|
+
enabled: "enabled",
|
|
232
|
+
urlLabel: "URL:",
|
|
233
|
+
commandLabel: "Command:",
|
|
234
|
+
dockerNonWorkspaceWarning: "⚠ Contains paths outside the workspace — will not resolve inside Docker.",
|
|
235
|
+
addServerButton: "+ Add MCP Server",
|
|
236
|
+
nameLabel: "Name",
|
|
237
|
+
namePlaceholder: "my-server",
|
|
238
|
+
typeHttp: "HTTP",
|
|
239
|
+
typeStdio: "Stdio (command)",
|
|
240
|
+
urlFieldLabel: "URL",
|
|
241
|
+
urlPlaceholder: "https://example.com/mcp",
|
|
242
|
+
commandFieldLabel: "Command",
|
|
243
|
+
argsLabel: "Arguments (one per line)",
|
|
244
|
+
// Message function form — skips vue-i18n's message compiler so
|
|
245
|
+
// the literal `@` isn't parsed as a linked-message reference.
|
|
246
|
+
argsPlaceholder: () => "-y\n@modelcontextprotocol/server-filesystem\n/workspace/path",
|
|
247
|
+
errNoName: "Please provide a Name, or enter a URL / args we can derive one from.",
|
|
248
|
+
errBadName: "Name must start with a lowercase letter and contain only [a-z0-9_-].",
|
|
249
|
+
errIdExists: 'Server id "{id}" already exists.',
|
|
250
|
+
errBadHttpUrl: "HTTP URL must start with http:// or https://",
|
|
251
|
+
pendingEntryWarning: "Finish or cancel the pending MCP server entry first.",
|
|
252
|
+
customHeading: "Custom servers",
|
|
253
|
+
catalog: {
|
|
254
|
+
heading: "Pre-configured MCP servers",
|
|
255
|
+
audience: { general: "🟢 General", developer: "🔵 Developer" },
|
|
256
|
+
risk: { low: "low", medium: "medium", high: "high" },
|
|
257
|
+
upstream: "📦 Source",
|
|
258
|
+
setupGuide: "📚 Setup",
|
|
259
|
+
entry: {
|
|
260
|
+
memory: {
|
|
261
|
+
displayName: "Memory",
|
|
262
|
+
description: "Lets Claude remember conversation context across sessions.",
|
|
263
|
+
},
|
|
264
|
+
sequentialThinking: {
|
|
265
|
+
displayName: "Sequential Thinking",
|
|
266
|
+
description: "Helps Claude work through multi-step problems by thinking step by step.",
|
|
267
|
+
},
|
|
268
|
+
context7: {
|
|
269
|
+
displayName: "Context7 (library docs)",
|
|
270
|
+
description: "Up-to-date documentation for popular libraries — beats the model's training-cutoff memory.",
|
|
271
|
+
},
|
|
272
|
+
deepwiki: {
|
|
273
|
+
displayName: "DeepWiki (GitHub repo wiki)",
|
|
274
|
+
description: "Ask questions about any GitHub repository and get a structured wiki-style answer.",
|
|
275
|
+
},
|
|
276
|
+
notion: {
|
|
277
|
+
displayName: "Notion",
|
|
278
|
+
description: "Read and write your Notion workspace — pages, databases, and search.",
|
|
279
|
+
field: {
|
|
280
|
+
apiKey: {
|
|
281
|
+
label: "Notion integration token",
|
|
282
|
+
help: "Create a Notion integration and copy the Internal Integration Secret. Click 🔑 to open the integrations page.",
|
|
283
|
+
},
|
|
284
|
+
},
|
|
285
|
+
},
|
|
286
|
+
slack: {
|
|
287
|
+
displayName: "Slack",
|
|
288
|
+
description: "List channels, post messages, and search history in your Slack workspace.",
|
|
289
|
+
field: {
|
|
290
|
+
botToken: {
|
|
291
|
+
label: "Bot token",
|
|
292
|
+
help: "Slack app → OAuth & Permissions → Bot User OAuth Token. Starts with xoxb-.",
|
|
293
|
+
},
|
|
294
|
+
teamId: {
|
|
295
|
+
label: "Team / workspace ID",
|
|
296
|
+
help: "Run team.info or check the workspace URL — looks like T01ABC23DEF.",
|
|
297
|
+
},
|
|
298
|
+
},
|
|
299
|
+
},
|
|
300
|
+
googleMaps: {
|
|
301
|
+
displayName: "Google Maps",
|
|
302
|
+
description: "Search places, get directions, and look up location details.",
|
|
303
|
+
field: {
|
|
304
|
+
apiKey: {
|
|
305
|
+
label: "Google Maps API key",
|
|
306
|
+
help: "Google Cloud Console → APIs & Services → Credentials → Create API key. Enable Places + Directions.",
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
},
|
|
310
|
+
weatherOpenMeteo: {
|
|
311
|
+
displayName: "Weather (Open-Meteo)",
|
|
312
|
+
description: "Free weather forecasts and current conditions worldwide — no API key needed.",
|
|
313
|
+
},
|
|
314
|
+
},
|
|
315
|
+
config: {
|
|
316
|
+
howToGet: "How to get this",
|
|
317
|
+
install: "Install",
|
|
318
|
+
errMissingRequired: "Required field(s) missing: {fields}",
|
|
319
|
+
requiredMarker: "*",
|
|
320
|
+
requiredAria: "required",
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
},
|
|
324
|
+
pluginScheduler: {
|
|
325
|
+
prev: "Previous",
|
|
326
|
+
today: "Today",
|
|
327
|
+
goToday: "Go to today",
|
|
328
|
+
next: "Next",
|
|
329
|
+
deleteItem: "Delete item",
|
|
330
|
+
closeEditor: "Close editor",
|
|
331
|
+
apiError: "⚠ Failed to update scheduler: {error}",
|
|
332
|
+
tabCalendar: "Calendar",
|
|
333
|
+
tabTasks: "Tasks",
|
|
334
|
+
heading: "Scheduler",
|
|
335
|
+
itemCount: "{count} item | {count} items",
|
|
336
|
+
noScheduled: "No scheduled items",
|
|
337
|
+
unscheduled: "Unscheduled",
|
|
338
|
+
editItem: "Edit item",
|
|
339
|
+
update: "Update",
|
|
340
|
+
editSource: "Edit Source",
|
|
341
|
+
applyChanges: "Apply Changes",
|
|
342
|
+
yamlParseError: "Could not parse YAML — ensure 'title' is present",
|
|
343
|
+
propLabel: "{key}:",
|
|
344
|
+
moreCount: "+{count} more",
|
|
345
|
+
previewIcon: "📅",
|
|
346
|
+
previewUpcoming: "{count} upcoming",
|
|
347
|
+
previewAutomations: "{count} automation | {count} automations",
|
|
348
|
+
previewMore: "+ {count} more…",
|
|
349
|
+
},
|
|
350
|
+
pluginSchedulerTasks: {
|
|
351
|
+
recommendedFrequencies: "Recommended Frequencies",
|
|
352
|
+
tableTaskType: "Task type",
|
|
353
|
+
tableSuggestedSchedule: "Suggested schedule",
|
|
354
|
+
noTasks: "No scheduled tasks",
|
|
355
|
+
runNow: "Run now",
|
|
356
|
+
enable: "Enable",
|
|
357
|
+
disable: "Disable",
|
|
358
|
+
delete: "Delete",
|
|
359
|
+
nextRun: "Next: {time}",
|
|
360
|
+
originSystem: "System",
|
|
361
|
+
originUser: "User",
|
|
362
|
+
originSkill: "Skill",
|
|
363
|
+
runFailed: "Run failed: {error}",
|
|
364
|
+
toggleFailed: "Toggle failed: {error}",
|
|
365
|
+
deleteFailed: "Delete failed: {error}",
|
|
366
|
+
detailsToggle: "Show details",
|
|
367
|
+
promptLabel: "Prompt",
|
|
368
|
+
roleLabel: "Role",
|
|
369
|
+
},
|
|
370
|
+
pluginCanvas: {
|
|
371
|
+
undo: "Undo",
|
|
372
|
+
redo: "Redo",
|
|
373
|
+
clear: "Clear",
|
|
374
|
+
styleLabel: "Style:",
|
|
375
|
+
},
|
|
376
|
+
pluginChart: {
|
|
377
|
+
untitled: "Chart",
|
|
378
|
+
chartCount: "{count} chart | {count} charts",
|
|
379
|
+
chartTitle: "Chart {num}",
|
|
380
|
+
png: "PNG",
|
|
381
|
+
},
|
|
382
|
+
pluginTodo: {
|
|
383
|
+
clearFilters: "Clear all filters",
|
|
384
|
+
deleteItem: "Delete item",
|
|
385
|
+
apiError: "⚠ Failed to update todos: {error}",
|
|
386
|
+
loadFailed: "Failed to load todos",
|
|
387
|
+
heading: "Todo List",
|
|
388
|
+
completedRatio: "{done}/{total} completed",
|
|
389
|
+
filter: "Filter:",
|
|
390
|
+
noItems: "No todo items yet",
|
|
391
|
+
noMatchingFilter: "No items match the active filter",
|
|
392
|
+
update: "Update",
|
|
393
|
+
clearCompleted: "Clear completed",
|
|
394
|
+
clearButton: "Clear ✕",
|
|
395
|
+
deleteSymbol: "✕",
|
|
396
|
+
},
|
|
397
|
+
todoExplorer: {
|
|
398
|
+
heading: "Todo",
|
|
399
|
+
doneRatio: "{done}/{total} done",
|
|
400
|
+
addButton: "+ Add",
|
|
401
|
+
addColumnButton: "+ Column",
|
|
402
|
+
labels: "Labels:",
|
|
403
|
+
searchPlaceholder: "Search...",
|
|
404
|
+
clearButton: "Clear ✕",
|
|
405
|
+
clearFiltersTitle: "Clear label filters",
|
|
406
|
+
emptyHint: 'No todo items yet. Click "+ Add" to create one.',
|
|
407
|
+
addColumn: "Add Column",
|
|
408
|
+
newColumnLabelField: "Label",
|
|
409
|
+
newColumnPlaceholder: "Review",
|
|
410
|
+
noMatchingFilter: "No items match the current filter",
|
|
411
|
+
},
|
|
412
|
+
todoPreview: {
|
|
413
|
+
completedRatio: "{done}/{total} completed",
|
|
414
|
+
moreItems: "+ {count} more…",
|
|
415
|
+
headerIcon: "☑",
|
|
416
|
+
doneIcon: "✓",
|
|
417
|
+
pendingIcon: "○",
|
|
418
|
+
moreLabels: "+{count}",
|
|
419
|
+
},
|
|
420
|
+
todoDialogs: {
|
|
421
|
+
addTitle: "Add Todo",
|
|
422
|
+
editTitle: "Edit Todo",
|
|
423
|
+
deleteButton: "Delete",
|
|
424
|
+
deleteTitle: "Delete this item",
|
|
425
|
+
noneOption: "— None —",
|
|
426
|
+
fieldText: "Text",
|
|
427
|
+
fieldNote: "Note",
|
|
428
|
+
fieldStatus: "Status",
|
|
429
|
+
fieldPriority: "Priority",
|
|
430
|
+
fieldDueDate: "Due date",
|
|
431
|
+
fieldLabels: "Labels",
|
|
432
|
+
fieldLabelsCommaSeparated: "Labels (comma-separated)",
|
|
433
|
+
textPlaceholder: "What needs doing?",
|
|
434
|
+
labelsPlaceholder: "work, urgent",
|
|
435
|
+
},
|
|
436
|
+
todoKanban: {
|
|
437
|
+
rename: "Rename",
|
|
438
|
+
alreadyDoneColumn: "Already done column",
|
|
439
|
+
markAsDoneColumn: "Mark as done column",
|
|
440
|
+
deleteColumn: "Delete column",
|
|
441
|
+
columnActions: "Column actions",
|
|
442
|
+
addCard: "+ Add card",
|
|
443
|
+
openCardAria: "Open task: {task}",
|
|
444
|
+
},
|
|
445
|
+
todoTableList: {
|
|
446
|
+
noMatchingFilter: "No items match the current filter",
|
|
447
|
+
sortColumnAria: "Sort by {column}",
|
|
448
|
+
expandRowAria: "Expand task: {task}",
|
|
449
|
+
},
|
|
450
|
+
pluginWiki: {
|
|
451
|
+
backToIndex: "Back to index",
|
|
452
|
+
pdf: "PDF",
|
|
453
|
+
pdfFailed: "⚠ PDF failed",
|
|
454
|
+
tabIndex: "Index",
|
|
455
|
+
tabLog: "Log",
|
|
456
|
+
tabLint: "Lint",
|
|
457
|
+
empty: "Wiki is empty. Ask the Wiki Manager to ingest a source.",
|
|
458
|
+
previewMore: "+ {count} more…",
|
|
459
|
+
chatPlaceholder: "Ask about this page…",
|
|
460
|
+
emptyPage: 'The page "{title}" does not exist yet.',
|
|
461
|
+
emptyContent: 'The page "{title}" exists but has no content.',
|
|
462
|
+
createPage: "Request creation of this wiki page",
|
|
463
|
+
updatePage: "Request update of this wiki page",
|
|
464
|
+
tagFilterAll: "All",
|
|
465
|
+
noMatches: "No pages tagged #{tag}",
|
|
466
|
+
lintChat: "Lint My Wiki",
|
|
467
|
+
taskCountMismatch: "Wiki source and rendered output disagree on the number of tasks. Refusing to toggle to avoid corruption.",
|
|
468
|
+
},
|
|
469
|
+
pluginPresentForm: {
|
|
470
|
+
fallbackTitle: "Form",
|
|
471
|
+
fieldCount: "{count} field | {count} fields",
|
|
472
|
+
submitted: "Submitted",
|
|
473
|
+
errorSummary: "Please fix the following errors",
|
|
474
|
+
requiredMarker: "*",
|
|
475
|
+
selectOption: "Select an option",
|
|
476
|
+
charactersCount: "{current} / {max} characters",
|
|
477
|
+
charactersCountNoMax: "{current} characters",
|
|
478
|
+
submit: "Submit",
|
|
479
|
+
progress: "{filled} of {total} required fields completed",
|
|
480
|
+
},
|
|
481
|
+
pluginPresentHtml: {
|
|
482
|
+
saveAsPdf: "Save as PDF (opens print dialog)",
|
|
483
|
+
pdf: "PDF",
|
|
484
|
+
untitled: "HTML Page",
|
|
485
|
+
hideSource: "Hide Source <>",
|
|
486
|
+
showSource: "Show Source <>",
|
|
487
|
+
},
|
|
488
|
+
pluginNews: {
|
|
489
|
+
title: "News",
|
|
490
|
+
itemCount: "{unread} unread / {total} total",
|
|
491
|
+
filterAll: "All",
|
|
492
|
+
filterUnread: "Unread",
|
|
493
|
+
allSources: "All",
|
|
494
|
+
markAllRead: "Mark all read",
|
|
495
|
+
selectPrompt: "Select an item to read.",
|
|
496
|
+
empty: "No news in this view.",
|
|
497
|
+
unread: "Unread",
|
|
498
|
+
openOriginal: "Open original",
|
|
499
|
+
noBody: "No body available — open the original article.",
|
|
500
|
+
bodyError: "Failed to load body: {error}",
|
|
501
|
+
loadError: "Failed to load news: {error}",
|
|
502
|
+
chatPlaceholder: "Ask anything about this article",
|
|
503
|
+
},
|
|
504
|
+
pluginManageSource: {
|
|
505
|
+
titlePlaceholder: "Title (optional)",
|
|
506
|
+
heading: "Information sources",
|
|
507
|
+
chatPlaceholder: "Ask about your information sources…",
|
|
508
|
+
sourceCount: "{count} source | {count} sources",
|
|
509
|
+
addButton: "Add",
|
|
510
|
+
rebuildNow: "Rebuild now",
|
|
511
|
+
rebuilding: "Rebuilding…",
|
|
512
|
+
typeField: "Type",
|
|
513
|
+
addingLabel: "Adding…",
|
|
514
|
+
addAndRebuild: "Add + Rebuild",
|
|
515
|
+
emptyPickPack: "No sources registered yet. Pick a starter pack below, click {addBold} above, or ask Claude to register one.",
|
|
516
|
+
emptyAddStrong: "+ Add",
|
|
517
|
+
registering: "Registering + fetching…",
|
|
518
|
+
removeLabel: "Remove",
|
|
519
|
+
removingLabel: "Removing…",
|
|
520
|
+
todaysBrief: "Today's brief",
|
|
521
|
+
todaysBriefLoading: "Loading today's brief…",
|
|
522
|
+
briefNone: "No brief written for this date yet. Click Rebuild now.",
|
|
523
|
+
briefEmpty: "Today's brief is empty.",
|
|
524
|
+
briefLoadFailed: "Failed to load brief",
|
|
525
|
+
lastRebuildSummary: "Last rebuild ({date}): {itemCount} items from {planned} sources, {duplicates} duplicates dropped.",
|
|
526
|
+
archiveErrorsSuffix: "({count} archive errors)",
|
|
527
|
+
kindRss: "RSS",
|
|
528
|
+
kindGithubRel: "GitHub rel",
|
|
529
|
+
kindGithubIss: "GitHub iss",
|
|
530
|
+
kindArxiv: "arXiv",
|
|
531
|
+
kindGithubReleases: "GitHub releases",
|
|
532
|
+
kindGithubIssues: "GitHub issues",
|
|
533
|
+
briefDateLabel: "({date})",
|
|
534
|
+
primaryRssPlaceholder: "https://news.ycombinator.com/rss",
|
|
535
|
+
primaryGithubPlaceholder: "https://github.com/owner/repo (or owner/repo)",
|
|
536
|
+
primaryArxivPlaceholder: "cat:cs.CL",
|
|
537
|
+
primaryRssHint: "Feed URL (RSS 2.0 / Atom / RDF)",
|
|
538
|
+
primaryGithubRelHint: "GitHub repo URL or owner/repo — fetches releases",
|
|
539
|
+
primaryGithubIssHint: "GitHub repo URL or owner/repo — fetches issues",
|
|
540
|
+
primaryArxivHint: "arXiv search query (e.g. cat:cs.CL or au:hinton)",
|
|
541
|
+
confirmRemove: 'Remove source "{slug}"?',
|
|
542
|
+
flashRegistered: "Registered. Fetching new items…",
|
|
543
|
+
flashRebuildReady: "Ready: {itemCount} items from {planned} source.|Ready: {itemCount} items from {planned} sources.",
|
|
544
|
+
flashRebuildComplete: "Rebuild complete: {itemCount} items from {planned} sources.",
|
|
545
|
+
flashRebuildFailed: "Rebuild failed: {error}",
|
|
546
|
+
flashRegisterFailed: "Failed to register source",
|
|
547
|
+
flashRegisterSucceededRebuildFailed: "Register succeeded but rebuild failed: {error}",
|
|
548
|
+
flashRemoved: 'Removed "{slug}".',
|
|
549
|
+
flashRemoveFailed: "Remove failed: {error}",
|
|
550
|
+
flashRefreshListFailed: "Failed to refresh sources: {error}",
|
|
551
|
+
flashPresetAlreadyRegistered: 'All sources in "{label}" are already registered.',
|
|
552
|
+
flashPresetRegistered: 'Registered {count} source from "{label}". Fetching…|Registered {count} sources from "{label}". Fetching…',
|
|
553
|
+
flashPresetPartial: "Registered {ok}/{total}. Errors: {errors}",
|
|
554
|
+
errPrimaryRequired: "Please fill in the URL / query field.",
|
|
555
|
+
errRssUrlProtocol: "RSS feed URL must start with http:// or https://",
|
|
556
|
+
errRssUrlInvalid: "RSS feed URL is not a valid URL.",
|
|
557
|
+
errRssUrlHost: "RSS feed URL must include a host.",
|
|
558
|
+
errGithubInvalid: "Enter a GitHub repo URL (https://github.com/owner/repo) or owner/repo.",
|
|
559
|
+
errUnsupportedKind: "Unsupported fetcher kind.",
|
|
560
|
+
initialLoading: "Loading sources…",
|
|
561
|
+
initialLoadFailed: "Failed to load sources.",
|
|
562
|
+
retryLabel: "Retry",
|
|
563
|
+
filter: {
|
|
564
|
+
all: "All",
|
|
565
|
+
rss: "RSS",
|
|
566
|
+
github: "GitHub",
|
|
567
|
+
arxiv: "arXiv",
|
|
568
|
+
scheduleDaily: "Daily",
|
|
569
|
+
scheduleWeekly: "Weekly",
|
|
570
|
+
scheduleManual: "Manual",
|
|
571
|
+
noMatching: "No sources match the current filter.",
|
|
572
|
+
clearFilter: "Clear filter",
|
|
573
|
+
},
|
|
574
|
+
},
|
|
575
|
+
pluginManageSkills: {
|
|
576
|
+
deleteProjectSkill: "Delete this project-scope skill",
|
|
577
|
+
heading: "Skills",
|
|
578
|
+
previewCount: "{count} skill | {count} skills",
|
|
579
|
+
previewMore: "+{count} more",
|
|
580
|
+
// Function form skips vue-i18n's message compiler, which
|
|
581
|
+
// otherwise flags the literal `<name>` as a suspected HTML
|
|
582
|
+
// fragment and warns about XSS on every mount.
|
|
583
|
+
subheading: ({ named }: { named: (key: string) => unknown }) => `${named("count")} available · click one to view · "Run" invokes it as /<name>`,
|
|
584
|
+
emptyWithPath: "No skills found. Add skill folders under {path}.",
|
|
585
|
+
emptySkillPath: "~/.claude/skills/",
|
|
586
|
+
selectHint: "Select a skill on the left to view its SKILL.md.",
|
|
587
|
+
loading: "Loading…",
|
|
588
|
+
fieldDescription: "Description",
|
|
589
|
+
fieldBody: "Body (Markdown)",
|
|
590
|
+
emptyBody: "(empty body)",
|
|
591
|
+
btnEdit: "Edit",
|
|
592
|
+
btnDelete: "Delete",
|
|
593
|
+
btnRun: "Run",
|
|
594
|
+
errListFailed: "Failed to load skills: {error}",
|
|
595
|
+
errDetailFailed: "Failed to load skill: {error}",
|
|
596
|
+
errSaveFailed: "Save failed: {error}",
|
|
597
|
+
errDeleteFailed: "Failed to delete",
|
|
598
|
+
confirmDelete: 'Delete skill "{name}"? This removes ~/mulmoclaude/.claude/skills/{name}/SKILL.md.',
|
|
599
|
+
},
|
|
600
|
+
pluginManageRoles: {
|
|
601
|
+
heading: "Custom Roles",
|
|
602
|
+
roleCount: "{count} role | {count} roles",
|
|
603
|
+
previewCount: "{count} custom role | {count} custom roles",
|
|
604
|
+
addButton: "+ Add",
|
|
605
|
+
createPanel: "Create new role",
|
|
606
|
+
fieldId: "ID",
|
|
607
|
+
fieldName: "Name",
|
|
608
|
+
fieldIcon: "Icon",
|
|
609
|
+
fieldPrompt: "Prompt",
|
|
610
|
+
fieldPlugins: "Plugins",
|
|
611
|
+
fieldStarterQueries: "Starter queries",
|
|
612
|
+
onePerLine: "(one per line)",
|
|
613
|
+
helpLink: "?",
|
|
614
|
+
idFormatted: "({id})",
|
|
615
|
+
missingEnv: "(missing {env})",
|
|
616
|
+
requiresEnv: "Requires {env} in .env",
|
|
617
|
+
collapse: "Collapse",
|
|
618
|
+
expand: "Expand",
|
|
619
|
+
idPlaceholder: "unique-id",
|
|
620
|
+
creating: "Creating…",
|
|
621
|
+
create: "Create",
|
|
622
|
+
updating: "Updating…",
|
|
623
|
+
update: "Update",
|
|
624
|
+
cancel: "Cancel",
|
|
625
|
+
delete: "Delete",
|
|
626
|
+
emptyHint: 'No custom roles yet. Click "+ Add" or ask Claude to create one.',
|
|
627
|
+
errIdRequired: "ID is required.",
|
|
628
|
+
errIdInvalid: "ID may only contain letters, numbers, '-' and '_'.",
|
|
629
|
+
errNameRequired: "Name is required.",
|
|
630
|
+
errIdDuplicate: "A role with ID '{id}' already exists.",
|
|
631
|
+
errCreateFailed: "Create failed",
|
|
632
|
+
errSaveFailed: "Save failed",
|
|
633
|
+
errDeleteFailed: "Delete failed",
|
|
634
|
+
errNetworkError: "Network error",
|
|
635
|
+
errServerError: "Server error: {status}",
|
|
636
|
+
},
|
|
637
|
+
pluginUiImage: {
|
|
638
|
+
promptLabel: "{label}:",
|
|
639
|
+
},
|
|
640
|
+
pluginMulmoScript: {
|
|
641
|
+
beatCount: "{count} beat | {count} beats",
|
|
642
|
+
movie: "Movie",
|
|
643
|
+
generating: "Generating…",
|
|
644
|
+
rendering: "Rendering…",
|
|
645
|
+
saving: "Saving…",
|
|
646
|
+
update: "Update",
|
|
647
|
+
characters: "Characters",
|
|
648
|
+
drop: "Drop",
|
|
649
|
+
gen: "Gen",
|
|
650
|
+
play: "▶ Play",
|
|
651
|
+
stop: "■ Stop",
|
|
652
|
+
errPrefix: "⚠ Error",
|
|
653
|
+
noBeats: "No beats found in script",
|
|
654
|
+
editSource: "Edit Script Source",
|
|
655
|
+
applyChanges: "Apply Changes",
|
|
656
|
+
generateAll: "Generate All",
|
|
657
|
+
orDropImage: "or drop image",
|
|
658
|
+
generate: "Generate",
|
|
659
|
+
generateAudio: "♪ Generate",
|
|
660
|
+
saveErrorInvalidJson: "⚠ Invalid JSON: {error}",
|
|
661
|
+
saveErrorSaveFailed: "⚠ Save failed: {error}",
|
|
662
|
+
},
|
|
663
|
+
pluginMarkdown: {
|
|
664
|
+
loading: "Loading document...",
|
|
665
|
+
loadFailed: "⚠ Failed to load document: {error}",
|
|
666
|
+
refreshFailed: "⚠ Failed to refresh document: {error} — showing last successfully loaded content.",
|
|
667
|
+
noContent: "No markdown content available",
|
|
668
|
+
pdf: "PDF",
|
|
669
|
+
pdfFailedShort: "⚠ PDF failed",
|
|
670
|
+
editSource: "Edit Markdown Source",
|
|
671
|
+
saving: "Saving...",
|
|
672
|
+
applyChanges: "Apply Changes",
|
|
673
|
+
cancel: "Cancel",
|
|
674
|
+
saveFailed: "Save failed: {error}",
|
|
675
|
+
saveError: "⚠ Save failed: {error}",
|
|
676
|
+
copyLabel: "Copy",
|
|
677
|
+
copiedLabel: "Copied!",
|
|
678
|
+
taskCountMismatch: "Markdown source and rendered output disagree on the number of tasks. Refusing to toggle to avoid corruption.",
|
|
679
|
+
},
|
|
680
|
+
pluginTextResponse: {
|
|
681
|
+
pdf: "PDF",
|
|
682
|
+
pdfFailed: "⚠ PDF failed",
|
|
683
|
+
editContent: "Edit Text Content",
|
|
684
|
+
applyChanges: "Apply Changes",
|
|
685
|
+
copyLabel: "Copy",
|
|
686
|
+
copiedLabel: "Copied!",
|
|
687
|
+
cancel: "Cancel",
|
|
688
|
+
},
|
|
689
|
+
pluginSpreadsheet: {
|
|
690
|
+
previewUntitled: "Spreadsheet",
|
|
691
|
+
previewSheets: "{count} sheet | {count} sheets",
|
|
692
|
+
untitled: "Spreadsheet",
|
|
693
|
+
excel: "Excel",
|
|
694
|
+
valuePlaceholder: "Value",
|
|
695
|
+
valueOrFormulaPlaceholder: "Value or Formula (e.g., 100 or SUM(B2:B11))",
|
|
696
|
+
formatPlaceholder: "Format (e.g., $#,##0.00)",
|
|
697
|
+
loading: "Loading spreadsheet...",
|
|
698
|
+
noData: "No spreadsheet data available",
|
|
699
|
+
editData: "Edit Spreadsheet Data",
|
|
700
|
+
applyChanges: "Apply Changes",
|
|
701
|
+
dataMustBeArray: "Data must be an array of sheets",
|
|
702
|
+
loadFailed: "Failed to load spreadsheet: {error}",
|
|
703
|
+
invalidJsonAlert: "Invalid JSON format: {error}",
|
|
704
|
+
unknownError: "Unknown error",
|
|
705
|
+
update: "Update",
|
|
706
|
+
stringType: "String",
|
|
707
|
+
formulaType: "Formula",
|
|
708
|
+
},
|
|
709
|
+
app: {
|
|
710
|
+
startConversation: "Start a conversation",
|
|
711
|
+
thinking: "Thinking…",
|
|
712
|
+
},
|
|
713
|
+
suggestionsPanel: {
|
|
714
|
+
suggestions: "Suggestions",
|
|
715
|
+
sendEditHint: "click to send · shift+click to edit",
|
|
716
|
+
},
|
|
717
|
+
settingsToolsTab: {
|
|
718
|
+
// Rendered via <i18n-t> with named slots `allowedTools` and `claudeMcp`
|
|
719
|
+
// so the inline `<code>` tags keep their styling while the copy
|
|
720
|
+
// is translatable.
|
|
721
|
+
explanation:
|
|
722
|
+
"Extra tool names to pass to Claude via {allowedTools}. One per line. Useful for built-in Claude Code MCP servers like Gmail / Google Calendar after you have authenticated via {claudeMcp}.",
|
|
723
|
+
},
|
|
724
|
+
};
|
|
725
|
+
|
|
726
|
+
export default enMessages;
|