mulmoclaude 0.5.2 → 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.
- package/Dockerfile.sandbox +100 -0
- package/README.md +17 -4
- package/bin/mulmoclaude.js +46 -15
- package/bin/prepare-dist.js +18 -2
- package/client/assets/chunk-CernVdwh.js +1 -0
- package/client/assets/chunk-D8eiyYIV-C1eAZMzz.js +1 -0
- package/client/assets/html2canvas-CDGcmOD3-BbPeutDg.js +5 -0
- package/client/assets/index-BbgSjFQ8.js +4968 -0
- package/client/assets/index-ECD0lgIv.css +2 -0
- package/client/assets/{index.es-D4YyL_Dg-BgT6a3Nd.js → index.es-DqtpmBm8-DJdTPdnc.js} +5 -5
- package/client/assets/material-symbols-outlined-BLDfUw-_.woff2 +0 -0
- package/client/assets/runtime-protocol-vue-6WYa8hAs.js +1 -0
- package/client/assets/runtime-vue-BVUzgYGA.js +1 -0
- package/client/assets/typeof-DBp4T-Ny-C2xoZtcz.js +1 -0
- package/client/assets/vue-1e_vz2LW.js +1 -0
- package/client/assets/vue.runtime.esm-bundler-DQ8Kjjui.js +4 -0
- package/client/index.html +33 -2
- package/package.json +20 -18
- package/sandbox-entrypoint.sh +106 -0
- package/server/accounting/accountNormalize.ts +32 -0
- package/server/accounting/defaultAccounts.ts +87 -0
- package/server/accounting/eventPublisher.ts +51 -0
- package/server/accounting/journal.ts +252 -0
- package/server/accounting/openingBalances.ts +114 -0
- package/server/accounting/report.ts +237 -0
- package/server/accounting/service.ts +718 -0
- package/server/accounting/snapshotCache.ts +333 -0
- package/server/accounting/timeSeries.ts +265 -0
- package/server/accounting/types.ts +148 -0
- package/server/agent/activeTools.ts +128 -0
- package/server/agent/attachmentConverter.ts +10 -5
- package/server/agent/backend/claude-code.ts +8 -2
- package/server/agent/backend/types.ts +1 -1
- package/server/agent/config.ts +101 -31
- package/server/agent/index.ts +45 -33
- package/server/agent/mcp-server.ts +146 -69
- package/server/agent/mcp-tools/index.ts +1 -5
- package/server/agent/mcp-tools/notify.ts +2 -22
- package/server/agent/mcp-tools/x.ts +0 -4
- package/server/agent/mcpHealth.ts +168 -0
- package/server/agent/plugin-names.ts +20 -77
- package/server/agent/prompt.ts +259 -51
- package/server/agent/resumeFailover.ts +1 -1
- package/server/agent/stream.ts +0 -1
- package/server/api/auth/bearerAuth.ts +5 -5
- package/server/api/csrfGuard.ts +1 -1
- package/server/api/routes/accounting.ts +366 -0
- package/server/api/routes/agent.ts +509 -46
- package/server/api/routes/attachment.ts +104 -0
- package/server/api/routes/chart.ts +2 -1
- package/server/api/routes/config.ts +12 -12
- package/server/api/routes/files.ts +105 -48
- package/server/api/routes/image.ts +70 -25
- package/server/api/routes/journal.ts +35 -0
- package/server/api/routes/mulmo-script.ts +358 -118
- package/server/api/routes/mulmoScriptValidate.ts +1 -1
- package/server/api/routes/news.ts +1 -1
- package/server/api/routes/notifications.ts +92 -22
- package/server/api/routes/notifier.ts +98 -0
- package/server/api/routes/pdf.ts +188 -48
- package/server/api/routes/plugins.ts +34 -14
- package/server/api/routes/presentHtml.ts +58 -3
- package/server/api/routes/roles.ts +1 -8
- package/server/api/routes/runtime-plugin.ts +224 -0
- package/server/api/routes/scheduler.ts +7 -5
- package/server/api/routes/schedulerHandlers.ts +1 -1
- package/server/api/routes/schedulerTasks.ts +8 -7
- package/server/api/routes/sessions.ts +234 -121
- package/server/api/routes/skills.ts +56 -51
- package/server/api/routes/sources.ts +52 -45
- package/server/api/routes/translation.ts +44 -0
- package/server/api/routes/wiki/frontmatter.ts +13 -65
- package/server/api/routes/wiki/history.ts +261 -0
- package/server/api/routes/wiki/pageIndex.ts +1 -1
- package/server/api/routes/wiki.ts +50 -26
- package/server/events/file-change.ts +83 -0
- package/server/events/notifications.ts +247 -91
- package/server/events/pub-sub/index.ts +1 -1
- package/server/events/relay-client.ts +5 -5
- package/server/events/scheduler-adapter.ts +2 -2
- package/server/events/session-store/index.ts +110 -22
- package/server/events/task-manager/index.ts +10 -9
- package/server/index.ts +509 -33
- package/server/notifier/engine.ts +419 -0
- package/server/notifier/legacy-adapters.ts +76 -0
- package/server/notifier/runtime-api.ts +74 -0
- package/server/notifier/store.ts +70 -0
- package/server/notifier/types.ts +121 -0
- package/server/plugins/dev-loader.ts +171 -0
- package/server/plugins/dev-watcher.ts +150 -0
- package/server/plugins/diagnostics.ts +188 -0
- package/server/plugins/preset-list.ts +52 -0
- package/server/plugins/preset-loader.ts +112 -0
- package/server/plugins/runtime-chat-api.ts +38 -0
- package/server/plugins/runtime-loader.ts +430 -0
- package/server/plugins/runtime-registry.ts +112 -0
- package/server/plugins/runtime-tasks-api.ts +50 -0
- package/server/plugins/runtime.ts +378 -0
- package/server/services/translation/cache.ts +72 -0
- package/server/services/translation/index.ts +106 -0
- package/server/services/translation/llm.ts +140 -0
- package/server/services/translation/types.ts +35 -0
- package/server/system/credentials.ts +13 -2
- package/server/system/env.ts +6 -1
- package/server/system/logger/formatters.ts +46 -4
- package/server/system/logger/index.ts +4 -4
- package/server/system/logger/sinks.ts +26 -5
- package/server/system/logger/types.ts +2 -2
- package/server/utils/dev-plugin-args.d.mts +11 -0
- package/server/utils/dev-plugin-args.mjs +43 -0
- package/server/utils/errors.ts +13 -4
- package/server/utils/files/accounting-io.ts +295 -0
- package/server/utils/files/atomic.ts +17 -49
- package/server/utils/files/attachment-store.ts +182 -0
- package/server/utils/files/html-io.ts +1 -7
- package/server/utils/files/html-store.ts +19 -0
- package/server/utils/files/image-store.ts +20 -22
- package/server/utils/files/index.ts +5 -15
- package/server/utils/files/journal-io.ts +7 -35
- package/server/utils/files/json.ts +2 -29
- package/server/utils/files/markdown-image-fill.ts +6 -37
- package/server/utils/files/markdown-store.ts +6 -21
- package/server/utils/files/naming.ts +3 -39
- package/server/utils/files/plugins-io.ts +100 -0
- package/server/utils/files/reference-dirs-io.ts +1 -9
- package/server/utils/files/roles-io.ts +2 -10
- package/server/utils/files/safe.ts +17 -19
- package/server/utils/files/scheduler-io.ts +1 -7
- package/server/utils/files/scheduler-overrides-io.ts +3 -12
- package/server/utils/files/session-io.ts +21 -30
- package/server/utils/files/spreadsheet-store.ts +9 -22
- package/server/utils/files/translation-io.ts +46 -0
- package/server/utils/files/user-tasks-io.ts +1 -7
- package/server/utils/files/workspace-io.ts +3 -79
- package/server/utils/gemini.ts +33 -11
- package/server/utils/html/htmlArtifactSplicer.ts +41 -0
- package/server/utils/markdown/frontmatter.ts +112 -0
- package/server/utils/regex.ts +56 -0
- package/server/utils/router.ts +41 -0
- package/server/utils/slug.ts +5 -3
- package/server/utils/time.ts +12 -0
- package/server/workspace/chat-index/indexer.ts +15 -2
- package/server/workspace/chat-index/summarizer.ts +1 -1
- package/server/workspace/custom-dirs.ts +1 -1
- package/server/workspace/helps/gemini.md +1 -1
- package/server/workspace/helps/guide.md +61 -0
- package/server/workspace/helps/index.md +4 -0
- package/server/workspace/helps/presenthtml.md +80 -0
- package/server/workspace/helps/sandbox.md +7 -0
- package/server/workspace/helps/storyteller.md +101 -0
- package/server/workspace/helps/telegram.md +1 -0
- package/server/workspace/helps/wiki.md +9 -7
- package/server/workspace/journal/archivist-cli.ts +7 -33
- package/server/workspace/journal/archivist-schemas.ts +5 -43
- package/server/workspace/journal/dailyPass.ts +34 -187
- package/server/workspace/journal/diff.ts +3 -28
- package/server/workspace/journal/index.ts +10 -81
- package/server/workspace/journal/indexFile.ts +3 -24
- package/server/workspace/journal/latestDaily.ts +51 -0
- package/server/workspace/journal/memoryExtractor.ts +4 -20
- package/server/workspace/journal/optimizationPass.ts +4 -21
- package/server/workspace/journal/paths.ts +4 -23
- package/server/workspace/journal/state.ts +6 -29
- package/server/workspace/memory/io.ts +213 -0
- package/server/workspace/memory/llm-classifier.ts +158 -0
- package/server/workspace/memory/migrate.ts +263 -0
- package/server/workspace/memory/run.ts +84 -0
- package/server/workspace/memory/topic-cluster.ts +218 -0
- package/server/workspace/memory/topic-detect.ts +67 -0
- package/server/workspace/memory/topic-index-hook.ts +128 -0
- package/server/workspace/memory/topic-io.ts +180 -0
- package/server/workspace/memory/topic-migrate.ts +248 -0
- package/server/workspace/memory/topic-run.ts +172 -0
- package/server/workspace/memory/topic-swap.ts +135 -0
- package/server/workspace/memory/topic-types.ts +142 -0
- package/server/workspace/memory/types.ts +83 -0
- package/server/workspace/news/reader.ts +4 -5
- package/server/workspace/paths.ts +124 -47
- package/server/workspace/roles.ts +2 -11
- package/server/workspace/skills/parser.ts +38 -55
- package/server/workspace/skills/user-tasks.ts +1 -2
- package/server/workspace/skills-preset/mc-library/SKILL.md +188 -0
- package/server/workspace/skills-preset.ts +196 -0
- package/server/workspace/sources/fetchers/githubIssues.ts +13 -11
- package/server/workspace/sources/fetchers/index.ts +1 -1
- package/server/workspace/sources/fetchers/rssParser.ts +1 -1
- package/server/workspace/sources/pipeline/index.ts +2 -2
- package/server/workspace/sources/pipeline/notify.ts +3 -3
- package/server/workspace/sources/pipeline/write.ts +2 -2
- package/server/workspace/sources/registry.ts +39 -61
- package/server/workspace/sources/robots.ts +1 -1
- package/server/workspace/tool-trace/classify.ts +2 -1
- package/server/workspace/tool-trace/index.ts +1 -1
- package/server/workspace/tool-trace/writeSearch.ts +6 -1
- package/server/workspace/wiki-backlinks/index.ts +19 -7
- package/server/workspace/wiki-backlinks/sessionBacklinks.ts +1 -0
- package/server/workspace/wiki-history/hook/snapshot.mjs +98 -0
- package/server/workspace/wiki-history/hook/snapshot.ts +135 -0
- package/server/workspace/wiki-history/provision.ts +181 -0
- package/server/workspace/wiki-pages/io.ts +217 -0
- package/server/workspace/wiki-pages/snapshot.ts +380 -0
- package/server/workspace/workspace.ts +75 -13
- package/src/App.vue +115 -40
- package/src/_runtime/protocol-vue.ts +21 -0
- package/src/_runtime/vue.ts +22 -0
- package/src/components/ChatInput.vue +14 -10
- package/src/components/CopyChatButton.vue +76 -0
- package/src/components/FileContentRenderer.vue +67 -14
- package/src/components/FileTree.vue +2 -2
- package/src/components/FilesView.vue +17 -1
- package/src/components/NewsView.vue +16 -2
- package/src/components/NotificationBell.vue +320 -93
- package/src/components/PageChatComposer.vue +5 -4
- package/src/components/PluginLauncher.vue +42 -6
- package/src/components/PluginScopedRoot.vue +87 -0
- package/src/components/RoleSelector.vue +12 -1
- package/src/components/RolesView.vue +562 -0
- package/src/components/SentAttachmentChip.vue +102 -0
- package/src/components/SessionHistoryPanel.vue +109 -20
- package/src/components/SessionRoleIcon.vue +7 -4
- package/src/components/SessionSidebar.vue +20 -7
- package/src/components/SessionTabBar.vue +1 -1
- package/src/components/SettingsMcpTab.vue +4 -4
- package/src/components/SettingsModal.vue +2 -0
- package/src/components/SidebarHeader.vue +16 -5
- package/src/components/SourcesManager.vue +23 -9
- package/src/components/SourcesView.vue +1 -1
- package/src/components/StackView.vue +102 -6
- package/src/components/SuggestionsPanel.vue +105 -16
- package/src/components/SystemFileBanner.vue +1 -1
- package/src/components/TodoExplorer.vue +4 -5
- package/src/components/todo/TodoAddDialog.vue +2 -3
- package/src/components/todo/TodoEditDialog.vue +1 -2
- package/src/components/todo/TodoEditPanel.vue +2 -3
- package/src/components/todo/TodoKanbanView.vue +8 -5
- package/src/components/todo/TodoListView.vue +3 -5
- package/src/components/todo/TodoTableView.vue +7 -5
- package/src/composables/useAccountingChannel.ts +58 -0
- package/src/composables/useActiveSession.ts +4 -25
- package/src/composables/useAppApi.ts +6 -44
- package/src/composables/useClipboardCopy.ts +3 -20
- package/src/composables/useContentDisplay.ts +33 -2
- package/src/composables/useDevPluginReload.ts +23 -0
- package/src/composables/useDynamicFavicon.ts +5 -31
- package/src/composables/useEventListeners.ts +0 -20
- package/src/composables/useExpandedDirs.ts +4 -15
- package/src/composables/useFaviconState.ts +12 -46
- package/src/composables/useFileChange.ts +53 -0
- package/src/composables/useFreshPluginData.ts +6 -43
- package/src/composables/useHealth.ts +14 -43
- package/src/composables/useImageErrorRepair.ts +104 -0
- package/src/composables/useLatestDaily.ts +40 -0
- package/src/composables/useMarkdownDoc.ts +39 -0
- package/src/composables/useMarkdownLinkHandler.ts +1 -1
- package/src/composables/useMcpTools.ts +3 -16
- package/src/composables/useNotifications.ts +138 -112
- package/src/composables/usePdfDownload.ts +17 -3
- package/src/composables/usePendingCalls.ts +8 -26
- package/src/composables/usePluginErrorBoundary.ts +68 -0
- package/src/composables/usePubSub.ts +9 -17
- package/src/composables/useRunElapsed.ts +5 -22
- package/src/composables/useSandboxStatus.ts +4 -20
- package/src/composables/useSessionDerived.ts +7 -15
- package/src/composables/useSessionHistory.ts +70 -29
- package/src/composables/useSessionSync.ts +25 -3
- package/src/composables/useSkillsList.ts +59 -0
- package/src/composables/useTranslatedQueries.ts +109 -0
- package/src/config/apiRoutes.ts +181 -80
- package/src/config/historyFilters.ts +5 -3
- package/src/config/hostEvents.ts +17 -0
- package/src/config/mcpCatalog.ts +277 -5
- package/src/config/pubsubChannels.ts +134 -12
- package/src/config/roles.ts +212 -147
- package/src/config/systemFileDescriptors.ts +5 -5
- package/src/config/toolNames.ts +52 -30
- package/src/config/workspacePaths.ts +26 -2
- package/src/lang/de.ts +483 -27
- package/src/lang/en.ts +448 -27
- package/src/lang/es.ts +474 -27
- package/src/lang/fr.ts +476 -27
- package/src/lang/ja.ts +465 -27
- package/src/lang/ko.ts +466 -27
- package/src/lang/pt-BR.ts +473 -27
- package/src/lang/zh.ts +463 -27
- package/src/lib/vue-i18n.ts +1 -1
- package/src/lib/wiki-page/slug.ts +66 -0
- package/src/main.ts +85 -0
- package/src/plugins/_extras.ts +58 -0
- package/src/plugins/_generated/metas.ts +42 -0
- package/src/plugins/_generated/registrations.ts +44 -0
- package/src/plugins/_generated/server-bindings.ts +47 -0
- package/src/plugins/accounting/Preview.vue +106 -0
- package/src/plugins/accounting/View.vue +632 -0
- package/src/plugins/accounting/actions.ts +34 -0
- package/src/plugins/accounting/api.ts +301 -0
- package/src/plugins/accounting/components/AccountEditor.vue +250 -0
- package/src/plugins/accounting/components/AccountRow.vue +50 -0
- package/src/plugins/accounting/components/AccountsList.vue +102 -0
- package/src/plugins/accounting/components/AccountsModal.vue +300 -0
- package/src/plugins/accounting/components/BalanceSheet.vue +186 -0
- package/src/plugins/accounting/components/BookSettings.vue +284 -0
- package/src/plugins/accounting/components/BookSwitcher.vue +78 -0
- package/src/plugins/accounting/components/DateRangePicker.vue +140 -0
- package/src/plugins/accounting/components/JournalEntryForm.vue +504 -0
- package/src/plugins/accounting/components/JournalList.vue +553 -0
- package/src/plugins/accounting/components/Ledger.vue +206 -0
- package/src/plugins/accounting/components/NewBookForm.vue +211 -0
- package/src/plugins/accounting/components/OpeningBalancesForm.vue +271 -0
- package/src/plugins/accounting/components/ProfitLoss.vue +160 -0
- package/src/plugins/accounting/components/accountDraft.ts +13 -0
- package/src/plugins/accounting/components/accountNumbering.ts +103 -0
- package/src/plugins/accounting/components/accountValidation.ts +75 -0
- package/src/plugins/accounting/components/useLatestRequest.ts +44 -0
- package/src/plugins/accounting/countries.ts +158 -0
- package/src/plugins/accounting/currencies.ts +64 -0
- package/src/plugins/accounting/dates.ts +51 -0
- package/src/plugins/accounting/definition.ts +199 -0
- package/src/plugins/accounting/fiscalYear.ts +136 -0
- package/src/plugins/accounting/index.ts +49 -0
- package/src/plugins/accounting/meta.ts +91 -0
- package/src/plugins/accounting/timeSeriesEnums.ts +16 -0
- package/src/plugins/api.ts +125 -0
- package/src/plugins/canvas/View.vue +38 -28
- package/src/plugins/canvas/definition.ts +10 -8
- package/src/plugins/canvas/index.ts +15 -8
- package/src/plugins/canvas/meta.ts +12 -0
- package/src/plugins/chart/Preview.vue +1 -1
- package/src/plugins/chart/View.vue +2 -2
- package/src/plugins/chart/definition.ts +12 -2
- package/src/plugins/chart/index.ts +15 -7
- package/src/plugins/chart/meta.ts +18 -0
- package/src/plugins/editImages/definition.ts +44 -0
- package/src/plugins/editImages/index.ts +43 -0
- package/src/plugins/editImages/meta.ts +5 -0
- package/src/plugins/generateImage/View.vue +3 -1
- package/src/plugins/generateImage/definition.ts +2 -0
- package/src/plugins/generateImage/index.ts +13 -5
- package/src/plugins/generateImage/meta.ts +5 -0
- package/src/plugins/index.ts +35 -0
- package/src/plugins/manageRoles/Preview.vue +7 -4
- package/src/plugins/manageRoles/View.vue +12 -8
- package/src/plugins/manageRoles/definition.ts +6 -0
- package/src/plugins/manageRoles/index.ts +7 -6
- package/src/plugins/manageSkills/View.vue +11 -7
- package/src/plugins/manageSkills/definition.ts +4 -1
- package/src/plugins/manageSkills/index.ts +14 -7
- package/src/plugins/manageSkills/meta.ts +21 -0
- package/src/plugins/manageSource/definition.ts +4 -1
- package/src/plugins/manageSource/index.ts +15 -7
- package/src/plugins/manageSource/meta.ts +21 -0
- package/src/plugins/markdown/Preview.vue +10 -8
- package/src/plugins/markdown/View.vue +84 -17
- package/src/plugins/markdown/definition.ts +7 -1
- package/src/plugins/markdown/index.ts +15 -8
- package/src/plugins/markdown/meta.ts +16 -0
- package/src/plugins/meta-types.ts +97 -0
- package/src/plugins/metas.ts +224 -0
- package/src/plugins/presentForm/Preview.vue +4 -15
- package/src/plugins/presentForm/View.vue +35 -78
- package/src/plugins/presentForm/definition.ts +7 -6
- package/src/plugins/presentForm/index.ts +12 -5
- package/src/plugins/presentForm/meta.ts +11 -0
- package/src/plugins/presentForm/plugin.ts +8 -9
- package/src/plugins/presentForm/types.ts +0 -24
- package/src/plugins/presentHtml/Preview.vue +1 -8
- package/src/plugins/presentHtml/View.vue +401 -30
- package/src/plugins/presentHtml/definition.ts +8 -5
- package/src/plugins/presentHtml/index.ts +15 -8
- package/src/plugins/presentHtml/meta.ts +14 -0
- package/src/plugins/presentMulmoScript/View.vue +327 -107
- package/src/plugins/presentMulmoScript/definition.ts +34 -7
- package/src/plugins/presentMulmoScript/helpers.ts +4 -5
- package/src/plugins/presentMulmoScript/index.ts +20 -7
- package/src/plugins/presentMulmoScript/meta.ts +52 -0
- package/src/plugins/scheduler/AutomationsPreview.vue +2 -8
- package/src/plugins/scheduler/Preview.vue +5 -2
- package/src/plugins/scheduler/TasksTab.vue +16 -36
- package/src/plugins/scheduler/View.vue +22 -54
- package/src/plugins/scheduler/automationsDefinition.ts +14 -9
- package/src/plugins/scheduler/automationsMeta.ts +5 -0
- package/src/plugins/scheduler/calendarDefinition.ts +4 -7
- package/src/plugins/scheduler/calendarMeta.ts +28 -0
- package/src/plugins/scheduler/formatSchedule.ts +6 -24
- package/src/plugins/scheduler/index.ts +26 -52
- package/src/plugins/scope.ts +57 -0
- package/src/plugins/server-bindings-types.ts +38 -0
- package/src/plugins/server.ts +32 -0
- package/src/plugins/skill/Preview.vue +25 -0
- package/src/plugins/skill/View.vue +125 -0
- package/src/plugins/skill/definition.ts +23 -0
- package/src/plugins/skill/index.ts +36 -0
- package/src/plugins/skill/plugin.ts +31 -0
- package/src/plugins/skill/types.ts +21 -0
- package/src/plugins/spreadsheet/Preview.vue +1 -3
- package/src/plugins/spreadsheet/View.vue +29 -49
- package/src/plugins/spreadsheet/cellHighlights.ts +2 -3
- package/src/plugins/spreadsheet/definition.ts +5 -2
- package/src/plugins/spreadsheet/index.ts +15 -8
- package/src/plugins/spreadsheet/keyboardNav.ts +38 -0
- package/src/plugins/spreadsheet/meta.ts +14 -0
- package/src/plugins/textResponse/Preview.vue +9 -1
- package/src/plugins/textResponse/View.vue +59 -8
- package/src/plugins/textResponse/index.ts +11 -3
- package/src/plugins/textResponse/plugin.ts +8 -10
- package/src/plugins/textResponse/types.ts +28 -0
- package/src/plugins/wiki/Preview.vue +6 -4
- package/src/plugins/wiki/View.vue +463 -254
- package/src/plugins/wiki/components/WikiPageBody.vue +159 -0
- package/src/plugins/wiki/helpers.ts +17 -0
- package/src/plugins/wiki/history/HistoryDetail.vue +325 -0
- package/src/plugins/wiki/history/HistoryTab.vue +167 -0
- package/src/plugins/wiki/history/RestoreConfirm.vue +63 -0
- package/src/plugins/wiki/history/api.ts +52 -0
- package/src/plugins/wiki/history/diff.ts +145 -0
- package/src/plugins/wiki/index.ts +42 -32
- package/src/plugins/wiki/meta.ts +10 -0
- package/src/plugins/wiki/pageEditLoader.ts +53 -0
- package/src/plugins/wiki/route.ts +8 -0
- package/src/router/guards.ts +2 -1
- package/src/router/index.ts +19 -0
- package/src/router/pageRoutes.ts +1 -0
- package/src/tools/index.ts +50 -51
- package/src/tools/runtimeLoader.ts +141 -0
- package/src/tools/types.ts +44 -1
- package/src/types/notification.ts +23 -0
- package/src/types/pastedFile.ts +10 -0
- package/src/types/session.ts +61 -3
- package/src/types/sse.ts +21 -6
- package/src/utils/agent/eventDispatch.ts +12 -9
- package/src/utils/agent/pastedAttachment.ts +35 -0
- package/src/utils/agent/request.ts +32 -3
- package/src/utils/agent/toolCalls.ts +7 -1
- package/src/utils/api.ts +1 -1
- package/src/utils/chat/exportMarkdown.ts +243 -0
- package/src/utils/errors.ts +10 -2
- package/src/utils/files/expandedDirs.ts +1 -1
- package/src/utils/filesPreview/todoPreview.ts +13 -2
- package/src/utils/format/date.ts +1 -3
- package/src/utils/format/jsonSyntax.ts +5 -0
- package/src/utils/html/iframeHeightReporterScript.ts +62 -0
- package/src/utils/html/previewCsp.ts +29 -2
- package/src/utils/image/htmlSrcAttrs.ts +122 -0
- package/src/utils/image/imageRepairInlineScript.ts +115 -0
- package/src/utils/image/resolve.ts +17 -3
- package/src/utils/image/rewriteMarkdownImageRefs.ts +62 -9
- package/src/utils/markdown/frontmatter.ts +125 -0
- package/src/utils/markdown/taskList.ts +7 -2
- package/src/utils/plugin/runtime.ts +132 -0
- package/src/utils/session/mergeSessions.ts +40 -37
- package/src/utils/session/sessionEntries.ts +74 -18
- package/src/utils/session/sessionHelpers.ts +54 -10
- package/src/utils/tools/result.ts +76 -14
- package/src/vite-env.d.ts +6 -0
- package/client/assets/html2canvas-Cx501zZr-Bug0qRNv.js +0 -5
- package/client/assets/index-CY-WpQUm.css +0 -2
- package/client/assets/index-DbTz2Mfs.js +0 -4911
- package/client/assets/material-symbols-outlined-NzYEeyps.woff2 +0 -0
- package/server/api/routes/html.ts +0 -114
- package/server/api/routes/todos.ts +0 -293
- package/server/api/routes/todosColumnsHandlers.ts +0 -333
- package/server/api/routes/todosHandlers.ts +0 -274
- package/server/api/routes/todosItemsHandlers.ts +0 -386
- package/server/utils/files/todos-io.ts +0 -29
- package/src/components/NotificationToast.vue +0 -75
- package/src/plugins/editImage/definition.ts +0 -27
- package/src/plugins/editImage/index.ts +0 -37
- package/src/plugins/presentHtml/helpers.ts +0 -72
- package/src/plugins/scheduler/LegacySchedulerView.vue +0 -32
- package/src/plugins/scheduler/legacyShape.ts +0 -34
- package/src/plugins/todo/Preview.vue +0 -68
- package/src/plugins/todo/View.vue +0 -378
- package/src/plugins/todo/composables/useTodos.ts +0 -179
- package/src/plugins/todo/definition.ts +0 -45
- package/src/plugins/todo/index.ts +0 -62
- package/src/plugins/todo/labels.ts +0 -163
- package/src/plugins/todo/priority.ts +0 -98
- package/src/plugins/todo/viewModes.ts +0 -19
- package/src/plugins/wiki/definition.ts +0 -25
- package/src/tools/legacyPluginNames.ts +0 -13
- package/src/utils/format/frontmatter.ts +0 -80
- package/src/utils/image/rewriteHtmlImageRefs.ts +0 -50
- package/src/utils/notification/dispatch.ts +0 -58
- /package/client/assets/{purify.es-Fx1Nqyry-BwJECkqS.js → purify.es-Fx1Nqyry-BSVNht6S.js} +0 -0
- /package/src/plugins/{editImage → editImages}/Preview.vue +0 -0
- /package/src/plugins/{editImage → editImages}/View.vue +0 -0
- /package/src/{config/schedulerActions.ts → plugins/scheduler/actions.ts} +0 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Storyteller Template (MulmoScript)
|
|
2
|
+
|
|
3
|
+
Use `presentMulmoScript` to create character-driven, narrated stories. Follow this template exactly.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
Reach for `presentMulmoScript` when the user asks for a story, fairy tale, narrative, or any character-driven imaginative content meant to be read aloud over visuals.
|
|
8
|
+
|
|
9
|
+
## Beat Format (CRITICAL)
|
|
10
|
+
|
|
11
|
+
- Every beat MUST have a top-level `imagePrompt` (string) and `imageNames` (array of character keys from `imageParams.images`).
|
|
12
|
+
- NEVER use an `image` object with a `type` field — no `textSlide`, `chart`, `mermaid`, `html_tailwind`, `markdown` on any beat.
|
|
13
|
+
- `imagePrompt` and `imageNames` are top-level fields on the beat, NOT nested under `image`.
|
|
14
|
+
- Every beat needs both fields, even when a single character appears alone.
|
|
15
|
+
|
|
16
|
+
## Image Prompts
|
|
17
|
+
|
|
18
|
+
- Do NOT re-describe character appearance in `imagePrompt` — their look is already encoded in `imageParams.images`.
|
|
19
|
+
- Focus the prompt on setting, action, mood, and composition.
|
|
20
|
+
- Set the art style ONCE in `imageParams.style` — do NOT repeat it per beat. The style is applied globally.
|
|
21
|
+
|
|
22
|
+
## Narrator Voice
|
|
23
|
+
|
|
24
|
+
Set `speechOptions.instruction` on the Narrator speaker to match the story's tone. Pick a `voiceId` from this list:
|
|
25
|
+
|
|
26
|
+
| Tone | Voice IDs |
|
|
27
|
+
|---|---|
|
|
28
|
+
| Bright / upbeat | Zephyr, Leda, Autonoe, Callirrhoe |
|
|
29
|
+
| Neutral / clear | Kore, Charon, Fenrir, Orus |
|
|
30
|
+
| Warm / smooth | Schedar, Sulafat, Despina, Erinome |
|
|
31
|
+
| Deep / authoritative | Alnilam, Iapetus, Algieba |
|
|
32
|
+
| Soft / gentle | Aoede, Umbriel, Laomedeia, Achernar, Rasalgethi, Pulcherrima, Vindemiatrix, Sadachbia, Sadaltager, Zubenelgenubi |
|
|
33
|
+
|
|
34
|
+
## Other Rules
|
|
35
|
+
|
|
36
|
+
- Always use Google providers (`gemini` for TTS, `google` for image generation).
|
|
37
|
+
- Default transition: `fade` in `movieParams.transition`, unless the user requests a different style.
|
|
38
|
+
- Keep narration text conversational and evocative, as if read aloud to a listener.
|
|
39
|
+
|
|
40
|
+
## Template
|
|
41
|
+
|
|
42
|
+
```json
|
|
43
|
+
{
|
|
44
|
+
"$mulmocast": { "version": "1.1" },
|
|
45
|
+
"title": "The Silver Wolf and the Red-Haired Girl",
|
|
46
|
+
"description": "A girl lost in an enchanted forest befriends a wise silver wolf who shows her the way home.",
|
|
47
|
+
"lang": "en",
|
|
48
|
+
"speechParams": {
|
|
49
|
+
"speakers": {
|
|
50
|
+
"Narrator": {
|
|
51
|
+
"provider": "gemini",
|
|
52
|
+
"voiceId": "Schedar",
|
|
53
|
+
"displayName": { "en": "Narrator" },
|
|
54
|
+
"speechOptions": {
|
|
55
|
+
"instruction": "Speak as a warm, captivating storyteller — slow and deliberate, with gentle wonder for magical moments and tender warmth for emotional ones."
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
"imageParams": {
|
|
61
|
+
"provider": "google",
|
|
62
|
+
"model": "gemini-3.1-flash-image-preview",
|
|
63
|
+
"style": "painterly watercolor illustration",
|
|
64
|
+
"images": {
|
|
65
|
+
"mara": {
|
|
66
|
+
"type": "imagePrompt",
|
|
67
|
+
"prompt": "A girl, age 10, with wild curly red hair and bright green eyes, wearing a worn blue dress and muddy boots, curious and brave expression"
|
|
68
|
+
},
|
|
69
|
+
"wolf": {
|
|
70
|
+
"type": "imagePrompt",
|
|
71
|
+
"prompt": "A large silver wolf with a thick luminous coat, wise amber eyes, and a calm, gentle demeanor — majestic but not threatening"
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"movieParams": {
|
|
76
|
+
"provider": "google",
|
|
77
|
+
"model": "veo-3.1-generate",
|
|
78
|
+
"transition": { "type": "fade", "duration": 0.5 }
|
|
79
|
+
},
|
|
80
|
+
"beats": [
|
|
81
|
+
{
|
|
82
|
+
"speaker": "Narrator",
|
|
83
|
+
"text": "Deep in the emerald forest, young Mara wandered further than she ever had before.",
|
|
84
|
+
"imageNames": ["mara"],
|
|
85
|
+
"imagePrompt": "A small figure standing at the edge of a vast ancient forest, towering trees with glowing moss, golden afternoon light filtering through the canopy, a sense of wonder and apprehension"
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"speaker": "Narrator",
|
|
89
|
+
"text": "Then, from the shadows between the roots, came the Silver Wolf — ancient, patient, and utterly still.",
|
|
90
|
+
"imageNames": ["mara", "wolf"],
|
|
91
|
+
"imagePrompt": "A girl and a large wolf facing each other in a misty forest clearing, shafts of light between them, tension softening into curiosity"
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"speaker": "Narrator",
|
|
95
|
+
"text": "Side by side, they walked through the night until the lanterns of home flickered into view.",
|
|
96
|
+
"imageNames": ["mara", "wolf"],
|
|
97
|
+
"imagePrompt": "A girl and a wolf walking together along a moonlit forest path, distant warm cottage lights glowing through the trees, fireflies drifting around them"
|
|
98
|
+
}
|
|
99
|
+
]
|
|
100
|
+
}
|
|
101
|
+
```
|
|
@@ -108,6 +108,7 @@ These are typed directly into the Telegram chat. They mirror the CLI:
|
|
|
108
108
|
- `/roles` — list available roles.
|
|
109
109
|
- `/role <id>` — switch to a specific role (e.g. `/role office`).
|
|
110
110
|
- `/status` — show the current session info (session ID, current role).
|
|
111
|
+
- `//<skill> [args...]` — shortcut for `/reset` followed by `/<skill> [args...]`: start a fresh session and run the skill (with any args) in one tap (e.g. `//mag2 https://example.com/post`).
|
|
111
112
|
|
|
112
113
|
Any other text is treated as a message to the assistant.
|
|
113
114
|
|
|
@@ -145,16 +145,18 @@ Pre-existing 3- or 4-column tables (without a Tags header) keep parsing; their e
|
|
|
145
145
|
|
|
146
146
|
- A page's YAML frontmatter `tags:` field is the source of truth for that page's tags.
|
|
147
147
|
- The tags recorded for that slug in `index.md` must match the frontmatter set exactly (order and case don't matter; we compare as a lowercased set).
|
|
148
|
-
-
|
|
148
|
+
- The Lint button on the `/wiki` UI flags any mismatch as **Tag drift**. Fix by updating whichever side is stale.
|
|
149
149
|
|
|
150
|
-
##
|
|
150
|
+
## Browsing the wiki
|
|
151
151
|
|
|
152
|
-
|
|
152
|
+
Wiki page Writes/Edits the LLM performs render inline in the chat automatically — no extra display call needed.
|
|
153
153
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
- `
|
|
157
|
-
-
|
|
154
|
+
For browse / lint queries, point the user at the `/wiki` UI:
|
|
155
|
+
|
|
156
|
+
- `/wiki` — the page catalog (with tag filters)
|
|
157
|
+
- `/wiki/pages/<slug>` — a specific page
|
|
158
|
+
- `/wiki/log` — the activity log
|
|
159
|
+
- The Lint button on `/wiki` runs a health check
|
|
158
160
|
|
|
159
161
|
## Relationship to `memory.md`
|
|
160
162
|
|
|
@@ -1,30 +1,13 @@
|
|
|
1
|
-
//
|
|
2
|
-
// CLI as a subprocess so summarization runs against the user's
|
|
3
|
-
// subscription quota rather than the API key budget.
|
|
4
|
-
//
|
|
5
|
-
// The pure data shapes (interfaces, prompts, validators) live in
|
|
6
|
-
// `./archivist-schemas.ts`. This file is the only one that touches
|
|
7
|
-
// `node:child_process`, kept thin so dependency injection in tests
|
|
8
|
-
// never has to mock a subprocess.
|
|
1
|
+
// Spawning the Claude Code CLI runs summarization against the user's subscription quota rather than the API-key budget.
|
|
9
2
|
|
|
10
3
|
import { spawn } from "node:child_process";
|
|
11
4
|
import { CLI_SUBPROCESS_TIMEOUT_MS } from "../../utils/time.js";
|
|
12
5
|
|
|
13
|
-
// (systemPrompt, userPrompt) → raw model output as a string.
|
|
14
|
-
// The daily/optimization passes parse JSON out of the string
|
|
15
|
-
// themselves; this layer stays transport-only.
|
|
16
6
|
export type Summarize = (systemPrompt: string, userPrompt: string) => Promise<string>;
|
|
17
7
|
|
|
18
|
-
// Wall-clock cap per CLI invocation. 5 minutes is comfortably above
|
|
19
|
-
// the worst-case summarization run we've seen and still short enough
|
|
20
|
-
// that a wedged subprocess doesn't tie up resources forever.
|
|
21
8
|
const CLI_TIMEOUT_MS = CLI_SUBPROCESS_TIMEOUT_MS;
|
|
22
9
|
|
|
23
|
-
//
|
|
24
|
-
// what to do — journal disables itself for the rest of the server
|
|
25
|
-
// lifetime; chat-index / sources log and skip. The message is
|
|
26
|
-
// subsystem-neutral so callers logging `err.message` verbatim (e.g.
|
|
27
|
-
// chat-index) don't surface a misleading "journal disabled" warning.
|
|
10
|
+
// Subsystem-neutral message: chat-index / sources also catch this and would otherwise log a misleading "journal disabled".
|
|
28
11
|
export class ClaudeCliNotFoundError extends Error {
|
|
29
12
|
constructor() {
|
|
30
13
|
super("`claude` CLI is not available on PATH");
|
|
@@ -43,11 +26,9 @@ export class ClaudeCliFailedError extends Error {
|
|
|
43
26
|
}
|
|
44
27
|
}
|
|
45
28
|
|
|
46
|
-
//
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
export const runClaudeCli: Summarize = async (systemPrompt, userPrompt) => {
|
|
50
|
-
return new Promise((resolve, reject) => {
|
|
29
|
+
// Pipe the combined prompt via stdin to dodge shell-argv limits for large day excerpts.
|
|
30
|
+
export const runClaudeCli: Summarize = async (systemPrompt, userPrompt) =>
|
|
31
|
+
new Promise((resolve, reject) => {
|
|
51
32
|
const child = spawn("claude", ["-p", "--output-format", "text"], {
|
|
52
33
|
stdio: ["pipe", "pipe", "pipe"],
|
|
53
34
|
});
|
|
@@ -95,8 +76,7 @@ export const runClaudeCli: Summarize = async (systemPrompt, userPrompt) => {
|
|
|
95
76
|
}
|
|
96
77
|
});
|
|
97
78
|
|
|
98
|
-
// Surface
|
|
99
|
-
// before we finished writing) instead of silently dropping them.
|
|
79
|
+
// Surface EPIPE etc. — child may exit before we finish writing.
|
|
100
80
|
child.stdin.on("error", (err: Error) => {
|
|
101
81
|
if (settled) return;
|
|
102
82
|
settled = true;
|
|
@@ -104,12 +84,7 @@ export const runClaudeCli: Summarize = async (systemPrompt, userPrompt) => {
|
|
|
104
84
|
reject(err);
|
|
105
85
|
});
|
|
106
86
|
|
|
107
|
-
//
|
|
108
|
-
// signals backpressure (write returns false), wait for "drain"
|
|
109
|
-
// before calling end() so we don't close stdin while the buffer
|
|
110
|
-
// still has data to flush. For typical archivist prompts this
|
|
111
|
-
// path rarely fires, but very large session excerpts can reach
|
|
112
|
-
// it.
|
|
87
|
+
// Wait for "drain" on backpressure before end() so the buffer fully flushes — large excerpts can hit this path.
|
|
113
88
|
const payload = `${systemPrompt}\n\n---\n\n${userPrompt}`;
|
|
114
89
|
const flushed = child.stdin.write(payload);
|
|
115
90
|
if (flushed) {
|
|
@@ -118,4 +93,3 @@ export const runClaudeCli: Summarize = async (systemPrompt, userPrompt) => {
|
|
|
118
93
|
child.stdin.once("drain", () => child.stdin.end());
|
|
119
94
|
}
|
|
120
95
|
});
|
|
121
|
-
};
|
|
@@ -1,22 +1,8 @@
|
|
|
1
|
-
// Data shapes, prompts, and validators for the journal archivist.
|
|
2
|
-
// Pure module — no IO, no subprocess, no global state. The CLI
|
|
3
|
-
// transport (subprocess wrapper, error classes, default Summarize)
|
|
4
|
-
// lives in `./archivist-cli.ts`.
|
|
5
|
-
//
|
|
6
|
-
// Splitting these used to be one file (`archivist.ts`), but it had
|
|
7
|
-
// grown to 386 lines mixing transport with schemas. Keeping prompts
|
|
8
|
-
// + validators separate lets tests / future passes import the data
|
|
9
|
-
// shapes without dragging in `node:child_process`.
|
|
10
|
-
|
|
11
1
|
import { isRecord } from "../../utils/types.js";
|
|
12
2
|
|
|
13
|
-
// --- Daily archivist contract ---------------------------------------
|
|
14
|
-
|
|
15
3
|
export interface SessionEventExcerpt {
|
|
16
4
|
source: string; // "user" | "assistant" | "tool" | ...
|
|
17
5
|
type: string; // "text" | "tool_result" | ...
|
|
18
|
-
// One-line human-readable rendering of the event, already
|
|
19
|
-
// truncated to a sane length by the caller.
|
|
20
6
|
content: string;
|
|
21
7
|
}
|
|
22
8
|
|
|
@@ -24,10 +10,7 @@ export interface SessionExcerpt {
|
|
|
24
10
|
sessionId: string;
|
|
25
11
|
roleId: string;
|
|
26
12
|
events: SessionEventExcerpt[];
|
|
27
|
-
// Workspace-relative
|
|
28
|
-
// calls (e.g. "stories/foo.json", "HTMLs/bar.html",
|
|
29
|
-
// "wiki/pages/baz.md"). Surfaced so the archivist can emit
|
|
30
|
-
// navigable markdown links to them in the summaries.
|
|
13
|
+
// Workspace-relative paths the archivist links from the summary (e.g. "stories/foo.json", "wiki/pages/baz.md").
|
|
31
14
|
artifactPaths: string[];
|
|
32
15
|
}
|
|
33
16
|
|
|
@@ -56,9 +39,7 @@ export interface DailyArchivistOutput {
|
|
|
56
39
|
topicUpdates: TopicUpdate[];
|
|
57
40
|
}
|
|
58
41
|
|
|
59
|
-
//
|
|
60
|
-
// model does a much better job with explicit rules and an example
|
|
61
|
-
// than with a terse instruction.
|
|
42
|
+
// Long-form: the model does notably better with explicit rules + an example than with a terse instruction.
|
|
62
43
|
export const DAILY_SYSTEM_PROMPT = `You are the journal archivist for a personal MulmoClaude workspace.
|
|
63
44
|
Your job: given raw session excerpts for a single day, produce
|
|
64
45
|
(1) a daily summary and (2) updates to long-running topic notes.
|
|
@@ -107,8 +88,6 @@ SESSION LINKS
|
|
|
107
88
|
LANGUAGE
|
|
108
89
|
- Match the language of the source sessions. Always.`;
|
|
109
90
|
|
|
110
|
-
// Build the user-side prompt for one day's worth of content.
|
|
111
|
-
// Pure string construction — safe to unit test if we ever want to.
|
|
112
91
|
export function buildDailyUserPrompt(input: DailyArchivistInput): string {
|
|
113
92
|
const parts: string[] = [];
|
|
114
93
|
parts.push(`DATE: ${input.date}`);
|
|
@@ -132,9 +111,7 @@ export function buildDailyUserPrompt(input: DailyArchivistInput): string {
|
|
|
132
111
|
}
|
|
133
112
|
parts.push("");
|
|
134
113
|
|
|
135
|
-
//
|
|
136
|
-
// sessions produced, deduped and sorted. Given to the archivist
|
|
137
|
-
// so it can link to them from the summary text.
|
|
114
|
+
// Dedupe + sort artifact paths so the archivist can link to them from the summary.
|
|
138
115
|
const allArtifacts = new Set<string>();
|
|
139
116
|
for (const sessionExcerpt of input.sessionExcerpts) {
|
|
140
117
|
for (const artifactPath of sessionExcerpt.artifactPaths) allArtifacts.add(artifactPath);
|
|
@@ -162,12 +139,9 @@ export function buildDailyUserPrompt(input: DailyArchivistInput): string {
|
|
|
162
139
|
return parts.join("\n");
|
|
163
140
|
}
|
|
164
141
|
|
|
165
|
-
// --- Optimization archivist contract --------------------------------
|
|
166
|
-
|
|
167
142
|
export interface OptimizationTopicSnapshot {
|
|
168
143
|
slug: string;
|
|
169
|
-
// First ~500 chars
|
|
170
|
-
// judge similarity without blowing up prompt size.
|
|
144
|
+
// First ~500 chars — enough to judge similarity without blowing up prompt size.
|
|
171
145
|
headContent: string;
|
|
172
146
|
}
|
|
173
147
|
|
|
@@ -227,21 +201,9 @@ export function buildOptimizationUserPrompt(input: OptimizationInput): string {
|
|
|
227
201
|
return parts.join("\n");
|
|
228
202
|
}
|
|
229
203
|
|
|
230
|
-
//
|
|
231
|
-
|
|
232
|
-
// Tolerant JSON extractor: prefers a ```json fenced block; falls back
|
|
233
|
-
// to scanning for the first balanced `{ ... }` block. Returns `null`
|
|
234
|
-
// on failure so callers can log-and-skip instead of crash.
|
|
235
|
-
//
|
|
236
|
-
// JSON extraction helpers moved to server/utils/json.ts.
|
|
237
|
-
// Re-export here so journal callers (and existing tests) keep a
|
|
238
|
-
// single import surface for the archivist contract.
|
|
204
|
+
// Re-exported so journal callers + existing tests keep a single import surface for the archivist contract.
|
|
239
205
|
export { extractJsonObject, findBalancedBraceBlock } from "../../utils/json.js";
|
|
240
206
|
|
|
241
|
-
// --- Validators ------------------------------------------------------
|
|
242
|
-
|
|
243
|
-
// Type guards used by callers to validate parsed output. Written as
|
|
244
|
-
// guards rather than `as` casts per project conventions.
|
|
245
207
|
export function isDailyArchivistOutput(value: unknown): value is DailyArchivistOutput {
|
|
246
208
|
if (!isRecord(value)) return false;
|
|
247
209
|
const recordValue = value as Record<string, unknown>;
|