mulmoclaude 0.5.3 → 0.6.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 (483) hide show
  1. package/README.md +17 -4
  2. package/bin/mulmoclaude.js +46 -15
  3. package/client/assets/chunk-CernVdwh.js +1 -0
  4. package/client/assets/chunk-D8eiyYIV-C1eAZMzz.js +1 -0
  5. package/client/assets/html2canvas-CDGcmOD3-BbPeutDg.js +5 -0
  6. package/client/assets/index-BbgSjFQ8.js +4968 -0
  7. package/client/assets/index-ECD0lgIv.css +2 -0
  8. package/client/assets/{index.es-D4YyL_Dg-BgT6a3Nd.js → index.es-DqtpmBm8-DJdTPdnc.js} +5 -5
  9. package/client/assets/material-symbols-outlined-BLDfUw-_.woff2 +0 -0
  10. package/client/assets/runtime-protocol-vue-6WYa8hAs.js +1 -0
  11. package/client/assets/runtime-vue-BVUzgYGA.js +1 -0
  12. package/client/assets/typeof-DBp4T-Ny-C2xoZtcz.js +1 -0
  13. package/client/assets/vue-1e_vz2LW.js +1 -0
  14. package/client/assets/vue.runtime.esm-bundler-DQ8Kjjui.js +4 -0
  15. package/client/index.html +33 -2
  16. package/package.json +17 -17
  17. package/server/accounting/accountNormalize.ts +32 -0
  18. package/server/accounting/defaultAccounts.ts +87 -0
  19. package/server/accounting/eventPublisher.ts +51 -0
  20. package/server/accounting/journal.ts +252 -0
  21. package/server/accounting/openingBalances.ts +114 -0
  22. package/server/accounting/report.ts +237 -0
  23. package/server/accounting/service.ts +718 -0
  24. package/server/accounting/snapshotCache.ts +333 -0
  25. package/server/accounting/timeSeries.ts +265 -0
  26. package/server/accounting/types.ts +148 -0
  27. package/server/agent/activeTools.ts +128 -0
  28. package/server/agent/attachmentConverter.ts +10 -5
  29. package/server/agent/backend/claude-code.ts +8 -2
  30. package/server/agent/backend/types.ts +1 -1
  31. package/server/agent/config.ts +101 -31
  32. package/server/agent/index.ts +45 -33
  33. package/server/agent/mcp-server.ts +146 -69
  34. package/server/agent/mcp-tools/index.ts +1 -5
  35. package/server/agent/mcp-tools/notify.ts +2 -22
  36. package/server/agent/mcp-tools/x.ts +0 -4
  37. package/server/agent/mcpHealth.ts +168 -0
  38. package/server/agent/plugin-names.ts +20 -77
  39. package/server/agent/prompt.ts +259 -51
  40. package/server/agent/resumeFailover.ts +1 -1
  41. package/server/agent/stream.ts +0 -1
  42. package/server/api/auth/bearerAuth.ts +5 -5
  43. package/server/api/csrfGuard.ts +1 -1
  44. package/server/api/routes/accounting.ts +366 -0
  45. package/server/api/routes/agent.ts +509 -46
  46. package/server/api/routes/attachment.ts +104 -0
  47. package/server/api/routes/chart.ts +2 -1
  48. package/server/api/routes/config.ts +12 -12
  49. package/server/api/routes/files.ts +105 -48
  50. package/server/api/routes/image.ts +70 -25
  51. package/server/api/routes/journal.ts +35 -0
  52. package/server/api/routes/mulmo-script.ts +358 -118
  53. package/server/api/routes/mulmoScriptValidate.ts +1 -1
  54. package/server/api/routes/news.ts +1 -1
  55. package/server/api/routes/notifications.ts +92 -22
  56. package/server/api/routes/notifier.ts +98 -0
  57. package/server/api/routes/pdf.ts +188 -48
  58. package/server/api/routes/plugins.ts +34 -14
  59. package/server/api/routes/presentHtml.ts +58 -3
  60. package/server/api/routes/roles.ts +1 -8
  61. package/server/api/routes/runtime-plugin.ts +224 -0
  62. package/server/api/routes/scheduler.ts +7 -5
  63. package/server/api/routes/schedulerHandlers.ts +1 -1
  64. package/server/api/routes/schedulerTasks.ts +8 -7
  65. package/server/api/routes/sessions.ts +234 -121
  66. package/server/api/routes/skills.ts +56 -51
  67. package/server/api/routes/sources.ts +52 -45
  68. package/server/api/routes/translation.ts +44 -0
  69. package/server/api/routes/wiki/frontmatter.ts +13 -65
  70. package/server/api/routes/wiki/history.ts +261 -0
  71. package/server/api/routes/wiki/pageIndex.ts +1 -1
  72. package/server/api/routes/wiki.ts +50 -26
  73. package/server/events/file-change.ts +83 -0
  74. package/server/events/notifications.ts +247 -91
  75. package/server/events/pub-sub/index.ts +1 -1
  76. package/server/events/relay-client.ts +5 -5
  77. package/server/events/scheduler-adapter.ts +2 -2
  78. package/server/events/session-store/index.ts +110 -22
  79. package/server/events/task-manager/index.ts +10 -9
  80. package/server/index.ts +509 -33
  81. package/server/notifier/engine.ts +419 -0
  82. package/server/notifier/legacy-adapters.ts +76 -0
  83. package/server/notifier/runtime-api.ts +74 -0
  84. package/server/notifier/store.ts +70 -0
  85. package/server/notifier/types.ts +121 -0
  86. package/server/plugins/dev-loader.ts +171 -0
  87. package/server/plugins/dev-watcher.ts +150 -0
  88. package/server/plugins/diagnostics.ts +188 -0
  89. package/server/plugins/preset-list.ts +52 -0
  90. package/server/plugins/preset-loader.ts +112 -0
  91. package/server/plugins/runtime-chat-api.ts +38 -0
  92. package/server/plugins/runtime-loader.ts +430 -0
  93. package/server/plugins/runtime-registry.ts +112 -0
  94. package/server/plugins/runtime-tasks-api.ts +50 -0
  95. package/server/plugins/runtime.ts +378 -0
  96. package/server/services/translation/cache.ts +72 -0
  97. package/server/services/translation/index.ts +106 -0
  98. package/server/services/translation/llm.ts +140 -0
  99. package/server/services/translation/types.ts +35 -0
  100. package/server/system/credentials.ts +13 -2
  101. package/server/system/env.ts +6 -1
  102. package/server/system/logger/formatters.ts +46 -4
  103. package/server/system/logger/index.ts +4 -4
  104. package/server/system/logger/sinks.ts +26 -5
  105. package/server/system/logger/types.ts +2 -2
  106. package/server/utils/dev-plugin-args.d.mts +11 -0
  107. package/server/utils/dev-plugin-args.mjs +43 -0
  108. package/server/utils/errors.ts +13 -4
  109. package/server/utils/files/accounting-io.ts +295 -0
  110. package/server/utils/files/atomic.ts +17 -49
  111. package/server/utils/files/attachment-store.ts +182 -0
  112. package/server/utils/files/html-io.ts +1 -7
  113. package/server/utils/files/html-store.ts +19 -0
  114. package/server/utils/files/image-store.ts +20 -22
  115. package/server/utils/files/index.ts +5 -15
  116. package/server/utils/files/journal-io.ts +7 -35
  117. package/server/utils/files/json.ts +2 -29
  118. package/server/utils/files/markdown-image-fill.ts +6 -37
  119. package/server/utils/files/markdown-store.ts +6 -21
  120. package/server/utils/files/naming.ts +3 -39
  121. package/server/utils/files/plugins-io.ts +100 -0
  122. package/server/utils/files/reference-dirs-io.ts +1 -9
  123. package/server/utils/files/roles-io.ts +2 -10
  124. package/server/utils/files/safe.ts +17 -19
  125. package/server/utils/files/scheduler-io.ts +1 -7
  126. package/server/utils/files/scheduler-overrides-io.ts +3 -12
  127. package/server/utils/files/session-io.ts +21 -30
  128. package/server/utils/files/spreadsheet-store.ts +9 -22
  129. package/server/utils/files/translation-io.ts +46 -0
  130. package/server/utils/files/user-tasks-io.ts +1 -7
  131. package/server/utils/files/workspace-io.ts +3 -79
  132. package/server/utils/gemini.ts +33 -11
  133. package/server/utils/html/htmlArtifactSplicer.ts +41 -0
  134. package/server/utils/markdown/frontmatter.ts +112 -0
  135. package/server/utils/regex.ts +56 -0
  136. package/server/utils/router.ts +41 -0
  137. package/server/utils/slug.ts +5 -3
  138. package/server/utils/time.ts +12 -0
  139. package/server/workspace/chat-index/indexer.ts +15 -2
  140. package/server/workspace/chat-index/summarizer.ts +1 -1
  141. package/server/workspace/custom-dirs.ts +1 -1
  142. package/server/workspace/helps/gemini.md +1 -1
  143. package/server/workspace/helps/guide.md +61 -0
  144. package/server/workspace/helps/index.md +4 -0
  145. package/server/workspace/helps/presenthtml.md +80 -0
  146. package/server/workspace/helps/sandbox.md +7 -0
  147. package/server/workspace/helps/storyteller.md +101 -0
  148. package/server/workspace/helps/telegram.md +1 -0
  149. package/server/workspace/helps/wiki.md +9 -7
  150. package/server/workspace/journal/archivist-cli.ts +7 -33
  151. package/server/workspace/journal/archivist-schemas.ts +5 -43
  152. package/server/workspace/journal/dailyPass.ts +34 -187
  153. package/server/workspace/journal/diff.ts +3 -28
  154. package/server/workspace/journal/index.ts +10 -81
  155. package/server/workspace/journal/indexFile.ts +3 -24
  156. package/server/workspace/journal/latestDaily.ts +51 -0
  157. package/server/workspace/journal/memoryExtractor.ts +4 -20
  158. package/server/workspace/journal/optimizationPass.ts +4 -21
  159. package/server/workspace/journal/paths.ts +4 -23
  160. package/server/workspace/journal/state.ts +6 -29
  161. package/server/workspace/memory/io.ts +213 -0
  162. package/server/workspace/memory/llm-classifier.ts +158 -0
  163. package/server/workspace/memory/migrate.ts +263 -0
  164. package/server/workspace/memory/run.ts +84 -0
  165. package/server/workspace/memory/topic-cluster.ts +218 -0
  166. package/server/workspace/memory/topic-detect.ts +67 -0
  167. package/server/workspace/memory/topic-index-hook.ts +128 -0
  168. package/server/workspace/memory/topic-io.ts +180 -0
  169. package/server/workspace/memory/topic-migrate.ts +248 -0
  170. package/server/workspace/memory/topic-run.ts +172 -0
  171. package/server/workspace/memory/topic-swap.ts +135 -0
  172. package/server/workspace/memory/topic-types.ts +142 -0
  173. package/server/workspace/memory/types.ts +83 -0
  174. package/server/workspace/news/reader.ts +4 -5
  175. package/server/workspace/paths.ts +124 -47
  176. package/server/workspace/roles.ts +2 -11
  177. package/server/workspace/skills/parser.ts +38 -55
  178. package/server/workspace/skills/user-tasks.ts +1 -2
  179. package/server/workspace/skills-preset/mc-library/SKILL.md +188 -0
  180. package/server/workspace/skills-preset.ts +196 -0
  181. package/server/workspace/sources/fetchers/githubIssues.ts +13 -11
  182. package/server/workspace/sources/fetchers/index.ts +1 -1
  183. package/server/workspace/sources/fetchers/rssParser.ts +1 -1
  184. package/server/workspace/sources/pipeline/index.ts +2 -2
  185. package/server/workspace/sources/pipeline/notify.ts +3 -3
  186. package/server/workspace/sources/pipeline/write.ts +2 -2
  187. package/server/workspace/sources/registry.ts +39 -61
  188. package/server/workspace/sources/robots.ts +1 -1
  189. package/server/workspace/tool-trace/classify.ts +2 -1
  190. package/server/workspace/tool-trace/index.ts +1 -1
  191. package/server/workspace/tool-trace/writeSearch.ts +6 -1
  192. package/server/workspace/wiki-backlinks/index.ts +19 -7
  193. package/server/workspace/wiki-backlinks/sessionBacklinks.ts +1 -0
  194. package/server/workspace/wiki-history/hook/snapshot.mjs +98 -0
  195. package/server/workspace/wiki-history/hook/snapshot.ts +135 -0
  196. package/server/workspace/wiki-history/provision.ts +181 -0
  197. package/server/workspace/wiki-pages/io.ts +217 -0
  198. package/server/workspace/wiki-pages/snapshot.ts +380 -0
  199. package/server/workspace/workspace.ts +75 -13
  200. package/src/App.vue +115 -40
  201. package/src/_runtime/protocol-vue.ts +21 -0
  202. package/src/_runtime/vue.ts +22 -0
  203. package/src/components/ChatInput.vue +14 -10
  204. package/src/components/CopyChatButton.vue +76 -0
  205. package/src/components/FileContentRenderer.vue +67 -14
  206. package/src/components/FileTree.vue +2 -2
  207. package/src/components/FilesView.vue +17 -1
  208. package/src/components/NewsView.vue +16 -2
  209. package/src/components/NotificationBell.vue +320 -93
  210. package/src/components/PageChatComposer.vue +5 -4
  211. package/src/components/PluginLauncher.vue +42 -6
  212. package/src/components/PluginScopedRoot.vue +87 -0
  213. package/src/components/RoleSelector.vue +12 -1
  214. package/src/components/RolesView.vue +562 -0
  215. package/src/components/SentAttachmentChip.vue +102 -0
  216. package/src/components/SessionHistoryPanel.vue +109 -20
  217. package/src/components/SessionRoleIcon.vue +7 -4
  218. package/src/components/SessionSidebar.vue +20 -7
  219. package/src/components/SessionTabBar.vue +1 -1
  220. package/src/components/SettingsMcpTab.vue +4 -4
  221. package/src/components/SettingsModal.vue +2 -0
  222. package/src/components/SidebarHeader.vue +16 -5
  223. package/src/components/SourcesManager.vue +23 -9
  224. package/src/components/SourcesView.vue +1 -1
  225. package/src/components/StackView.vue +102 -6
  226. package/src/components/SuggestionsPanel.vue +105 -16
  227. package/src/components/SystemFileBanner.vue +1 -1
  228. package/src/components/TodoExplorer.vue +4 -5
  229. package/src/components/todo/TodoAddDialog.vue +2 -3
  230. package/src/components/todo/TodoEditDialog.vue +1 -2
  231. package/src/components/todo/TodoEditPanel.vue +2 -3
  232. package/src/components/todo/TodoKanbanView.vue +8 -5
  233. package/src/components/todo/TodoListView.vue +3 -5
  234. package/src/components/todo/TodoTableView.vue +7 -5
  235. package/src/composables/useAccountingChannel.ts +58 -0
  236. package/src/composables/useActiveSession.ts +4 -25
  237. package/src/composables/useAppApi.ts +6 -44
  238. package/src/composables/useClipboardCopy.ts +3 -20
  239. package/src/composables/useContentDisplay.ts +33 -2
  240. package/src/composables/useDevPluginReload.ts +23 -0
  241. package/src/composables/useDynamicFavicon.ts +5 -31
  242. package/src/composables/useEventListeners.ts +0 -20
  243. package/src/composables/useExpandedDirs.ts +4 -15
  244. package/src/composables/useFaviconState.ts +12 -46
  245. package/src/composables/useFileChange.ts +53 -0
  246. package/src/composables/useFreshPluginData.ts +6 -43
  247. package/src/composables/useHealth.ts +14 -43
  248. package/src/composables/useImageErrorRepair.ts +104 -0
  249. package/src/composables/useLatestDaily.ts +40 -0
  250. package/src/composables/useMarkdownDoc.ts +39 -0
  251. package/src/composables/useMarkdownLinkHandler.ts +1 -1
  252. package/src/composables/useMcpTools.ts +3 -16
  253. package/src/composables/useNotifications.ts +138 -112
  254. package/src/composables/usePdfDownload.ts +17 -3
  255. package/src/composables/usePendingCalls.ts +8 -26
  256. package/src/composables/usePluginErrorBoundary.ts +68 -0
  257. package/src/composables/usePubSub.ts +9 -17
  258. package/src/composables/useRunElapsed.ts +5 -22
  259. package/src/composables/useSandboxStatus.ts +4 -20
  260. package/src/composables/useSessionDerived.ts +7 -15
  261. package/src/composables/useSessionHistory.ts +70 -29
  262. package/src/composables/useSessionSync.ts +25 -3
  263. package/src/composables/useSkillsList.ts +59 -0
  264. package/src/composables/useTranslatedQueries.ts +109 -0
  265. package/src/config/apiRoutes.ts +181 -80
  266. package/src/config/historyFilters.ts +5 -3
  267. package/src/config/hostEvents.ts +17 -0
  268. package/src/config/mcpCatalog.ts +277 -5
  269. package/src/config/pubsubChannels.ts +134 -12
  270. package/src/config/roles.ts +212 -147
  271. package/src/config/systemFileDescriptors.ts +5 -5
  272. package/src/config/toolNames.ts +52 -30
  273. package/src/config/workspacePaths.ts +26 -2
  274. package/src/lang/de.ts +483 -27
  275. package/src/lang/en.ts +448 -27
  276. package/src/lang/es.ts +474 -27
  277. package/src/lang/fr.ts +476 -27
  278. package/src/lang/ja.ts +465 -27
  279. package/src/lang/ko.ts +466 -27
  280. package/src/lang/pt-BR.ts +473 -27
  281. package/src/lang/zh.ts +463 -27
  282. package/src/lib/vue-i18n.ts +1 -1
  283. package/src/lib/wiki-page/slug.ts +66 -0
  284. package/src/main.ts +85 -0
  285. package/src/plugins/_extras.ts +58 -0
  286. package/src/plugins/_generated/metas.ts +42 -0
  287. package/src/plugins/_generated/registrations.ts +44 -0
  288. package/src/plugins/_generated/server-bindings.ts +47 -0
  289. package/src/plugins/accounting/Preview.vue +106 -0
  290. package/src/plugins/accounting/View.vue +632 -0
  291. package/src/plugins/accounting/actions.ts +34 -0
  292. package/src/plugins/accounting/api.ts +301 -0
  293. package/src/plugins/accounting/components/AccountEditor.vue +250 -0
  294. package/src/plugins/accounting/components/AccountRow.vue +50 -0
  295. package/src/plugins/accounting/components/AccountsList.vue +102 -0
  296. package/src/plugins/accounting/components/AccountsModal.vue +300 -0
  297. package/src/plugins/accounting/components/BalanceSheet.vue +186 -0
  298. package/src/plugins/accounting/components/BookSettings.vue +284 -0
  299. package/src/plugins/accounting/components/BookSwitcher.vue +78 -0
  300. package/src/plugins/accounting/components/DateRangePicker.vue +140 -0
  301. package/src/plugins/accounting/components/JournalEntryForm.vue +504 -0
  302. package/src/plugins/accounting/components/JournalList.vue +553 -0
  303. package/src/plugins/accounting/components/Ledger.vue +206 -0
  304. package/src/plugins/accounting/components/NewBookForm.vue +211 -0
  305. package/src/plugins/accounting/components/OpeningBalancesForm.vue +271 -0
  306. package/src/plugins/accounting/components/ProfitLoss.vue +160 -0
  307. package/src/plugins/accounting/components/accountDraft.ts +13 -0
  308. package/src/plugins/accounting/components/accountNumbering.ts +103 -0
  309. package/src/plugins/accounting/components/accountValidation.ts +75 -0
  310. package/src/plugins/accounting/components/useLatestRequest.ts +44 -0
  311. package/src/plugins/accounting/countries.ts +158 -0
  312. package/src/plugins/accounting/currencies.ts +64 -0
  313. package/src/plugins/accounting/dates.ts +51 -0
  314. package/src/plugins/accounting/definition.ts +199 -0
  315. package/src/plugins/accounting/fiscalYear.ts +136 -0
  316. package/src/plugins/accounting/index.ts +49 -0
  317. package/src/plugins/accounting/meta.ts +91 -0
  318. package/src/plugins/accounting/timeSeriesEnums.ts +16 -0
  319. package/src/plugins/api.ts +125 -0
  320. package/src/plugins/canvas/View.vue +38 -28
  321. package/src/plugins/canvas/definition.ts +10 -8
  322. package/src/plugins/canvas/index.ts +15 -8
  323. package/src/plugins/canvas/meta.ts +12 -0
  324. package/src/plugins/chart/Preview.vue +1 -1
  325. package/src/plugins/chart/View.vue +2 -2
  326. package/src/plugins/chart/definition.ts +12 -2
  327. package/src/plugins/chart/index.ts +15 -7
  328. package/src/plugins/chart/meta.ts +18 -0
  329. package/src/plugins/editImages/definition.ts +44 -0
  330. package/src/plugins/editImages/index.ts +43 -0
  331. package/src/plugins/editImages/meta.ts +5 -0
  332. package/src/plugins/generateImage/View.vue +3 -1
  333. package/src/plugins/generateImage/definition.ts +2 -0
  334. package/src/plugins/generateImage/index.ts +13 -5
  335. package/src/plugins/generateImage/meta.ts +5 -0
  336. package/src/plugins/index.ts +35 -0
  337. package/src/plugins/manageRoles/Preview.vue +7 -4
  338. package/src/plugins/manageRoles/View.vue +12 -8
  339. package/src/plugins/manageRoles/definition.ts +6 -0
  340. package/src/plugins/manageRoles/index.ts +7 -6
  341. package/src/plugins/manageSkills/View.vue +11 -7
  342. package/src/plugins/manageSkills/definition.ts +4 -1
  343. package/src/plugins/manageSkills/index.ts +14 -7
  344. package/src/plugins/manageSkills/meta.ts +21 -0
  345. package/src/plugins/manageSource/definition.ts +4 -1
  346. package/src/plugins/manageSource/index.ts +15 -7
  347. package/src/plugins/manageSource/meta.ts +21 -0
  348. package/src/plugins/markdown/Preview.vue +10 -8
  349. package/src/plugins/markdown/View.vue +84 -17
  350. package/src/plugins/markdown/definition.ts +7 -1
  351. package/src/plugins/markdown/index.ts +15 -8
  352. package/src/plugins/markdown/meta.ts +16 -0
  353. package/src/plugins/meta-types.ts +97 -0
  354. package/src/plugins/metas.ts +224 -0
  355. package/src/plugins/presentForm/Preview.vue +4 -15
  356. package/src/plugins/presentForm/View.vue +35 -78
  357. package/src/plugins/presentForm/definition.ts +7 -6
  358. package/src/plugins/presentForm/index.ts +12 -5
  359. package/src/plugins/presentForm/meta.ts +11 -0
  360. package/src/plugins/presentForm/plugin.ts +8 -9
  361. package/src/plugins/presentForm/types.ts +0 -24
  362. package/src/plugins/presentHtml/Preview.vue +1 -8
  363. package/src/plugins/presentHtml/View.vue +401 -30
  364. package/src/plugins/presentHtml/definition.ts +8 -5
  365. package/src/plugins/presentHtml/index.ts +15 -8
  366. package/src/plugins/presentHtml/meta.ts +14 -0
  367. package/src/plugins/presentMulmoScript/View.vue +327 -107
  368. package/src/plugins/presentMulmoScript/definition.ts +34 -7
  369. package/src/plugins/presentMulmoScript/helpers.ts +4 -5
  370. package/src/plugins/presentMulmoScript/index.ts +20 -7
  371. package/src/plugins/presentMulmoScript/meta.ts +52 -0
  372. package/src/plugins/scheduler/AutomationsPreview.vue +2 -8
  373. package/src/plugins/scheduler/Preview.vue +5 -2
  374. package/src/plugins/scheduler/TasksTab.vue +16 -36
  375. package/src/plugins/scheduler/View.vue +22 -54
  376. package/src/plugins/scheduler/automationsDefinition.ts +14 -9
  377. package/src/plugins/scheduler/automationsMeta.ts +5 -0
  378. package/src/plugins/scheduler/calendarDefinition.ts +4 -7
  379. package/src/plugins/scheduler/calendarMeta.ts +28 -0
  380. package/src/plugins/scheduler/formatSchedule.ts +6 -24
  381. package/src/plugins/scheduler/index.ts +26 -52
  382. package/src/plugins/scope.ts +57 -0
  383. package/src/plugins/server-bindings-types.ts +38 -0
  384. package/src/plugins/server.ts +32 -0
  385. package/src/plugins/skill/Preview.vue +25 -0
  386. package/src/plugins/skill/View.vue +125 -0
  387. package/src/plugins/skill/definition.ts +23 -0
  388. package/src/plugins/skill/index.ts +36 -0
  389. package/src/plugins/skill/plugin.ts +31 -0
  390. package/src/plugins/skill/types.ts +21 -0
  391. package/src/plugins/spreadsheet/Preview.vue +1 -3
  392. package/src/plugins/spreadsheet/View.vue +29 -49
  393. package/src/plugins/spreadsheet/cellHighlights.ts +2 -3
  394. package/src/plugins/spreadsheet/definition.ts +5 -2
  395. package/src/plugins/spreadsheet/index.ts +15 -8
  396. package/src/plugins/spreadsheet/keyboardNav.ts +38 -0
  397. package/src/plugins/spreadsheet/meta.ts +14 -0
  398. package/src/plugins/textResponse/Preview.vue +9 -1
  399. package/src/plugins/textResponse/View.vue +59 -8
  400. package/src/plugins/textResponse/index.ts +11 -3
  401. package/src/plugins/textResponse/plugin.ts +8 -10
  402. package/src/plugins/textResponse/types.ts +28 -0
  403. package/src/plugins/wiki/Preview.vue +6 -4
  404. package/src/plugins/wiki/View.vue +463 -254
  405. package/src/plugins/wiki/components/WikiPageBody.vue +159 -0
  406. package/src/plugins/wiki/helpers.ts +17 -0
  407. package/src/plugins/wiki/history/HistoryDetail.vue +325 -0
  408. package/src/plugins/wiki/history/HistoryTab.vue +167 -0
  409. package/src/plugins/wiki/history/RestoreConfirm.vue +63 -0
  410. package/src/plugins/wiki/history/api.ts +52 -0
  411. package/src/plugins/wiki/history/diff.ts +145 -0
  412. package/src/plugins/wiki/index.ts +42 -32
  413. package/src/plugins/wiki/meta.ts +10 -0
  414. package/src/plugins/wiki/pageEditLoader.ts +53 -0
  415. package/src/plugins/wiki/route.ts +8 -0
  416. package/src/router/guards.ts +2 -1
  417. package/src/router/index.ts +19 -0
  418. package/src/router/pageRoutes.ts +1 -0
  419. package/src/tools/index.ts +50 -51
  420. package/src/tools/runtimeLoader.ts +141 -0
  421. package/src/tools/types.ts +44 -1
  422. package/src/types/notification.ts +23 -0
  423. package/src/types/pastedFile.ts +10 -0
  424. package/src/types/session.ts +61 -3
  425. package/src/types/sse.ts +21 -6
  426. package/src/utils/agent/eventDispatch.ts +12 -9
  427. package/src/utils/agent/pastedAttachment.ts +35 -0
  428. package/src/utils/agent/request.ts +32 -3
  429. package/src/utils/agent/toolCalls.ts +7 -1
  430. package/src/utils/api.ts +1 -1
  431. package/src/utils/chat/exportMarkdown.ts +243 -0
  432. package/src/utils/errors.ts +10 -2
  433. package/src/utils/files/expandedDirs.ts +1 -1
  434. package/src/utils/filesPreview/todoPreview.ts +13 -2
  435. package/src/utils/format/date.ts +1 -3
  436. package/src/utils/format/jsonSyntax.ts +5 -0
  437. package/src/utils/html/iframeHeightReporterScript.ts +62 -0
  438. package/src/utils/html/previewCsp.ts +29 -2
  439. package/src/utils/image/htmlSrcAttrs.ts +122 -0
  440. package/src/utils/image/imageRepairInlineScript.ts +115 -0
  441. package/src/utils/image/resolve.ts +17 -3
  442. package/src/utils/image/rewriteMarkdownImageRefs.ts +62 -9
  443. package/src/utils/markdown/frontmatter.ts +125 -0
  444. package/src/utils/markdown/taskList.ts +7 -2
  445. package/src/utils/plugin/runtime.ts +132 -0
  446. package/src/utils/session/mergeSessions.ts +40 -37
  447. package/src/utils/session/sessionEntries.ts +74 -18
  448. package/src/utils/session/sessionHelpers.ts +54 -10
  449. package/src/utils/tools/result.ts +76 -14
  450. package/src/vite-env.d.ts +6 -0
  451. package/client/assets/html2canvas-Cx501zZr-Bug0qRNv.js +0 -5
  452. package/client/assets/index-CY-WpQUm.css +0 -2
  453. package/client/assets/index-DbTz2Mfs.js +0 -4911
  454. package/client/assets/material-symbols-outlined-NzYEeyps.woff2 +0 -0
  455. package/server/api/routes/html.ts +0 -114
  456. package/server/api/routes/todos.ts +0 -293
  457. package/server/api/routes/todosColumnsHandlers.ts +0 -333
  458. package/server/api/routes/todosHandlers.ts +0 -274
  459. package/server/api/routes/todosItemsHandlers.ts +0 -386
  460. package/server/utils/files/todos-io.ts +0 -29
  461. package/src/components/NotificationToast.vue +0 -75
  462. package/src/plugins/editImage/definition.ts +0 -27
  463. package/src/plugins/editImage/index.ts +0 -37
  464. package/src/plugins/presentHtml/helpers.ts +0 -72
  465. package/src/plugins/scheduler/LegacySchedulerView.vue +0 -32
  466. package/src/plugins/scheduler/legacyShape.ts +0 -34
  467. package/src/plugins/todo/Preview.vue +0 -68
  468. package/src/plugins/todo/View.vue +0 -378
  469. package/src/plugins/todo/composables/useTodos.ts +0 -179
  470. package/src/plugins/todo/definition.ts +0 -45
  471. package/src/plugins/todo/index.ts +0 -62
  472. package/src/plugins/todo/labels.ts +0 -163
  473. package/src/plugins/todo/priority.ts +0 -98
  474. package/src/plugins/todo/viewModes.ts +0 -19
  475. package/src/plugins/wiki/definition.ts +0 -25
  476. package/src/tools/legacyPluginNames.ts +0 -13
  477. package/src/utils/format/frontmatter.ts +0 -80
  478. package/src/utils/image/rewriteHtmlImageRefs.ts +0 -50
  479. package/src/utils/notification/dispatch.ts +0 -58
  480. /package/client/assets/{purify.es-Fx1Nqyry-BwJECkqS.js → purify.es-Fx1Nqyry-BSVNht6S.js} +0 -0
  481. /package/src/plugins/{editImage → editImages}/Preview.vue +0 -0
  482. /package/src/plugins/{editImage → editImages}/View.vue +0 -0
  483. /package/src/{config/schedulerActions.ts → plugins/scheduler/actions.ts} +0 -0
package/README.md CHANGED
@@ -18,12 +18,25 @@ Your browser opens to `http://localhost:3001`. That's it.
18
18
  ## Options
19
19
 
20
20
  ```
21
- npx mulmoclaude # Default (port 3001, opens browser)
22
- npx mulmoclaude --port 8080 # Custom port
23
- npx mulmoclaude --no-open # Don't open browser
24
- npx mulmoclaude --version # Show version
21
+ npx mulmoclaude # Default (port 3001, opens browser)
22
+ npx mulmoclaude --port 8080 # Custom port
23
+ npx mulmoclaude --no-open # Don't open browser
24
+ npx mulmoclaude --dev-plugin ./my-plugin # Load a plugin from a local
25
+ # project dir (repeatable;
26
+ # path can be relative or absolute)
27
+ npx mulmoclaude --version # Show version
25
28
  ```
26
29
 
30
+ `--dev-plugin <path>` is the plugin author's dev loop. Pair with
31
+ `yarn dev` (vite watch) in the plugin directory: edits → vite
32
+ rebuilds `dist/` → **the browser auto-reloads** via a debounced
33
+ watcher on the plugin's `dist/`. The plugin's `package.json` name +
34
+ `dist/index.js` must already be in place; the launcher refuses to
35
+ start on missing files or on a name collision with an already-
36
+ installed plugin. Server-side `definePlugin` factory edits still
37
+ require a launcher restart (Node ESM has no cache invalidation API);
38
+ the launcher log explicitly says so when `dist/index.js` changes.
39
+
27
40
  ## How it works
28
41
 
29
42
  The npm package ships with the pre-built client (Vite) and the server
@@ -9,13 +9,14 @@ import { execSync, spawn } from "child_process";
9
9
  import { existsSync } from "fs";
10
10
  import { get as httpGet } from "http";
11
11
  import { createRequire } from "module";
12
- import { join, dirname } from "path";
12
+ import { join, dirname, delimiter as PATH_DELIMITER } from "path";
13
13
  import { fileURLToPath } from "url";
14
14
 
15
15
  // Shared with `server/index.ts` — the launcher and the dev server use
16
16
  // the same probe + fallback logic. See server/utils/port.mjs for why
17
17
  // it's plain JS rather than TypeScript.
18
18
  import { isPortFree, findAvailablePort, MAX_PORT_PROBES } from "../server/utils/port.mjs";
19
+ import { parseDevPluginArgs } from "../server/utils/dev-plugin-args.mjs";
19
20
 
20
21
  const require = createRequire(import.meta.url);
21
22
 
@@ -56,7 +57,11 @@ function waitUntilReady(portNum, onReady) {
56
57
  const timeoutMs = 15000;
57
58
  const intervalMs = 300;
58
59
 
59
- const attempt = () => {
60
+ // `function` declarations (not arrow consts) so the mutual
61
+ // reference between `attempt` and `retry` works without TDZ
62
+ // ordering problems. Both forms are hoisted to the top of the
63
+ // enclosing function scope.
64
+ function attempt() {
60
65
  const req = httpGet({ host: "127.0.0.1", port: portNum, path: "/", timeout: 1000 }, (res) => {
61
66
  res.resume();
62
67
  onReady();
@@ -66,12 +71,12 @@ function waitUntilReady(portNum, onReady) {
66
71
  req.destroy();
67
72
  retry();
68
73
  });
69
- };
74
+ }
70
75
 
71
- const retry = () => {
76
+ function retry() {
72
77
  if (Date.now() - startedAt > timeoutMs) return;
73
78
  setTimeout(attempt, intervalMs);
74
- };
79
+ }
75
80
 
76
81
  attempt();
77
82
  }
@@ -95,21 +100,38 @@ if (args.includes("--help") || args.includes("-h")) {
95
100
  Usage: npx mulmoclaude [options]
96
101
 
97
102
  Options:
98
- --port <number> Server port (default: ${DEFAULT_PORT})
99
- --no-open Don't open browser automatically
100
- --version Show version
101
- --help Show this help
103
+ --port <number> Server port (default: ${DEFAULT_PORT})
104
+ --no-open Don't open browser automatically
105
+ --dev-plugin <path> Load a plugin from a local project dir for development
106
+ (repeatable). Path can be absolute or relative to cwd.
107
+ The dir must have package.json and dist/index.js
108
+ (run \`yarn build\` or \`yarn dev\` in the plugin first).
109
+ --version Show version
110
+ --help Show this help
102
111
  `);
103
112
  process.exit(0);
104
113
  }
105
114
 
106
115
  if (args.includes("--version")) {
107
- console.log("mulmoclaude 0.5.3");
116
+ console.log("mulmoclaude 0.6.0");
108
117
  process.exit(0);
109
118
  }
110
119
 
111
120
  const { requestedPort, portExplicit } = parsePortArg();
112
121
  const noOpen = args.includes("--no-open");
122
+ const devPluginPaths = resolveDevPluginPaths();
123
+
124
+ function resolveDevPluginPaths() {
125
+ const result = parseDevPluginArgs(args, process.cwd());
126
+ if (!result.ok) {
127
+ error(result.reason);
128
+ process.exit(1);
129
+ }
130
+ for (const { rawInput, absPath } of result.resolved) {
131
+ log(`[dev-plugin] ${rawInput} → ${absPath}`);
132
+ }
133
+ return result.resolved.map((entry) => entry.absPath);
134
+ }
113
135
 
114
136
  function parsePortArg() {
115
137
  const idx = args.indexOf("--port");
@@ -180,6 +202,10 @@ log(`Starting MulmoClaude on port ${port}...`);
180
202
  let tsxCli;
181
203
  try {
182
204
  const tsxPkgJson = require.resolve("tsx/package.json");
205
+ // Path is the resolved location of tsx's own package.json under
206
+ // node_modules — not user-influenced, so the dynamic require is
207
+ // safe. require.resolve already validated the path.
208
+ // eslint-disable-next-line security/detect-non-literal-require -- resolved package.json path from require.resolve, not user input
183
209
  const tsxPkg = require(tsxPkgJson);
184
210
  tsxCli = join(dirname(tsxPkgJson), tsxPkg.bin);
185
211
  } catch {
@@ -187,13 +213,18 @@ try {
187
213
  process.exit(1);
188
214
  }
189
215
 
216
+ const serverEnv = {
217
+ ...process.env,
218
+ NODE_ENV: "production",
219
+ PORT: String(port),
220
+ };
221
+ if (devPluginPaths.length > 0) {
222
+ serverEnv.MULMOCLAUDE_DEV_PLUGINS = devPluginPaths.join(PATH_DELIMITER);
223
+ }
224
+
190
225
  const server = spawn(process.execPath, [tsxCli, SERVER_ENTRY], {
191
226
  cwd: PKG_DIR,
192
- env: {
193
- ...process.env,
194
- NODE_ENV: "production",
195
- PORT: String(port),
196
- },
227
+ env: serverEnv,
197
228
  stdio: "inherit",
198
229
  });
199
230
 
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(e&&(t=e(e=0)),t),s=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),c=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},l=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},u=(n,r,a)=>(a=n==null?{}:e(i(n)),l(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),d=e=>a.call(e,`module.exports`)?e[`module.exports`]:l(t({},`__esModule`,{value:!0}),e),f=(e=>typeof require<`u`?require:typeof Proxy<`u`?new Proxy(e,{get:(e,t)=>(typeof require<`u`?require:e)[t]}):e)(function(e){if(typeof require<`u`)return require.apply(this,arguments);throw Error('Calling `require` for "'+e+"\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.")});export{d as a,f as i,o as n,u as o,c as r,s as t};
@@ -0,0 +1 @@
1
+ import"./chunk-CernVdwh.js";var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));export{o as n,c as t};