mulmoclaude 0.6.4 → 0.7.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 (302) hide show
  1. package/bin/mulmoclaude.js +1 -1
  2. package/client/assets/{html2canvas-CDGcmOD3-XVrO-eyz.js → html2canvas-CDGcmOD3-CKJ6vKPo.js} +1 -1
  3. package/client/assets/{index-zZIqEbNX.js → index-BG_JJcKI.js} +193 -197
  4. package/client/assets/index-DCoo3kpR.css +2 -0
  5. package/client/assets/{index.es-DqtpmBm8-DHT6q10o.js → index.es-DqtpmBm8-DFXjJgCa.js} +1 -1
  6. package/client/assets/lib-Dpph7PBN.js +114 -0
  7. package/client/assets/marp-cCGismx0.js +3452 -0
  8. package/client/assets/schemas-DuYzyHQc.js +64 -0
  9. package/client/index.html +5 -4
  10. package/package.json +7 -5
  11. package/server/agent/backend/claude-code.ts +44 -10
  12. package/server/agent/backend/fake-echo.ts +5 -1
  13. package/server/agent/config.ts +49 -12
  14. package/server/agent/mcp-server.ts +13 -2
  15. package/server/agent/mcp-tools/handlePermission.ts +115 -0
  16. package/server/agent/mcp-tools/index.ts +2 -1
  17. package/server/agent/mcp-tools/x.ts +18 -2
  18. package/server/agent/prompt.ts +3 -45
  19. package/server/api/csrfGuard.ts +122 -32
  20. package/server/api/routes/collections.ts +320 -0
  21. package/server/api/routes/config.ts +45 -0
  22. package/server/api/routes/feeds.ts +70 -0
  23. package/server/api/routes/files.ts +167 -0
  24. package/server/api/routes/marp-themes.ts +15 -0
  25. package/server/api/routes/mulmo-script.ts +139 -0
  26. package/server/api/routes/pdf.ts +108 -0
  27. package/server/api/routes/plugins.ts +10 -0
  28. package/server/api/routes/shortcuts.ts +49 -0
  29. package/server/api/routes/wiki.ts +35 -0
  30. package/server/build/dispatcher.mjs +40 -22
  31. package/server/events/notifications.ts +14 -9
  32. package/server/index.ts +49 -14
  33. package/server/plugins/preset-list.ts +18 -10
  34. package/server/plugins/preset-loader.ts +11 -4
  35. package/server/prompts/index.ts +1 -3
  36. package/server/prompts/system/system.md +7 -2
  37. package/server/system/env.ts +14 -0
  38. package/server/utils/clientDir.ts +7 -0
  39. package/server/utils/files/index.ts +0 -2
  40. package/server/utils/files/shortcuts-io.ts +63 -0
  41. package/server/utils/slug.ts +3 -4
  42. package/server/workspace/billing-migration.ts +69 -0
  43. package/server/workspace/collections/delete.ts +186 -0
  44. package/server/workspace/collections/discovery.ts +730 -0
  45. package/server/workspace/collections/index.ts +23 -0
  46. package/server/workspace/collections/io.ts +287 -0
  47. package/server/workspace/collections/notifications.ts +404 -0
  48. package/server/workspace/collections/paths.ts +125 -0
  49. package/server/workspace/collections/spawn.ts +213 -0
  50. package/server/workspace/collections/templatePath.ts +36 -0
  51. package/server/workspace/collections/types.ts +334 -0
  52. package/server/workspace/collections/watcher.ts +398 -0
  53. package/server/workspace/feeds/engine.ts +135 -0
  54. package/server/workspace/feeds/fetch/httpClient.ts +127 -0
  55. package/server/workspace/feeds/fetch/rssParser.ts +117 -0
  56. package/server/workspace/feeds/index.ts +8 -0
  57. package/server/workspace/feeds/ingestTypes.ts +66 -0
  58. package/server/workspace/feeds/pathResolver.ts +74 -0
  59. package/server/workspace/feeds/paths.ts +30 -0
  60. package/server/workspace/feeds/projectItem.ts +92 -0
  61. package/server/workspace/feeds/registry.ts +43 -0
  62. package/server/workspace/feeds/retrievers/httpJson.ts +19 -0
  63. package/server/workspace/feeds/retrievers/index.ts +27 -0
  64. package/server/workspace/feeds/retrievers/registerAll.ts +5 -0
  65. package/server/workspace/feeds/retrievers/rss.ts +24 -0
  66. package/server/workspace/feeds/state.ts +55 -0
  67. package/server/workspace/helps/billing-clients-worklog.md +215 -0
  68. package/server/workspace/helps/billing-invoice.md +457 -0
  69. package/server/workspace/helps/collection-skills.md +664 -0
  70. package/server/workspace/helps/feeds.md +110 -0
  71. package/server/workspace/helps/index.md +9 -3
  72. package/server/workspace/helps/portfolio-tracker.md +211 -0
  73. package/server/workspace/helps/presentation-deck.md +828 -0
  74. package/server/workspace/helps/todo-collection.md +140 -0
  75. package/server/workspace/helps/vocabulary.md +106 -0
  76. package/server/workspace/hooks/handlers/skillBridge.ts +101 -40
  77. package/server/workspace/marp-themes.ts +46 -0
  78. package/server/workspace/paths.ts +46 -11
  79. package/server/workspace/skills-preset/mc-manage-skills/SKILL.md +13 -0
  80. package/server/workspace/skills-preset/mc-wiki-deep-lint/SKILL.md +108 -0
  81. package/server/workspace/skills-preset/mc-wiki-health-check/SKILL.md +61 -0
  82. package/server/workspace/skills-preset/mc-wiki-ingest/SKILL.md +182 -0
  83. package/server/workspace/skills-preset/mc-wiki-promote/SKILL.md +175 -0
  84. package/server/workspace/skills-preset.ts +376 -2
  85. package/server/workspace/wiki-pages/io.ts +34 -2
  86. package/server/workspace/workspace.ts +20 -1
  87. package/src/App.vue +70 -41
  88. package/src/components/BackendOfflineBanner.vue +56 -0
  89. package/src/components/ChatInput.vue +72 -6
  90. package/src/components/CollectionCalendarView.vue +243 -0
  91. package/src/components/CollectionDashboardView.vue +181 -0
  92. package/src/components/CollectionDayView.vue +308 -0
  93. package/src/components/CollectionEmbedView.vue +69 -0
  94. package/src/components/CollectionKanbanView.vue +196 -0
  95. package/src/components/CollectionRecordModal.vue +93 -0
  96. package/src/components/CollectionRecordPanel.vue +567 -0
  97. package/src/components/CollectionView.vue +1748 -0
  98. package/src/components/CollectionsIndexView.vue +152 -0
  99. package/src/components/ConfirmModal.vue +344 -0
  100. package/src/components/FeedsView.vue +225 -0
  101. package/src/components/FileContentRenderer.vue +122 -30
  102. package/src/components/FileTree.vue +218 -2
  103. package/src/components/FileTreePane.vue +2 -0
  104. package/src/components/FilesView.vue +95 -17
  105. package/src/components/PinToggle.vue +52 -0
  106. package/src/components/PluginLauncher.vue +97 -37
  107. package/src/components/RightSidebar.vue +74 -3
  108. package/src/components/RolesView.vue +1 -1
  109. package/src/components/SettingsModal.vue +146 -72
  110. package/src/components/SlashCommandMenu.vue +56 -0
  111. package/src/components/StackView.vue +128 -48
  112. package/src/components/collectionEmbed.ts +29 -0
  113. package/src/components/collectionTypes.ts +177 -0
  114. package/src/composables/collections/useCollectionRendering.ts +350 -0
  115. package/src/composables/useConfirm.ts +70 -0
  116. package/src/composables/useFileTree.ts +35 -3
  117. package/src/composables/useImeAwareEnter.ts +14 -0
  118. package/src/composables/usePdfDownload.ts +6 -1
  119. package/src/composables/useShortcuts.ts +163 -0
  120. package/src/composables/useSlashCommandMenu.ts +138 -0
  121. package/src/config/apiRoutes.ts +46 -13
  122. package/src/config/createFilePolicy.ts +82 -0
  123. package/src/config/roles.ts +46 -47
  124. package/src/config/systemFileDescriptors.ts +0 -30
  125. package/src/config/toolNames.ts +1 -5
  126. package/src/config/workspacePaths.ts +4 -9
  127. package/src/lang/de.ts +154 -221
  128. package/src/lang/en.ts +153 -218
  129. package/src/lang/es.ts +154 -219
  130. package/src/lang/fr.ts +155 -221
  131. package/src/lang/index.ts +55 -0
  132. package/src/lang/ja.ts +153 -219
  133. package/src/lang/ko.ts +153 -218
  134. package/src/lang/pt-BR.ts +154 -219
  135. package/src/lang/zh.ts +152 -218
  136. package/src/lib/vue-i18n.ts +15 -45
  137. package/src/lib/wiki-page/graph.ts +108 -0
  138. package/src/main.ts +2 -5
  139. package/src/plugins/_generated/metas.ts +2 -8
  140. package/src/plugins/_generated/registrations.ts +2 -4
  141. package/src/plugins/_generated/server-bindings.ts +5 -12
  142. package/src/plugins/manageSkills/View.vue +36 -68
  143. package/src/plugins/manageSkills/presetDetection.ts +25 -0
  144. package/src/plugins/markdown/MarpView.vue +301 -0
  145. package/src/plugins/markdown/Preview.vue +26 -3
  146. package/src/plugins/markdown/View.vue +230 -1
  147. package/src/plugins/markdown/definition.ts +21 -1
  148. package/src/plugins/presentCollection/Preview.vue +30 -0
  149. package/src/plugins/presentCollection/View.vue +78 -0
  150. package/src/plugins/presentCollection/definition.ts +30 -0
  151. package/src/plugins/presentCollection/index.ts +25 -0
  152. package/src/plugins/presentCollection/meta.ts +15 -0
  153. package/src/plugins/presentCollection/plugin.ts +39 -0
  154. package/src/plugins/presentCollection/types.ts +13 -0
  155. package/src/plugins/presentForm/View.vue +56 -6
  156. package/src/plugins/presentForm/types.ts +3 -3
  157. package/src/plugins/presentMulmoScript/View.vue +252 -5
  158. package/src/plugins/presentMulmoScript/helpers.ts +18 -0
  159. package/src/plugins/presentMulmoScript/meta.ts +11 -0
  160. package/src/plugins/scheduler/AutomationsView.vue +13 -11
  161. package/src/plugins/scheduler/automationsDefinition.ts +7 -10
  162. package/src/plugins/scheduler/automationsMeta.ts +27 -0
  163. package/src/plugins/scheduler/index.ts +19 -38
  164. package/src/plugins/wiki/View.vue +120 -27
  165. package/src/plugins/wiki/components/WikiGraphView.vue +75 -0
  166. package/src/plugins/wiki/components/WikiPageBody.vue +18 -0
  167. package/src/plugins/wiki/index.ts +6 -0
  168. package/src/plugins/wiki/route.ts +8 -1
  169. package/src/router/index.ts +31 -34
  170. package/src/router/pageRoutes.ts +2 -7
  171. package/src/tools/types.ts +4 -3
  172. package/src/types/notification.ts +5 -9
  173. package/src/types/session.ts +11 -0
  174. package/src/types/shortcuts.ts +37 -0
  175. package/src/utils/agent/eventDispatch.ts +4 -0
  176. package/src/utils/api.ts +47 -1
  177. package/src/utils/canvas/stackGrouping.ts +96 -0
  178. package/src/utils/chat/permalink.ts +20 -0
  179. package/src/utils/collections/actionVisible.ts +55 -0
  180. package/src/utils/collections/calendarGrid.ts +328 -0
  181. package/src/utils/collections/collectionViewMode.ts +42 -0
  182. package/src/utils/collections/derivedFormula.ts +364 -0
  183. package/src/utils/collections/draft.ts +160 -0
  184. package/src/utils/collections/enumColors.ts +130 -0
  185. package/src/utils/collections/itemLabel.ts +42 -0
  186. package/src/utils/confirmDelete.ts +13 -0
  187. package/src/utils/markdown/marpAspect.ts +28 -0
  188. package/src/utils/markdown/marpCustomSize.ts +120 -0
  189. package/src/utils/markdown/marpDetect.ts +15 -0
  190. package/src/utils/markdown/marpTheme.ts +109 -0
  191. package/src/utils/markdown/wikiEmbedHandlers.ts +1 -1
  192. package/src/utils/path/workspaceLinkRouter.ts +126 -9
  193. package/src/utils/session/sessionEntries.ts +1 -0
  194. package/src/utils/session/sessionFactory.ts +1 -0
  195. package/src/utils/session/sessionHelpers.ts +6 -1
  196. package/client/assets/index-CyBr8Mkr.css +0 -2
  197. package/server/api/routes/encore.ts +0 -55
  198. package/server/api/routes/news.ts +0 -133
  199. package/server/api/routes/sources.ts +0 -550
  200. package/server/encore/INVARIANTS.md +0 -272
  201. package/server/encore/boot.ts +0 -39
  202. package/server/encore/closure.ts +0 -36
  203. package/server/encore/cycle.ts +0 -276
  204. package/server/encore/dispatch.ts +0 -103
  205. package/server/encore/handlers/amend.ts +0 -99
  206. package/server/encore/handlers/appendNote.ts +0 -74
  207. package/server/encore/handlers/defineEncore.ts +0 -42
  208. package/server/encore/handlers/listTickets.ts +0 -107
  209. package/server/encore/handlers/markStepDone.ts +0 -41
  210. package/server/encore/handlers/markTargetSkipped.ts +0 -33
  211. package/server/encore/handlers/query.ts +0 -138
  212. package/server/encore/handlers/recordValues.ts +0 -44
  213. package/server/encore/handlers/resolveNotification.ts +0 -121
  214. package/server/encore/handlers/setup.ts +0 -81
  215. package/server/encore/handlers/shared.ts +0 -137
  216. package/server/encore/handlers/snooze.ts +0 -87
  217. package/server/encore/handlers/startObligationChat.ts +0 -64
  218. package/server/encore/handlers/startSetupChat.ts +0 -50
  219. package/server/encore/lock.ts +0 -61
  220. package/server/encore/notifier.ts +0 -123
  221. package/server/encore/obligation.ts +0 -25
  222. package/server/encore/paths.ts +0 -78
  223. package/server/encore/reconcile.ts +0 -661
  224. package/server/encore/tick.ts +0 -191
  225. package/server/encore/yaml-fm.ts +0 -63
  226. package/server/prompts/system/news-concierge.md +0 -24
  227. package/server/prompts/system/sources-context.md +0 -16
  228. package/server/utils/files/encore-io.ts +0 -111
  229. package/server/workspace/helps/encore-dsl.md +0 -482
  230. package/server/workspace/helps/sources.md +0 -42
  231. package/server/workspace/news/reader.ts +0 -247
  232. package/server/workspace/skills-preset/mc-manage-sources/SKILL.md +0 -106
  233. package/server/workspace/sources/arxivDiscovery.ts +0 -182
  234. package/server/workspace/sources/classifier.ts +0 -268
  235. package/server/workspace/sources/fetchers/arxiv.ts +0 -170
  236. package/server/workspace/sources/fetchers/github.ts +0 -106
  237. package/server/workspace/sources/fetchers/githubIssues.ts +0 -210
  238. package/server/workspace/sources/fetchers/githubReleases.ts +0 -186
  239. package/server/workspace/sources/fetchers/index.ts +0 -71
  240. package/server/workspace/sources/fetchers/registerAll.ts +0 -15
  241. package/server/workspace/sources/fetchers/rss.ts +0 -141
  242. package/server/workspace/sources/fetchers/rssParser.ts +0 -295
  243. package/server/workspace/sources/httpFetcher.ts +0 -230
  244. package/server/workspace/sources/interests.ts +0 -120
  245. package/server/workspace/sources/paths.ts +0 -110
  246. package/server/workspace/sources/pipeline/dedup.ts +0 -60
  247. package/server/workspace/sources/pipeline/fetch.ts +0 -182
  248. package/server/workspace/sources/pipeline/index.ts +0 -301
  249. package/server/workspace/sources/pipeline/notify.ts +0 -80
  250. package/server/workspace/sources/pipeline/plan.ts +0 -68
  251. package/server/workspace/sources/pipeline/summarize.ts +0 -189
  252. package/server/workspace/sources/pipeline/write.ts +0 -185
  253. package/server/workspace/sources/rateLimiter.ts +0 -148
  254. package/server/workspace/sources/registry.ts +0 -304
  255. package/server/workspace/sources/robots.ts +0 -271
  256. package/server/workspace/sources/sourceState.ts +0 -142
  257. package/server/workspace/sources/taxonomy.ts +0 -74
  258. package/server/workspace/sources/types.ts +0 -153
  259. package/server/workspace/sources/urls.ts +0 -112
  260. package/src/components/NewsView.vue +0 -267
  261. package/src/components/SourcesManager.vue +0 -915
  262. package/src/components/SourcesView.vue +0 -45
  263. package/src/components/TodoExplorer.vue +0 -423
  264. package/src/components/todo/TodoAddDialog.vue +0 -135
  265. package/src/components/todo/TodoEditDialog.vue +0 -51
  266. package/src/components/todo/TodoEditPanel.vue +0 -117
  267. package/src/components/todo/TodoKanbanView.vue +0 -290
  268. package/src/components/todo/TodoListView.vue +0 -88
  269. package/src/components/todo/TodoTableView.vue +0 -210
  270. package/src/composables/useNewsItems.ts +0 -38
  271. package/src/composables/useNewsReadState.ts +0 -75
  272. package/src/plugins/encore/EncoreDashboard.vue +0 -504
  273. package/src/plugins/encore/EncoreRedirect.vue +0 -116
  274. package/src/plugins/encore/View.vue +0 -36
  275. package/src/plugins/encore/defineEncoreDefinition.ts +0 -74
  276. package/src/plugins/encore/defineEncoreMeta.ts +0 -13
  277. package/src/plugins/encore/index.ts +0 -93
  278. package/src/plugins/encore/manageEncoreDefinition.ts +0 -100
  279. package/src/plugins/encore/manageEncoreMeta.ts +0 -36
  280. package/src/plugins/manageSource/Preview.vue +0 -33
  281. package/src/plugins/manageSource/View.vue +0 -13
  282. package/src/plugins/manageSource/definition.ts +0 -66
  283. package/src/plugins/manageSource/index.ts +0 -75
  284. package/src/plugins/manageSource/meta.ts +0 -21
  285. package/src/plugins/scheduler/CalendarView.vue +0 -23
  286. package/src/plugins/scheduler/Preview.vue +0 -73
  287. package/src/plugins/scheduler/View.vue +0 -608
  288. package/src/plugins/scheduler/calendarDefinition.ts +0 -47
  289. package/src/plugins/scheduler/calendarMeta.ts +0 -28
  290. package/src/plugins/scheduler/multiDayHelpers.ts +0 -95
  291. package/src/plugins/scheduler/viewModes.ts +0 -26
  292. package/src/types/encore-dsl/at-expression.ts +0 -120
  293. package/src/types/encore-dsl/at-resolver.ts +0 -32
  294. package/src/types/encore-dsl/cadence.ts +0 -289
  295. package/src/types/encore-dsl/schema.ts +0 -288
  296. package/src/utils/filesPreview/schedulerPreview.ts +0 -44
  297. package/src/utils/filesPreview/todoPreview.ts +0 -51
  298. package/src/utils/sources/filter.ts +0 -69
  299. /package/client/assets/{JsonEditor-D6WBWLoa.js → JsonEditor-C_RDoefj.js} +0 -0
  300. /package/client/assets/{chunk-D8eiyYIV-LcKZGJv5.js → chunk-D8eiyYIV-BY16KEZc.js} +0 -0
  301. /package/client/assets/{purify.es-Fx1Nqyry-Dwtk-9WZ.js → purify.es-Fx1Nqyry-BufT4RJl.js} +0 -0
  302. /package/client/assets/{typeof-DBp4T-Ny-CSr8wx1e.js → typeof-DBp4T-Ny-z2wCIsir.js} +0 -0
package/src/lang/en.ts CHANGED
@@ -30,6 +30,8 @@ const enMessages = {
30
30
  dismiss: "Dismiss",
31
31
  add: "Add",
32
32
  remove: "Remove",
33
+ yes: "Yes",
34
+ no: "No",
33
35
  saving: "Saving...",
34
36
  saved: "Saved",
35
37
  noResultsYet: "No results yet",
@@ -52,10 +54,12 @@ const enMessages = {
52
54
  chatInput: {
53
55
  placeholder: "Message Claude…",
54
56
  send: "Send",
57
+ stop: "Stop",
55
58
  attachFile: "Attach file",
56
59
  fileTooLarge: "File too large ({sizeMB} MB). Maximum is 30 MB.",
57
60
  unsupportedFileType: "File type not supported. Accepted: images, PDF, DOCX, XLSX, PPTX, text files.",
58
61
  attachImageFailed: "Failed to attach image: {error}",
62
+ stopFailed: "Failed to stop the run: {error}",
59
63
  dropHint: "Drop file to attach",
60
64
  },
61
65
  sessionHistoryPanel: {
@@ -108,6 +112,15 @@ const enMessages = {
108
112
  notFound: "{command} not found — related features are disabled. Install {command} and restart MulmoClaude to enable them.",
109
113
  notResponding: "{command} is installed but not running — related features are disabled. Start {command} and restart MulmoClaude to enable them.",
110
114
  },
115
+ billingMigration: {
116
+ title: "Invoicing moved to on-demand setup",
117
+ body: "The bundled clients, worklog, invoice, and profile collections were removed from your dashboard, but your data is safe and untouched. Ask to set up client & time tracking, then invoicing, to recreate them — your existing records will reappear.",
118
+ },
119
+ backendOffline: {
120
+ title: "Can't reach the backend",
121
+ body: "The MulmoClaude server may not be running. Check the dev server, then retry.",
122
+ retry: "Retry",
123
+ },
111
124
  pluginErrorBoundary: {
112
125
  title: "Plugin {pkg} crashed",
113
126
  subtitle: "The plugin failed to render. The error has been logged to the console.",
@@ -127,11 +140,16 @@ const enMessages = {
127
140
  copiedMarkdown: "Copied!",
128
141
  },
129
142
  rightSidebar: {
143
+ permalink: "Selected message permalink",
144
+ copyPermalink: "Copy permalink to selected message",
145
+ copiedPermalink: "Copied!",
130
146
  toggleSystemPrompt: "Toggle system prompt",
131
147
  systemPrompt: "System Prompt",
132
148
  availableTools: "Available Tools",
133
149
  toggleToolDescription: "Toggle tool description",
134
150
  toolCallHistory: "Tool Call History",
151
+ copyHistory: "Copy tool call history",
152
+ copiedHistory: "Copied!",
135
153
  noToolCalls: "No tool calls yet",
136
154
  arguments: "Arguments",
137
155
  error: "Error",
@@ -157,6 +175,21 @@ const enMessages = {
157
175
  fileTree: {
158
176
  workspace: "(workspace)",
159
177
  recentlyChanged: "Recently changed",
178
+ newFileMenuItem: "New file",
179
+ newFileInputAria: "New file name",
180
+ newFilePlaceholder: {
181
+ wikiPage: "page-slug",
182
+ summary: "summary-name",
183
+ document: "document-name",
184
+ html: "page-name",
185
+ story: "story-name",
186
+ },
187
+ newFileError: {
188
+ empty: "Filename can't be empty.",
189
+ unsafe: "Filename contains invalid characters.",
190
+ exists: "A file named {filename} already exists here.",
191
+ saveFailed: "Couldn't create the file. Please try again.",
192
+ },
160
193
  },
161
194
  lockStatusPopup: {
162
195
  sandboxEnabledTooltip: "Sandbox enabled (Docker)",
@@ -188,12 +221,15 @@ const enMessages = {
188
221
  map: "Map",
189
222
  photos: "Photos",
190
223
  model: "Model",
224
+ skills: "Skills",
225
+ roles: "Roles",
191
226
  },
192
227
  groups: {
193
228
  llm: "LLM",
194
229
  servers: "Servers",
195
230
  workspace: "Workspace",
196
231
  plugins: "Plugins",
232
+ management: "Management",
197
233
  },
198
234
  navAriaLabel: "Settings sections",
199
235
  mapTab: {
@@ -290,43 +326,16 @@ const enMessages = {
290
326
  errLabelConflict: 'Label "{label}" already exists',
291
327
  },
292
328
  pluginLauncher: {
293
- todos: { label: "Todos" },
294
- calendar: { label: "Calendar" },
295
329
  automations: { label: "Actions" },
296
- encore: { label: "Encore" },
297
330
  wiki: { label: "Wiki" },
298
- sources: { label: "Sources" },
299
- news: { label: "News" },
300
- skills: { label: "Skills" },
301
- roles: { label: "Roles" },
331
+ collections: { label: "Collections" },
332
+ feeds: { label: "Feeds" },
302
333
  files: { label: "Files" },
303
334
  },
304
- encoreDashboard: {
305
- title: "Encore",
306
- subtitle: "Recurring obligations Encore is tracking.",
307
- loading: "Loading obligations…",
308
- errorPrefix: "Couldn't load obligations: ",
309
- empty: "No obligations yet. Ask in chat to set one up.",
310
- noCycles: "No cycles recorded yet.",
311
- cyclesSuffix: "cycles",
312
- targetCount: "{count} target | {count} targets",
313
- cycleClosed: "Closed",
314
- chatButtonTitle: "Discuss this obligation in a new chat",
315
- bellButtonTitle: "Discuss this cycle",
316
- addButtonLabel: "Add",
317
- unexpectedResponse: "Encore returned an unexpected response.",
318
- status: {
319
- active: "Active",
320
- paused: "Paused",
321
- retired: "Retired",
322
- },
323
- cadence: {
324
- daily: "Daily",
325
- weekly: "Weekly",
326
- monthly: "Monthly",
327
- biannual: "Biannual",
328
- annual: "Annual",
329
- },
335
+ shortcuts: {
336
+ pin: "Pin to launcher",
337
+ unpin: "Unpin from launcher",
338
+ zoneAriaLabel: "Pinned shortcuts",
330
339
  },
331
340
  fileContentHeader: {
332
341
  showRendered: "Show rendered Markdown",
@@ -345,6 +354,8 @@ const enMessages = {
345
354
  invalidJson: "Invalid JSON",
346
355
  undo: "Undo",
347
356
  redo: "Redo",
357
+ editMarp: "Edit slide source",
358
+ marpEditorLabel: "Marp slide source",
348
359
  },
349
360
  filesView: {
350
361
  chatPlaceholder: "Ask about this file…",
@@ -367,10 +378,6 @@ const enMessages = {
367
378
  "fragile-format": "Fragile format",
368
379
  ephemeral: "Ephemeral",
369
380
  },
370
- interests: {
371
- title: "Interests config",
372
- summary: "Topics that the news / sources pipeline watches and ranks for you. Editable by hand; the agent also updates it from chat.",
373
- },
374
381
  mcp: {
375
382
  title: "MCP servers",
376
383
  summary: "External Model Context Protocol servers attached to the agent. Add HTTP or stdio servers to expand the agent's tool surface.",
@@ -388,22 +395,10 @@ const enMessages = {
388
395
  summary:
389
396
  "Per-task time / interval overrides applied on top of the system schedule. The agent edits this when you ask to change a recurring task's timing.",
390
397
  },
391
- newsReadState: {
392
- title: "News read state",
393
- summary: "Local-only tracking of which news items you've seen. Ephemeral — safe to delete; will be regenerated as you read.",
394
- },
395
398
  schedulerItems: {
396
399
  title: "Scheduler items queue",
397
400
  summary: "Active scheduled invocations ready to fire. Agent-managed; do not hand-edit unless you know exactly what each field means.",
398
401
  },
399
- todosItems: {
400
- title: "Todo items",
401
- summary: 'Your tasks across all columns of the kanban board. The agent writes here when you say things like "add a todo"; you can also hand-edit.',
402
- },
403
- todosColumns: {
404
- title: "Todo columns",
405
- summary: "Column layout of the kanban board (titles, order, ids). User-editable — rename or reorder freely.",
406
- },
407
402
  wikiIndex: {
408
403
  title: "Wiki index",
409
404
  summary: "Auto-generated index of every wiki page. Refreshed on each wiki edit; do not hand-edit (your changes will be overwritten).",
@@ -437,14 +432,6 @@ const enMessages = {
437
432
  title: "Role description (Markdown)",
438
433
  summary: "The role's persona and system-prompt prose, loaded as context when this role is active. User-editable; changes apply on the next message.",
439
434
  },
440
- sourceFeed: {
441
- title: "Source feed",
442
- summary: "One subscribed source (RSS, GitHub releases / issues, arXiv, etc.). User-editable; the sources pipeline polls these on schedule.",
443
- },
444
- sourceState: {
445
- title: "Source state",
446
- summary: "Ephemeral pipeline state for one source — last-seen ids, ETags, fetch errors. Safe to delete; will be regenerated on the next pipeline run.",
447
- },
448
435
  journalDaily: {
449
436
  title: "Daily journal summary",
450
437
  summary: "Auto-generated recap of your activity for one calendar day, distilled from chat sessions by the journal pass.",
@@ -626,29 +613,7 @@ const enMessages = {
626
613
  },
627
614
  },
628
615
  pluginScheduler: {
629
- prev: "Previous",
630
- today: "Today",
631
- goToday: "Go to today",
632
- next: "Next",
633
- deleteItem: "Delete item",
634
- closeEditor: "Close editor",
635
- apiError: "⚠ Failed to update scheduler: {error}",
636
- tabCalendar: "Calendar",
637
- tabTasks: "Tasks",
638
- heading: "Scheduler",
639
- itemCount: "{count} item | {count} items",
640
- noScheduled: "No scheduled items",
641
- unscheduled: "Unscheduled",
642
- editItem: "Edit item",
643
- update: "Update",
644
- editSource: "Edit Source",
645
- applyChanges: "Apply Changes",
646
- yamlParseError: "Could not parse YAML — ensure 'title' is present",
647
- propLabel: "{key}:",
648
- moreCount: "+{count} more",
649
- invalidRange: "Invalid date range (endDate: {endDate})",
650
616
  previewIcon: "📅",
651
- previewUpcoming: "{count} upcoming",
652
617
  previewAutomations: "{count} automation | {count} automations",
653
618
  previewMore: "+ {count} more…",
654
619
  },
@@ -877,53 +842,6 @@ const enMessages = {
877
842
  previewError: "Accounting: {error}",
878
843
  previewGeneric: "Accounting result",
879
844
  },
880
- todoExplorer: {
881
- heading: "Todo",
882
- doneRatio: "{done}/{total} done",
883
- addButton: "+ Add",
884
- addColumnButton: "+ Column",
885
- labels: "Labels:",
886
- searchPlaceholder: "Search...",
887
- clearButton: "Clear ✕",
888
- clearFiltersTitle: "Clear label filters",
889
- emptyHint: 'No todo items yet. Click "+ Add" to create one.',
890
- addColumn: "Add Column",
891
- newColumnLabelField: "Label",
892
- newColumnPlaceholder: "Review",
893
- noMatchingFilter: "No items match the current filter",
894
- },
895
- todoDialogs: {
896
- addTitle: "Add Todo",
897
- editTitle: "Edit Todo",
898
- deleteButton: "Delete",
899
- deleteTitle: "Delete this item",
900
- noneOption: "— None —",
901
- fieldText: "Text",
902
- fieldNote: "Note",
903
- fieldStatus: "Status",
904
- fieldPriority: "Priority",
905
- fieldDueDate: "Due date",
906
- fieldLabels: "Labels",
907
- fieldLabelsCommaSeparated: "Labels (comma-separated)",
908
- textPlaceholder: "What needs doing?",
909
- labelsPlaceholder: "work, urgent",
910
- },
911
- todoKanban: {
912
- rename: "Rename",
913
- markAsDoneColumn: "Mark as done column",
914
- removeAllItems: "Remove all items",
915
- removeAllItemsConfirm: 'Remove all {count} item(s) in "{column}"? This cannot be undone.',
916
- deleteColumn: "Delete column",
917
- columnActions: "Column actions",
918
- addCard: "+ Add card",
919
- openCardAria: "Open task: {task}",
920
- },
921
- todoTableList: {
922
- noMatchingFilter: "No items match the current filter",
923
- sortColumnAria: "Sort by {column}",
924
- expandRowAria: "Expand task: {task}",
925
- deleteItem: "Delete item",
926
- },
927
845
  pluginWiki: {
928
846
  backToIndex: "Back to index",
929
847
  pdf: "PDF",
@@ -931,6 +849,9 @@ const enMessages = {
931
849
  tabIndex: "Index",
932
850
  tabLog: "Log",
933
851
  tabLint: "Lint",
852
+ tabGraph: "Graph",
853
+ graphEmpty: "No links to graph yet.",
854
+ linkedReferences: "Linked references",
934
855
  empty: "Wiki is empty. Ask the Wiki Manager to ingest a source.",
935
856
  previewMore: "+ {count} more…",
936
857
  chatPlaceholder: "Ask about this page…",
@@ -984,6 +905,11 @@ const enMessages = {
984
905
  submit: "Submit",
985
906
  progress: "{filled} of {total} required fields completed",
986
907
  },
908
+ pluginPresentCollection: {
909
+ fallbackTitle: "Collection",
910
+ itemLabel: "Item: {id}",
911
+ listLabel: "All records",
912
+ },
987
913
  pluginPresentHtml: {
988
914
  saveAsPdf: "Save as PDF (opens print dialog)",
989
915
  pdf: "PDF",
@@ -1011,93 +937,6 @@ const enMessages = {
1011
937
  loadingSource: "Loading source…",
1012
938
  sourceError: "Failed to load source: {error}",
1013
939
  },
1014
- pluginNews: {
1015
- title: "News",
1016
- itemCount: "{unread} unread / {total} total",
1017
- filterAll: "All",
1018
- filterUnread: "Unread",
1019
- allSources: "All",
1020
- markAllRead: "Mark all read",
1021
- selectPrompt: "Select an item to read.",
1022
- empty: "No news in this view.",
1023
- unread: "Unread",
1024
- openOriginal: "Open original",
1025
- noBody: "No body available — open the original article.",
1026
- bodyError: "Failed to load body: {error}",
1027
- loadError: "Failed to load news: {error}",
1028
- chatPlaceholder: "Ask anything about this article",
1029
- },
1030
- pluginManageSource: {
1031
- titlePlaceholder: "Title (optional)",
1032
- heading: "Information sources",
1033
- chatPlaceholder: "Ask about your information sources…",
1034
- sourceCount: "{count} source | {count} sources",
1035
- addButton: "Add",
1036
- rebuildNow: "Rebuild now",
1037
- rebuilding: "Rebuilding…",
1038
- typeField: "Type",
1039
- addingLabel: "Adding…",
1040
- addAndRebuild: "Add + Rebuild",
1041
- emptyPickPack: "No sources registered yet. Pick a starter pack below, click {addBold} above, or ask Claude to register one.",
1042
- emptyAddStrong: "+ Add",
1043
- registering: "Registering + fetching…",
1044
- removeLabel: "Remove",
1045
- removingLabel: "Removing…",
1046
- todaysBrief: "Today's brief",
1047
- todaysBriefLoading: "Loading today's brief…",
1048
- briefNone: "No brief written for this date yet. Click Rebuild now.",
1049
- briefEmpty: "Today's brief is empty.",
1050
- briefLoadFailed: "Failed to load brief",
1051
- lastRebuildSummary: "Last rebuild ({date}): {itemCount} items from {planned} sources, {duplicates} duplicates dropped.",
1052
- archiveErrorsSuffix: "({count} archive errors)",
1053
- kindRss: "RSS",
1054
- kindGithubRel: "GitHub rel",
1055
- kindGithubIss: "GitHub iss",
1056
- kindArxiv: "arXiv",
1057
- kindGithubReleases: "GitHub releases",
1058
- kindGithubIssues: "GitHub issues",
1059
- briefDateLabel: "({date})",
1060
- primaryRssPlaceholder: "https://news.ycombinator.com/rss",
1061
- primaryGithubPlaceholder: "https://github.com/owner/repo (or owner/repo)",
1062
- primaryArxivPlaceholder: "cat:cs.CL",
1063
- primaryRssHint: "Feed URL (RSS 2.0 / Atom / RDF)",
1064
- primaryGithubRelHint: "GitHub repo URL or owner/repo — fetches releases",
1065
- primaryGithubIssHint: "GitHub repo URL or owner/repo — fetches issues",
1066
- primaryArxivHint: "arXiv search query (e.g. cat:cs.CL or au:hinton)",
1067
- confirmRemove: 'Remove source "{slug}"?',
1068
- flashRegistered: "Registered. Fetching new items…",
1069
- flashRebuildReady: "Ready: {itemCount} items from {planned} source.|Ready: {itemCount} items from {planned} sources.",
1070
- flashRebuildComplete: "Rebuild complete: {itemCount} items from {planned} sources.",
1071
- flashRebuildFailed: "Rebuild failed: {error}",
1072
- flashRegisterFailed: "Failed to register source",
1073
- flashRegisterSucceededRebuildFailed: "Register succeeded but rebuild failed: {error}",
1074
- flashRemoved: 'Removed "{slug}".',
1075
- flashRemoveFailed: "Remove failed: {error}",
1076
- flashRefreshListFailed: "Failed to refresh sources: {error}",
1077
- flashPresetAlreadyRegistered: 'All sources in "{label}" are already registered.',
1078
- flashPresetRegistered: 'Registered {count} source from "{label}". Fetching…|Registered {count} sources from "{label}". Fetching…',
1079
- flashPresetPartial: "Registered {ok}/{total}. Errors: {errors}",
1080
- errPrimaryRequired: "Please fill in the URL / query field.",
1081
- errRssUrlProtocol: "RSS feed URL must start with http:// or https://",
1082
- errRssUrlInvalid: "RSS feed URL is not a valid URL.",
1083
- errRssUrlHost: "RSS feed URL must include a host.",
1084
- errGithubInvalid: "Enter a GitHub repo URL (https://github.com/owner/repo) or owner/repo.",
1085
- errUnsupportedKind: "Unsupported fetcher kind.",
1086
- initialLoading: "Loading sources…",
1087
- initialLoadFailed: "Failed to load sources.",
1088
- retryLabel: "Retry",
1089
- filter: {
1090
- all: "All",
1091
- rss: "RSS",
1092
- github: "GitHub",
1093
- arxiv: "arXiv",
1094
- scheduleDaily: "Daily",
1095
- scheduleWeekly: "Weekly",
1096
- scheduleManual: "Manual",
1097
- noMatching: "No sources match the current filter.",
1098
- clearFilter: "Clear filter",
1099
- },
1100
- },
1101
940
  photoLocations: {
1102
941
  title: "Photo locations",
1103
942
  summary: "{total} captured · {withGps} with GPS",
@@ -1108,6 +947,7 @@ const enMessages = {
1108
947
  },
1109
948
  pluginManageSkills: {
1110
949
  deleteProjectSkill: "Delete this project-scope skill",
950
+ unstarPresetSkill: "Unstar this preset — moves it back to the catalog",
1111
951
  heading: "Skills",
1112
952
  previewCount: "{count} skill | {count} skills",
1113
953
  previewMore: "+{count} more",
@@ -1124,21 +964,23 @@ const enMessages = {
1124
964
  emptyBody: "(empty body)",
1125
965
  btnEdit: "Edit",
1126
966
  btnDelete: "Delete",
1127
- btnRun: "Run",
967
+ btnUnstar: "Unstar",
1128
968
  errListFailed: "Failed to load skills: {error}",
1129
969
  errDetailFailed: "Failed to load skill: {error}",
1130
970
  errSaveFailed: "Save failed: {error}",
1131
971
  errDeleteFailed: "Failed to delete",
1132
972
  confirmDelete: 'Delete skill "{name}"? This removes ~/mulmoclaude/.claude/skills/{name}/SKILL.md.',
973
+ confirmUnstar: 'Move "{name}" back to the catalog? It will stop loading into the prompt, but the catalog copy stays — you can re-star it any time.',
1133
974
  sectionActive: "Active",
1134
975
  sectionCatalog: "Catalog",
1135
- sectionLegend:
1136
- "Active: loaded into the prompt ({system} System = mc- bundled · {project} Project = editable · {user} User = ~/.claude/skills/). Catalog: browse, ★ star or ▶ run once without bloating the prompt.",
976
+ sectionLegendActive:
977
+ "Skills Claude can use right now. Claude calls them automatically in the flow of a conversation, or you can invoke one by typing its name. {system} System (mc- bundled) / {project} Project (editable, this workspace only) / {user} User (skills in ~/.claude/skills/).",
978
+ sectionLegendCatalog:
979
+ "Catalog: skills that become Active when you mark them with {star}. Removing {star} from an Active skill sends it back to Catalog — Claude stops using it (the skill is not deleted).",
1137
980
  catalogEmpty: "No preset skills available.",
1138
981
  catalogPresetHeading: "Presets",
1139
982
  catalogStar: "Star",
1140
983
  catalogStarred: "Starred",
1141
- catalogRunOnce: "Run once",
1142
984
  sourceUserTitle: "User skill (~/.claude/skills/, available in every workspace)",
1143
985
  sourceSystemTitle: "System skill (bundled, mc- prefix — read-only, overwritten by the launcher)",
1144
986
  sourceProjectTitle: "Project skill (workspace .claude/skills/, this workspace only)",
@@ -1146,7 +988,6 @@ const enMessages = {
1146
988
  errCatalogListFailed: "Failed to load catalog: {error}",
1147
989
  errCatalogStarFailed: "Failed to star skill: {error}",
1148
990
  errCatalogPreviewFailed: "Failed to load skill preview: {error}",
1149
- errCatalogRunOnceEmpty: "This skill has no body to run.",
1150
991
  catalogAddRepo: "Add skill repository",
1151
992
  catalogAddRepoTitle: "Add a skill repository",
1152
993
  catalogRepoUrlLabel: "GitHub URL",
@@ -1221,6 +1062,9 @@ const enMessages = {
1221
1062
  playPresentation: "Play presentation",
1222
1063
  regenerateMovie: "Regenerate movie",
1223
1064
  movieGenerationFailed: "Movie generation failed",
1065
+ pdf: "PDF",
1066
+ regeneratePdf: "Regenerate PDF",
1067
+ generatingPdf: "Generating PDF…",
1224
1068
  retry: "Retry",
1225
1069
  errPrefix: "⚠ Error",
1226
1070
  noBeats: "No beats found in script",
@@ -1249,6 +1093,12 @@ const enMessages = {
1249
1093
  copyLabel: "Copy",
1250
1094
  copiedLabel: "Copied!",
1251
1095
  taskCountMismatch: "Markdown source and rendered output disagree on the number of tasks. Refusing to toggle to avoid corruption.",
1096
+ marpSlidesMode: "Marp slides · {count}",
1097
+ marpExportPdf: "Export PDF",
1098
+ marpRenderFailed: "⚠ Failed to render Marp slides: {error}",
1099
+ marpSplitEnter: "Edit source side-by-side with preview",
1100
+ marpSplitExit: "Hide source editor",
1101
+ marpSplitEditorLabel: "Source",
1252
1102
  },
1253
1103
  pluginTextResponse: {
1254
1104
  pdf: "PDF",
@@ -1303,6 +1153,91 @@ const enMessages = {
1303
1153
  // is translatable.
1304
1154
  explanation:
1305
1155
  "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}.",
1156
+ connectorsSectionTitle: "Connected connectors",
1157
+ connectorsEmpty: "No connectors found.",
1158
+ connectorConnected: "Connected",
1159
+ connectorDisconnected: "Not connected",
1160
+ connectorsGuide:
1161
+ "Connectors like Slack and Gmail let Claude access your accounts. Add or remove connectors from Claude Desktop, or configure them {configLink}. (Opens claude.ai)",
1162
+ connectorsConfigLinkText: "here",
1163
+ },
1164
+ collectionsView: {
1165
+ addCollectionLabel: "Collection",
1166
+ addCollectionPrompt:
1167
+ "Help me create a new collection. First read `config/helps/collection-skills.md` for the schema-driven collection conventions. Then use the `presentForm` tool (do not use AskUserQuestion) to ask me what kind of data I want to track, and author the schema.json and SKILL.md from my answers.",
1168
+ addFeedTitle: "Add a feed",
1169
+ addFeedHint: "Paste a feed or API URL — I'll fetch it and work out the title and fields for you.",
1170
+ addFeedPrompt:
1171
+ "Add a new data-source feed from this URL: {url}\n\nFirst Read `config/helps/feeds.md` and follow it exactly. Fetch that URL yourself, inspect the response to infer a sensible title and fields, then author `feeds/<slug>/schema.json` as the help describes — do NOT ask me any questions; work it all out from the data. Opening the feed loads its items automatically; when you're done, tell me it's registered (no need to mention Refresh).",
1172
+ title: "Collections",
1173
+ backToIndex: "Back to collections",
1174
+ indexEmpty: "No collections installed. Star a skill that ships a schema from the Skills page to see it here.",
1175
+ editItem: "Edit",
1176
+ openItem: "Open {id}",
1177
+ confirmDelete: "Delete this item? This cannot be undone.",
1178
+ deleteFeed: "Delete feed",
1179
+ confirmDeleteFeed: 'Delete the "{title}" feed and all its fetched records? This cannot be undone.',
1180
+ deleteCollection: "Delete collection",
1181
+ confirmDeleteCollection: 'Delete the entire "{title}" collection, including all its records? A restorable backup is archived first.',
1182
+ itemsEmpty: "No items yet. Click + to add one.",
1183
+ notFound: "Collection not found",
1184
+ loadFailed: "Failed to load",
1185
+ requiredField: "This field is required",
1186
+ selectPlaceholder: "Select…",
1187
+ inlineSaveFailed: "Couldn't save change: {error}",
1188
+ addRow: "Add row",
1189
+ removeRow: "Remove row",
1190
+ noRows: "No rows yet",
1191
+ tableSummary: "{count} items",
1192
+ embedMissing: "No “{id}” record found in {collection}.",
1193
+ embedCreate: "Set it up",
1194
+ searchPlaceholder: "Search records…",
1195
+ searchSummary: "Showing {shown} of {total}",
1196
+ noMatchingItems: "No matching items",
1197
+ clearSearch: "Clear search",
1198
+ openCollection: "Open {title}",
1199
+ createTitle: "Add new",
1200
+ derivedLabel: "Derived",
1201
+ embedMissingTitle: "Embedded reference missing",
1202
+ chat: "Chat",
1203
+ refreshFeed: "Refresh",
1204
+ refreshFailed: "Refresh failed: {error}",
1205
+ feedChatSeed:
1206
+ 'The "{slug}" feed is defined by the schema at `feeds/{slug}/schema.json` and its records live in `{dataPath}/` (one `<id>.json` per record). Using that schema and data, respond to this request: {message}',
1207
+ feedsTitle: "Data-source feeds",
1208
+ feedsEmpty: "No feeds registered yet.",
1209
+ chatTitle: "Start a chat",
1210
+ chatPlaceholder: "Describe what you want to do with this collection…",
1211
+ chatStart: "Start chat",
1212
+ viewToggle: "View",
1213
+ viewTable: "Table",
1214
+ viewCalendar: "Calendar",
1215
+ calendarFieldLabel: "Calendar date field",
1216
+ calendarPrevMonth: "Previous month",
1217
+ calendarNextMonth: "Next month",
1218
+ calendarToday: "Today",
1219
+ calendarNoDate: "No date",
1220
+ calendarCreateOn: "Create on {date}",
1221
+ dayViewOpen: "Open day view for {date}",
1222
+ dayViewAllDay: "All day",
1223
+ dayViewEmpty: "No items on this day",
1224
+ dayViewClose: "Close day view",
1225
+ viewKanban: "Kanban",
1226
+ kanbanFieldLabel: "Kanban group field",
1227
+ kanbanUncategorized: "Uncategorized",
1228
+ kanbanOpenCard: "Open {label}",
1229
+ viewDashboard: "Dashboard",
1230
+ dashboardAlertHeading: "{label} — {count}",
1231
+ dashboardAllItems: "All items",
1232
+ source: {
1233
+ user: "User",
1234
+ project: "Project",
1235
+ },
1236
+ },
1237
+ confirmModal: {
1238
+ defaultTitle: "Confirm",
1239
+ defaultConfirm: "Confirm",
1240
+ defaultCancel: "Cancel",
1306
1241
  },
1307
1242
  };
1308
1243