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,100 @@
|
|
|
1
|
+
FROM node:22-slim
|
|
2
|
+
|
|
3
|
+
# Sandbox tool set (see #162). Grouped into layers by purpose so the
|
|
4
|
+
# rationale is obvious from the diff:
|
|
5
|
+
#
|
|
6
|
+
# 1. Core CLI — read local git history, fetch over HTTP, pipeline JSON,
|
|
7
|
+
# run Makefile-driven workspaces, handle archives, query SQLite.
|
|
8
|
+
# `ca-certificates` is needed because `node:22-slim` ships without
|
|
9
|
+
# a trust store. `ripgrep` backs Claude's grep tool.
|
|
10
|
+
# 2. Data analysis + plotting — Python with pandas/numpy/matplotlib
|
|
11
|
+
# and `requests` for API fetches. Graphviz for structural diagrams.
|
|
12
|
+
# ImageMagick for raster ops. Covers the "investment / data / chart"
|
|
13
|
+
# and "visualize this workflow" use cases in the issue.
|
|
14
|
+
# 3. Document + media conversion — pandoc bridges Markdown ↔ PDF/DOCX/
|
|
15
|
+
# HTML/EPUB for report output. ffmpeg covers audio/video transcode
|
|
16
|
+
# and probing. poppler-utils extracts text / images from PDFs.
|
|
17
|
+
# 4. Small extras — `tree` for directory listing, `bc` for arbitrary-
|
|
18
|
+
# precision arithmetic, `less` for pagers.
|
|
19
|
+
#
|
|
20
|
+
# Deferred on purpose:
|
|
21
|
+
#
|
|
22
|
+
# - `@mermaid-js/mermaid-cli` — pulls in headless Chromium (~300MB).
|
|
23
|
+
# Revisit as a separate layer if diagram generation becomes common.
|
|
24
|
+
# - `texlive-*` — ~150MB+ for marginal PDF quality gains over pandoc's
|
|
25
|
+
# default LaTeX-free path; add when a user actually needs math/
|
|
26
|
+
# journal-style typesetting.
|
|
27
|
+
# - `gh` CLI — now installed (Layer 1b). Auth via SANDBOX_MOUNT_CONFIGS=gh
|
|
28
|
+
# which mounts ~/.config/gh:ro into the container (#259).
|
|
29
|
+
#
|
|
30
|
+
# Runtime `pip install` is intentionally NOT wired up. Everything the
|
|
31
|
+
# agent might need for data work is preinstalled at build time so
|
|
32
|
+
# supply-chain risk stays out of the sandbox.
|
|
33
|
+
|
|
34
|
+
# Layer 1: core CLI + SSH client (needed for SSH agent forwarding #259)
|
|
35
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
36
|
+
git \
|
|
37
|
+
curl \
|
|
38
|
+
jq \
|
|
39
|
+
make \
|
|
40
|
+
ca-certificates \
|
|
41
|
+
openssh-client \
|
|
42
|
+
sqlite3 \
|
|
43
|
+
zip \
|
|
44
|
+
unzip \
|
|
45
|
+
ripgrep \
|
|
46
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
47
|
+
|
|
48
|
+
# Layer 1b: GitHub CLI (#164). Installed from the official apt repo.
|
|
49
|
+
# Auth is provided at runtime via SANDBOX_MOUNT_CONFIGS=gh which
|
|
50
|
+
# bind-mounts ~/.config/gh:ro (#259). On macOS where the token lives
|
|
51
|
+
# in the system keyring, the server falls back to GH_TOKEN env var.
|
|
52
|
+
RUN curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg \
|
|
53
|
+
-o /usr/share/keyrings/githubcli-archive-keyring.gpg \
|
|
54
|
+
&& echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" \
|
|
55
|
+
> /etc/apt/sources.list.d/github-cli.list \
|
|
56
|
+
&& apt-get update && apt-get install -y --no-install-recommends gh \
|
|
57
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
58
|
+
|
|
59
|
+
# Layer 2: data analysis + plotting
|
|
60
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
61
|
+
python3 \
|
|
62
|
+
python3-pip \
|
|
63
|
+
graphviz \
|
|
64
|
+
imagemagick \
|
|
65
|
+
&& rm -rf /var/lib/apt/lists/* \
|
|
66
|
+
&& pip3 install --no-cache-dir --break-system-packages \
|
|
67
|
+
pandas \
|
|
68
|
+
numpy \
|
|
69
|
+
matplotlib \
|
|
70
|
+
requests
|
|
71
|
+
|
|
72
|
+
# Layer 3: document + media conversion
|
|
73
|
+
# LibreOffice core + Impress + Writer enable server-side PPTX→PDF and
|
|
74
|
+
# DOCX→PDF conversion for the attachment pipeline (#386). Only the
|
|
75
|
+
# headless renderer is used (`--headless --convert-to pdf`).
|
|
76
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
77
|
+
pandoc \
|
|
78
|
+
ffmpeg \
|
|
79
|
+
poppler-utils \
|
|
80
|
+
libreoffice-core \
|
|
81
|
+
libreoffice-impress \
|
|
82
|
+
libreoffice-writer \
|
|
83
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
84
|
+
|
|
85
|
+
# Layer 4: small extras
|
|
86
|
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
87
|
+
tree \
|
|
88
|
+
bc \
|
|
89
|
+
less \
|
|
90
|
+
&& rm -rf /var/lib/apt/lists/*
|
|
91
|
+
|
|
92
|
+
RUN npm install -g @anthropic-ai/claude-code tsx
|
|
93
|
+
|
|
94
|
+
COPY sandbox-entrypoint.sh /sandbox-entrypoint.sh
|
|
95
|
+
RUN chmod +x /sandbox-entrypoint.sh
|
|
96
|
+
|
|
97
|
+
# No `USER node` — the entrypoint starts as root to fix /etc/passwd
|
|
98
|
+
# and socket permissions, then drops to HOST_UID:HOST_GID via setpriv.
|
|
99
|
+
WORKDIR /home/node/mulmoclaude
|
|
100
|
+
ENTRYPOINT ["/sandbox-entrypoint.sh"]
|
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
|
|
22
|
-
npx mulmoclaude --port 8080
|
|
23
|
-
npx mulmoclaude --no-open
|
|
24
|
-
npx mulmoclaude --
|
|
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
|
package/bin/mulmoclaude.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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>
|
|
99
|
-
--no-open
|
|
100
|
-
--
|
|
101
|
-
|
|
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.
|
|
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
|
|
package/bin/prepare-dist.js
CHANGED
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
// ── Publish ───────────────────────────────────────────────────
|
|
32
32
|
// cd packages/mulmoclaude && npm publish --access public
|
|
33
33
|
|
|
34
|
-
import { cpSync, existsSync, rmSync } from "fs";
|
|
34
|
+
import { copyFileSync, cpSync, existsSync, rmSync } from "fs";
|
|
35
35
|
import { join, dirname } from "path";
|
|
36
36
|
import { fileURLToPath } from "url";
|
|
37
37
|
|
|
@@ -42,11 +42,16 @@ const rootDir = join(pkgDir, "..", "..");
|
|
|
42
42
|
// ── Clean ───────────────────────────────────────────────────
|
|
43
43
|
|
|
44
44
|
// Include `dist` so leftovers from the older pre-built-JS layout are
|
|
45
|
-
// wiped on re-run.
|
|
45
|
+
// wiped on re-run. Stale sandbox files are removed too so a renamed
|
|
46
|
+
// or deleted source file doesn't ride along into the tarball.
|
|
46
47
|
for (const dir of ["dist", "client", "server", "src"]) {
|
|
47
48
|
const target = join(pkgDir, dir);
|
|
48
49
|
if (existsSync(target)) rmSync(target, { recursive: true });
|
|
49
50
|
}
|
|
51
|
+
for (const file of ["Dockerfile.sandbox", "sandbox-entrypoint.sh"]) {
|
|
52
|
+
const target = join(pkgDir, file);
|
|
53
|
+
if (existsSync(target)) rmSync(target);
|
|
54
|
+
}
|
|
50
55
|
|
|
51
56
|
// ── Client dist (Vite build output) ─────────────────────────
|
|
52
57
|
// Copied to `client/` (not `dist/client/`) so the server's
|
|
@@ -89,5 +94,16 @@ cpSync(join(rootDir, "src"), join(pkgDir, "src"), {
|
|
|
89
94
|
});
|
|
90
95
|
console.log("✓ shared src/");
|
|
91
96
|
|
|
97
|
+
// ── Sandbox build context ───────────────────────────────────
|
|
98
|
+
// `server/system/docker.ts` builds the sandbox image via `docker build
|
|
99
|
+
// -f Dockerfile.sandbox .` with cwd = pkgDir. The Dockerfile in turn
|
|
100
|
+
// `COPY`s `sandbox-entrypoint.sh`, so both files must sit at pkgDir
|
|
101
|
+
// or sandbox mode silently falls back to unrestricted execution.
|
|
102
|
+
|
|
103
|
+
for (const file of ["Dockerfile.sandbox", "sandbox-entrypoint.sh"]) {
|
|
104
|
+
copyFileSync(join(rootDir, file), join(pkgDir, file));
|
|
105
|
+
}
|
|
106
|
+
console.log("✓ sandbox build context");
|
|
107
|
+
|
|
92
108
|
console.log("\nReady to publish. Run:");
|
|
93
109
|
console.log(" cd packages/mulmoclaude && npm publish --access public");
|
|
@@ -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};
|