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
package/src/lang/en.ts
CHANGED
|
@@ -55,11 +55,13 @@ const enMessages = {
|
|
|
55
55
|
attachFile: "Attach file",
|
|
56
56
|
fileTooLarge: "File too large ({sizeMB} MB). Maximum is 30 MB.",
|
|
57
57
|
unsupportedFileType: "File type not supported. Accepted: images, PDF, DOCX, XLSX, PPTX, text files.",
|
|
58
|
+
attachImageFailed: "Failed to attach image: {error}",
|
|
58
59
|
},
|
|
59
60
|
sessionHistoryPanel: {
|
|
60
61
|
filters: {
|
|
61
62
|
all: "All",
|
|
62
63
|
unread: "Unread",
|
|
64
|
+
bookmarked: "Bookmarked",
|
|
63
65
|
human: "Human",
|
|
64
66
|
scheduler: "Scheduler",
|
|
65
67
|
skill: "Skill",
|
|
@@ -72,18 +74,44 @@ const enMessages = {
|
|
|
72
74
|
running: "Running",
|
|
73
75
|
noMessages: "(no messages)",
|
|
74
76
|
openRowAria: "Open session: {preview}",
|
|
77
|
+
rowMenuAria: "Session actions",
|
|
78
|
+
bookmark: "Bookmark",
|
|
79
|
+
unbookmark: "Remove bookmark",
|
|
80
|
+
delete: "Delete",
|
|
81
|
+
deleteConfirm: "Delete this session?\n\n{preview}\n\nThis cannot be undone.",
|
|
75
82
|
},
|
|
76
83
|
notificationBell: {
|
|
77
84
|
notifications: "Notifications",
|
|
78
|
-
|
|
79
|
-
|
|
85
|
+
activeSection: "Active",
|
|
86
|
+
historySection: "History",
|
|
87
|
+
noActive: "No active notifications",
|
|
88
|
+
noHistory: "No recent activity",
|
|
89
|
+
clearAll: "Clear",
|
|
80
90
|
dismiss: "Dismiss",
|
|
91
|
+
cancel: "Cancel",
|
|
92
|
+
},
|
|
93
|
+
pluginDiagnostics: {
|
|
94
|
+
title: "Plugin configuration issue",
|
|
95
|
+
hostBody: 'Plugin "{plugin}" tried to register the {label} key "{key}" but it is reserved by the host. The plugin\'s entry has been dropped.',
|
|
96
|
+
intraBody: 'Plugins "{first}" and "{second}" both register {dimension} "{key}". "{first}" claimed it first, so "{second}"\'s registration is ignored.',
|
|
97
|
+
},
|
|
98
|
+
pluginErrorBoundary: {
|
|
99
|
+
title: "Plugin {pkg} crashed",
|
|
100
|
+
subtitle: "The plugin failed to render. The error has been logged to the console.",
|
|
101
|
+
showDetails: "Show details",
|
|
102
|
+
hideDetails: "Hide details",
|
|
103
|
+
retry: "Retry",
|
|
81
104
|
},
|
|
82
105
|
sidebarHeader: {
|
|
83
106
|
home: "Go to latest chat",
|
|
84
107
|
toolCallHistory: "Tool call history",
|
|
85
108
|
settings: "Settings",
|
|
86
109
|
settingsGeminiMissing: "Settings — Gemini API key missing",
|
|
110
|
+
todayJournal: "Today's journal",
|
|
111
|
+
todayJournalNotFound: "No journal summary yet — chat for a while and the journal will generate one.",
|
|
112
|
+
todayJournalLoadFailed: "Failed to load journal (status {status}): {error}",
|
|
113
|
+
copyMarkdown: "Copy chat as Markdown",
|
|
114
|
+
copiedMarkdown: "Copied!",
|
|
87
115
|
},
|
|
88
116
|
rightSidebar: {
|
|
89
117
|
toggleSystemPrompt: "Toggle system prompt",
|
|
@@ -223,6 +251,114 @@ const enMessages = {
|
|
|
223
251
|
pdfPreview: "PDF preview",
|
|
224
252
|
parseError: "parse error",
|
|
225
253
|
},
|
|
254
|
+
filesView: {
|
|
255
|
+
chatPlaceholder: "Ask about this file…",
|
|
256
|
+
},
|
|
257
|
+
// SystemFileBanner copy. Each id matches a descriptor in
|
|
258
|
+
// src/config/systemFileDescriptors.ts. `title` is the chip-style
|
|
259
|
+
// headline above the file body; `summary` is one or two sentences
|
|
260
|
+
// explaining what the file is, who edits it, and why the banner is
|
|
261
|
+
// showing. Edit-policy chip labels go under `editPolicy`; the
|
|
262
|
+
// remaining keys (schemaLabel, showDetails, hideDetails) are
|
|
263
|
+
// banner chrome.
|
|
264
|
+
systemFiles: {
|
|
265
|
+
schemaLabel: "Schema",
|
|
266
|
+
showDetails: "Show details",
|
|
267
|
+
hideDetails: "Hide details",
|
|
268
|
+
editPolicy: {
|
|
269
|
+
"agent-managed-but-hand-editable": "Agent-managed (hand-edit OK)",
|
|
270
|
+
"user-editable": "User-editable",
|
|
271
|
+
"agent-managed": "Agent-managed",
|
|
272
|
+
"fragile-format": "Fragile format",
|
|
273
|
+
ephemeral: "Ephemeral",
|
|
274
|
+
},
|
|
275
|
+
interests: {
|
|
276
|
+
title: "Interests config",
|
|
277
|
+
summary: "Topics that the news / sources pipeline watches and ranks for you. Editable by hand; the agent also updates it from chat.",
|
|
278
|
+
},
|
|
279
|
+
mcp: {
|
|
280
|
+
title: "MCP servers",
|
|
281
|
+
summary: "External Model Context Protocol servers attached to the agent. Add HTTP or stdio servers to expand the agent's tool surface.",
|
|
282
|
+
},
|
|
283
|
+
settings: {
|
|
284
|
+
title: "App settings",
|
|
285
|
+
summary: "User-editable behavioural preferences for the app — Gemini API key, allowed tools, sandbox config, and similar.",
|
|
286
|
+
},
|
|
287
|
+
schedulerTasks: {
|
|
288
|
+
title: "Scheduler tasks",
|
|
289
|
+
summary: "Recurring agent automations that fire on a schedule. Managed via the Automations UI; this file is the on-disk source of truth.",
|
|
290
|
+
},
|
|
291
|
+
schedulerOverrides: {
|
|
292
|
+
title: "Scheduler overrides",
|
|
293
|
+
summary:
|
|
294
|
+
"Per-task time / interval overrides applied on top of the system schedule. The agent edits this when you ask to change a recurring task's timing.",
|
|
295
|
+
},
|
|
296
|
+
newsReadState: {
|
|
297
|
+
title: "News read state",
|
|
298
|
+
summary: "Local-only tracking of which news items you've seen. Ephemeral — safe to delete; will be regenerated as you read.",
|
|
299
|
+
},
|
|
300
|
+
schedulerItems: {
|
|
301
|
+
title: "Scheduler items queue",
|
|
302
|
+
summary: "Active scheduled invocations ready to fire. Agent-managed; do not hand-edit unless you know exactly what each field means.",
|
|
303
|
+
},
|
|
304
|
+
todosItems: {
|
|
305
|
+
title: "Todo items",
|
|
306
|
+
summary: 'Your tasks across all columns of the kanban board. The agent writes here when you say things like "add a todo"; you can also hand-edit.',
|
|
307
|
+
},
|
|
308
|
+
todosColumns: {
|
|
309
|
+
title: "Todo columns",
|
|
310
|
+
summary: "Column layout of the kanban board (titles, order, ids). User-editable — rename or reorder freely.",
|
|
311
|
+
},
|
|
312
|
+
wikiIndex: {
|
|
313
|
+
title: "Wiki index",
|
|
314
|
+
summary: "Auto-generated index of every wiki page. Refreshed on each wiki edit; do not hand-edit (your changes will be overwritten).",
|
|
315
|
+
},
|
|
316
|
+
wikiLog: {
|
|
317
|
+
title: "Wiki edit log",
|
|
318
|
+
summary: "Activity log of wiki page creates and edits. Agent-managed and append-only; useful as a recent-changes feed.",
|
|
319
|
+
},
|
|
320
|
+
wikiSummary: {
|
|
321
|
+
title: "Wiki summary",
|
|
322
|
+
summary: "Auto-generated overview of the wiki — topic clusters, page counts, recent activity. Refreshed by the agent.",
|
|
323
|
+
},
|
|
324
|
+
wikiSchema: {
|
|
325
|
+
title: "Wiki schema",
|
|
326
|
+
summary: "The format spec the agent reads to keep wiki pages consistent. Fragile — the agent expects a specific structure, so prefer agent-driven edits.",
|
|
327
|
+
},
|
|
328
|
+
memory: {
|
|
329
|
+
title: "Memory",
|
|
330
|
+
summary:
|
|
331
|
+
"Distilled facts about you, always loaded as context for new conversations. The journal extractor appends here automatically; you can also hand-edit.",
|
|
332
|
+
},
|
|
333
|
+
summariesIndex: {
|
|
334
|
+
title: "Summaries index",
|
|
335
|
+
summary: "Browseable index linking the daily and topic summaries the journal generates. Agent-managed; refreshed on each journal pass.",
|
|
336
|
+
},
|
|
337
|
+
rolesJson: {
|
|
338
|
+
title: "Role definition (JSON)",
|
|
339
|
+
summary: "Role configuration — model choice, MCP servers, allowed plugins, query suggestions. User-editable; restart not required.",
|
|
340
|
+
},
|
|
341
|
+
rolesMd: {
|
|
342
|
+
title: "Role description (Markdown)",
|
|
343
|
+
summary: "The role's persona and system-prompt prose, loaded as context when this role is active. User-editable; changes apply on the next message.",
|
|
344
|
+
},
|
|
345
|
+
sourceFeed: {
|
|
346
|
+
title: "Source feed",
|
|
347
|
+
summary: "One subscribed source (RSS, GitHub releases / issues, arXiv, etc.). User-editable; the sources pipeline polls these on schedule.",
|
|
348
|
+
},
|
|
349
|
+
sourceState: {
|
|
350
|
+
title: "Source state",
|
|
351
|
+
summary: "Ephemeral pipeline state for one source — last-seen ids, ETags, fetch errors. Safe to delete; will be regenerated on the next pipeline run.",
|
|
352
|
+
},
|
|
353
|
+
journalDaily: {
|
|
354
|
+
title: "Daily journal summary",
|
|
355
|
+
summary: "Auto-generated recap of your activity for one calendar day, distilled from chat sessions by the journal pass.",
|
|
356
|
+
},
|
|
357
|
+
journalTopic: {
|
|
358
|
+
title: "Topic journal",
|
|
359
|
+
summary: "Long-running notes for one specific topic, accumulated and revised as you keep talking about it. Agent-managed.",
|
|
360
|
+
},
|
|
361
|
+
},
|
|
226
362
|
settingsMcpTab: {
|
|
227
363
|
explanation:
|
|
228
364
|
"Add external MCP servers. HTTP servers work in every mode. Stdio servers use the sandbox image's {npx} / {node} / {tsx}; paths must live under the workspace when Docker is enabled.",
|
|
@@ -307,10 +443,79 @@ const enMessages = {
|
|
|
307
443
|
},
|
|
308
444
|
},
|
|
309
445
|
},
|
|
446
|
+
appleNative: {
|
|
447
|
+
displayName: "Apple Native Apps (macOS)",
|
|
448
|
+
description: "Read and write Reminders, Calendar, Notes, Mail and Maps via AppleScript. macOS only — no credentials needed.",
|
|
449
|
+
},
|
|
450
|
+
gmail: {
|
|
451
|
+
displayName: "Gmail",
|
|
452
|
+
description: "Read, send, and label your Gmail. Uses a Google OAuth client you create in your own Google Cloud project (no app verification needed).",
|
|
453
|
+
field: {
|
|
454
|
+
credentials: {
|
|
455
|
+
label: "Path to credentials.json",
|
|
456
|
+
help: "Google Cloud Console → APIs & Services → Credentials → OAuth client ID (Desktop app). Download credentials.json and paste its absolute path.",
|
|
457
|
+
},
|
|
458
|
+
},
|
|
459
|
+
},
|
|
460
|
+
googleCalendar: {
|
|
461
|
+
displayName: "Google Calendar",
|
|
462
|
+
description: "Read and create Google Calendar events. Same BYO Google OAuth credentials.json pattern as Gmail.",
|
|
463
|
+
field: {
|
|
464
|
+
credentials: {
|
|
465
|
+
label: "Path to credentials.json",
|
|
466
|
+
help: "Same Google Cloud OAuth client as Gmail. Reuse the file or create a separate Calendar-scoped one.",
|
|
467
|
+
},
|
|
468
|
+
},
|
|
469
|
+
},
|
|
470
|
+
googleDrive: {
|
|
471
|
+
displayName: "Google Drive",
|
|
472
|
+
description: "Search and read Google Drive files. BYO Google OAuth credentials — token is cached locally next to the file.",
|
|
473
|
+
field: {
|
|
474
|
+
credentials: {
|
|
475
|
+
label: "Path to credentials.json",
|
|
476
|
+
help: "Google Cloud Console → APIs & Services → Credentials → OAuth client ID (Desktop app). Enable the Google Drive API in the same project.",
|
|
477
|
+
},
|
|
478
|
+
},
|
|
479
|
+
},
|
|
480
|
+
github: {
|
|
481
|
+
displayName: "GitHub",
|
|
482
|
+
description:
|
|
483
|
+
"Read repos, issues, PRs and run searches with a Personal Access Token. Scope the token narrowly — write scopes (e.g. `repo`) let the agent push to any repo you can access.",
|
|
484
|
+
field: {
|
|
485
|
+
token: {
|
|
486
|
+
label: "Personal Access Token",
|
|
487
|
+
help: "GitHub → Settings → Developer settings → Personal access tokens. Prefer fine-grained tokens limited to the repos you want the agent to touch.",
|
|
488
|
+
},
|
|
489
|
+
},
|
|
490
|
+
},
|
|
491
|
+
linear: {
|
|
492
|
+
displayName: "Linear",
|
|
493
|
+
description: "Read and update Linear issues, projects and cycles via a personal API key.",
|
|
494
|
+
field: {
|
|
495
|
+
apiKey: {
|
|
496
|
+
label: "Linear API key",
|
|
497
|
+
help: "Linear → Settings → API → Personal API keys. Click 🔑 to open the page and click Create key.",
|
|
498
|
+
},
|
|
499
|
+
},
|
|
500
|
+
},
|
|
310
501
|
weatherOpenMeteo: {
|
|
311
502
|
displayName: "Weather (Open-Meteo)",
|
|
312
503
|
description: "Free weather forecasts and current conditions worldwide — no API key needed.",
|
|
313
504
|
},
|
|
505
|
+
spotify: {
|
|
506
|
+
displayName: "Spotify",
|
|
507
|
+
description: "Search tracks, manage playlists, control playback. BYO Spotify developer app — Client ID only (PKCE flow, no client secret).",
|
|
508
|
+
field: {
|
|
509
|
+
clientId: {
|
|
510
|
+
label: "Client ID",
|
|
511
|
+
help: "Spotify Developer Dashboard → Create app, set Redirect URI to http://127.0.0.1:8888/callback, copy the Client ID. Then run `SPOTIFY_CLIENT_ID=<id> npx spotify-mcp@latest auth` once in your terminal to log in (refresh token is cached at ~/.spotify-mcp/tokens.json).",
|
|
512
|
+
},
|
|
513
|
+
},
|
|
514
|
+
},
|
|
515
|
+
youtubeTranscript: {
|
|
516
|
+
displayName: "YouTube transcript",
|
|
517
|
+
description: "Fetch the captions for any public YouTube video by URL. No credentials needed.",
|
|
518
|
+
},
|
|
314
519
|
},
|
|
315
520
|
config: {
|
|
316
521
|
howToGet: "How to get this",
|
|
@@ -372,6 +577,8 @@ const enMessages = {
|
|
|
372
577
|
redo: "Redo",
|
|
373
578
|
clear: "Clear",
|
|
374
579
|
styleLabel: "Style:",
|
|
580
|
+
stylePromptWithPath: "Turn the image at `{path}` into a {style} style image.",
|
|
581
|
+
stylePromptNoPath: "Turn my drawing on the canvas into a {style} style image.",
|
|
375
582
|
},
|
|
376
583
|
pluginChart: {
|
|
377
584
|
untitled: "Chart",
|
|
@@ -379,20 +586,196 @@ const enMessages = {
|
|
|
379
586
|
chartTitle: "Chart {num}",
|
|
380
587
|
png: "PNG",
|
|
381
588
|
},
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
589
|
+
pluginAccounting: {
|
|
590
|
+
title: "Accounting",
|
|
591
|
+
noBook: 'No books yet — click "+ New book" above to create your first one.',
|
|
592
|
+
common: {
|
|
593
|
+
cancel: "Cancel",
|
|
594
|
+
loading: "Loading…",
|
|
595
|
+
error: "Error: {error}",
|
|
596
|
+
empty: "No entries yet.",
|
|
597
|
+
},
|
|
598
|
+
tabs: {
|
|
599
|
+
journal: "Journal",
|
|
600
|
+
newEntry: "New entry",
|
|
601
|
+
opening: "Opening",
|
|
602
|
+
accounts: "Accounts",
|
|
603
|
+
ledger: "Ledger",
|
|
604
|
+
balanceSheet: "Balance sheet",
|
|
605
|
+
profitLoss: "P&L",
|
|
606
|
+
settings: "Settings",
|
|
607
|
+
},
|
|
608
|
+
bookSwitcher: {
|
|
609
|
+
label: "Book",
|
|
610
|
+
newBook: "New book…",
|
|
611
|
+
create: "Create",
|
|
612
|
+
nameLabel: "Name",
|
|
613
|
+
currencyLabel: "Currency",
|
|
614
|
+
countryLabel: "Country",
|
|
615
|
+
countryPlaceholder: "Select a country…",
|
|
616
|
+
countryHint: "The country sets the tax jurisdiction so the assistant can give country-specific advice (T-number for Japan, VAT ID for the EU, etc.).",
|
|
617
|
+
fiscalYearEndLabel: "Fiscal year end",
|
|
618
|
+
fiscalYearEndQ1: "March 31 (Q1)",
|
|
619
|
+
fiscalYearEndQ2: "June 30 (Q2)",
|
|
620
|
+
fiscalYearEndQ3: "September 30 (Q3)",
|
|
621
|
+
fiscalYearEndQ4: "December 31 (Q4)",
|
|
622
|
+
fiscalYearEndHint: "Determines the fiscal year boundary used by the date-range shortcuts in this book. Default is December 31 (Q4 — calendar year).",
|
|
623
|
+
placeholder: "Pick a book…",
|
|
624
|
+
firstRunHint:
|
|
625
|
+
"Pick a name, currency, country, and fiscal year end for your first book. The currency is set per-book and is hard to change once you start booking entries.",
|
|
626
|
+
},
|
|
627
|
+
deletedNotice: {
|
|
628
|
+
title: '"{bookName}" has been deleted.',
|
|
629
|
+
body: "Pick another book from the dropdown above, or create a new one.",
|
|
630
|
+
},
|
|
631
|
+
journalList: {
|
|
632
|
+
fromLabel: "From",
|
|
633
|
+
toLabel: "To",
|
|
634
|
+
accountLabel: "Account",
|
|
635
|
+
allAccounts: "All accounts",
|
|
636
|
+
void: "Void",
|
|
637
|
+
edit: "Edit",
|
|
638
|
+
voidConfirm: "Void this entry? The original stays in the journal; a reversing pair is appended.",
|
|
639
|
+
voidReason: "Reason (optional):",
|
|
640
|
+
columns: { date: "Date", kind: "Kind", memo: "Memo", lines: "Lines" },
|
|
641
|
+
kind: { normal: "—", opening: "Opening", void: "Reverse", voidMarker: "Void marker" },
|
|
642
|
+
},
|
|
643
|
+
entryForm: {
|
|
644
|
+
title: "New journal entry",
|
|
645
|
+
editTitle: "Edit journal entry",
|
|
646
|
+
editBanner: "When you submit, the original entry will be voided and replaced by this one.",
|
|
647
|
+
dateLabel: "Date",
|
|
648
|
+
memoLabel: "Memo",
|
|
649
|
+
accountLabel: "Account",
|
|
650
|
+
debitLabel: "Debit",
|
|
651
|
+
creditLabel: "Credit",
|
|
652
|
+
taxRegistrationIdLabel: "Tax registration ID",
|
|
653
|
+
taxRegistrationIdPlaceholder: "T-number / VAT ID / GSTIN…",
|
|
654
|
+
taxRegistrationIdMissingWarning: "Required",
|
|
655
|
+
addLine: "Add line",
|
|
656
|
+
removeLine: "Remove",
|
|
657
|
+
submit: "Post entry",
|
|
658
|
+
submitting: "Posting…",
|
|
659
|
+
update: "Update entry",
|
|
660
|
+
updating: "Updating…",
|
|
661
|
+
cancelEdit: "Cancel",
|
|
662
|
+
success: "Entry posted.",
|
|
663
|
+
editSuccess: "Entry updated.",
|
|
664
|
+
editVoidReason: "edited",
|
|
665
|
+
imbalance: "Imbalance: {amount}",
|
|
666
|
+
balanced: "Balanced ✓",
|
|
667
|
+
},
|
|
668
|
+
openingForm: {
|
|
669
|
+
title: "Opening balances",
|
|
670
|
+
asOfLabel: "As of",
|
|
671
|
+
explainer:
|
|
672
|
+
"Enter your balance-sheet positions as of the start date. Income / expense accounts are not allowed here. Σ debit must equal Σ credit; the difference plug-in is Retained Earnings.",
|
|
673
|
+
emptyHint:
|
|
674
|
+
"It's fine to save with everything blank — you can update opening balances later. The book just needs an opening on file before other tabs unlock.",
|
|
675
|
+
explainer2: "Balance-sheet accounts only.",
|
|
676
|
+
submit: "Save opening balances",
|
|
677
|
+
replaceWarning: "Saving replaces the existing opening (the old one is voided in the journal).",
|
|
678
|
+
none: "No opening balance set yet.",
|
|
679
|
+
setBy: "Set as of {date}",
|
|
680
|
+
success: "Opening balances saved.",
|
|
681
|
+
},
|
|
682
|
+
ledger: {
|
|
683
|
+
selectAccount: "Select account",
|
|
684
|
+
closingBalance: "Closing balance",
|
|
685
|
+
columns: { date: "Date", memo: "Memo", debit: "Debit", credit: "Credit", balance: "Balance", taxRegistrationId: "Tax registration ID" },
|
|
686
|
+
},
|
|
687
|
+
dateRange: {
|
|
688
|
+
shortcutLabel: "Range",
|
|
689
|
+
currentQuarter: "Current quarter",
|
|
690
|
+
previousQuarter: "Last quarter",
|
|
691
|
+
currentYear: "Current year",
|
|
692
|
+
previousYear: "Last year",
|
|
693
|
+
lifetime: "Lifetime",
|
|
694
|
+
all: "All",
|
|
695
|
+
fromLabel: "From",
|
|
696
|
+
toLabel: "To",
|
|
697
|
+
},
|
|
698
|
+
balanceSheet: {
|
|
699
|
+
asOfLabel: "Period",
|
|
700
|
+
sections: { asset: "Assets", liability: "Liabilities", equity: "Equity" },
|
|
701
|
+
total: "Total",
|
|
702
|
+
imbalance: "Imbalance: {amount}",
|
|
703
|
+
currentEarnings: "Current period earnings",
|
|
704
|
+
shortcutLabel: "Shortcut",
|
|
705
|
+
thisMonth: "This month",
|
|
706
|
+
lastMonth: "Last month",
|
|
707
|
+
lastQuarter: "Last quarter",
|
|
708
|
+
lastYear: "Last year",
|
|
709
|
+
},
|
|
710
|
+
profitLoss: { fromLabel: "From", toLabel: "To", income: "Income", expense: "Expense", netIncome: "Net income:" },
|
|
711
|
+
accounts: {
|
|
712
|
+
listEmpty: "No accounts in this category yet.",
|
|
713
|
+
openLedgerAria: "Open ledger for {code} {name}",
|
|
714
|
+
manageButton: "Manage accounts",
|
|
715
|
+
modalTitle: "Manage accounts",
|
|
716
|
+
addAccount: "Add account",
|
|
717
|
+
sectionTitle: {
|
|
718
|
+
asset: "Assets",
|
|
719
|
+
liability: "Liabilities",
|
|
720
|
+
equity: "Equity",
|
|
721
|
+
income: "Income",
|
|
722
|
+
expense: "Expenses",
|
|
723
|
+
},
|
|
724
|
+
columnCode: "Code",
|
|
725
|
+
columnName: "Name",
|
|
726
|
+
columnType: "Type",
|
|
727
|
+
columnNote: "Note",
|
|
728
|
+
typeOption: {
|
|
729
|
+
asset: "Asset",
|
|
730
|
+
liability: "Liability",
|
|
731
|
+
equity: "Equity",
|
|
732
|
+
income: "Income",
|
|
733
|
+
expense: "Expense",
|
|
734
|
+
},
|
|
735
|
+
edit: "Edit",
|
|
736
|
+
save: "Save",
|
|
737
|
+
cancel: "Cancel",
|
|
738
|
+
saving: "Saving…",
|
|
739
|
+
addToCategory: "Add {type} account",
|
|
740
|
+
deactivate: "Deactivate",
|
|
741
|
+
reactivate: "Activate",
|
|
742
|
+
deactivateConfirm: 'Hide "{name}" from entry/ledger dropdowns? Existing journal entries are unaffected.',
|
|
743
|
+
errorEmptyCode: "Code is required.",
|
|
744
|
+
errorReservedCode: "Codes starting with “_” are reserved for system rows.",
|
|
745
|
+
errorInvalidCodeFormat: "Account code must be exactly 4 digits.",
|
|
746
|
+
errorCodeTypeMismatch: "Code must match the account type: 1xxx asset, 2xxx liability, 3xxx equity, 4xxx income, 5xxx expense.",
|
|
747
|
+
errorEmptyName: "Name is required.",
|
|
748
|
+
errorDuplicateCode: "An account with this code already exists.",
|
|
749
|
+
errorDuplicateName: "An account with this name already exists.",
|
|
750
|
+
success: "Account saved.",
|
|
751
|
+
codeReadOnlyHint: "Code can't be changed once an account is created.",
|
|
752
|
+
noteOptional: "(optional)",
|
|
753
|
+
},
|
|
754
|
+
settings: {
|
|
755
|
+
bookInfo: "Book information",
|
|
756
|
+
bookInfoExplain: "Edit the country to update tax-jurisdiction-specific advice. Currency cannot be changed once entries are booked.",
|
|
757
|
+
countryUnset: "(not set)",
|
|
758
|
+
fiscalYearEndExplain: "Changes only how date-range shortcuts resolve from now on; existing journal entries are not moved.",
|
|
759
|
+
saveChanges: "Save changes",
|
|
760
|
+
updateOk: "Book updated.",
|
|
761
|
+
rebuild: "Rebuild snapshots",
|
|
762
|
+
rebuildExplain: "Drops every cached monthly snapshot and recomputes them from the journal. Safe to run; useful after editing journal files by hand.",
|
|
763
|
+
rebuildOk: "Rebuilt {count} period(s).",
|
|
764
|
+
advanced: "Advanced…",
|
|
765
|
+
deleteBook: "Delete book",
|
|
766
|
+
deleteBookExplain: "Permanently deletes this book's directory. Cannot be undone.",
|
|
767
|
+
deleteBookConfirm: 'Type "{bookName}" to confirm:',
|
|
768
|
+
deleteBookButton: "Delete forever",
|
|
769
|
+
},
|
|
770
|
+
preview: {
|
|
771
|
+
entry: "Posted entry on {date}",
|
|
772
|
+
pl: "P&L {from} → {to}: net {net}",
|
|
773
|
+
bs: "Balance sheet as of {date} · assets {assets}",
|
|
774
|
+
bookCreated: 'Created book "{name}" ({id})',
|
|
775
|
+
},
|
|
776
|
+
previewSummary: "Accounting · {bookId}",
|
|
777
|
+
previewError: "Accounting: {error}",
|
|
778
|
+
previewGeneric: "Accounting result",
|
|
396
779
|
},
|
|
397
780
|
todoExplorer: {
|
|
398
781
|
heading: "Todo",
|
|
@@ -409,14 +792,6 @@ const enMessages = {
|
|
|
409
792
|
newColumnPlaceholder: "Review",
|
|
410
793
|
noMatchingFilter: "No items match the current filter",
|
|
411
794
|
},
|
|
412
|
-
todoPreview: {
|
|
413
|
-
completedRatio: "{done}/{total} completed",
|
|
414
|
-
moreItems: "+ {count} more…",
|
|
415
|
-
headerIcon: "☑",
|
|
416
|
-
doneIcon: "✓",
|
|
417
|
-
pendingIcon: "○",
|
|
418
|
-
moreLabels: "+{count}",
|
|
419
|
-
},
|
|
420
795
|
todoDialogs: {
|
|
421
796
|
addTitle: "Add Todo",
|
|
422
797
|
editTitle: "Edit Todo",
|
|
@@ -446,6 +821,7 @@ const enMessages = {
|
|
|
446
821
|
noMatchingFilter: "No items match the current filter",
|
|
447
822
|
sortColumnAria: "Sort by {column}",
|
|
448
823
|
expandRowAria: "Expand task: {task}",
|
|
824
|
+
deleteItem: "Delete item",
|
|
449
825
|
},
|
|
450
826
|
pluginWiki: {
|
|
451
827
|
backToIndex: "Back to index",
|
|
@@ -465,6 +841,35 @@ const enMessages = {
|
|
|
465
841
|
noMatches: "No pages tagged #{tag}",
|
|
466
842
|
lintChat: "Lint My Wiki",
|
|
467
843
|
taskCountMismatch: "Wiki source and rendered output disagree on the number of tasks. Refusing to toggle to avoid corruption.",
|
|
844
|
+
metadataCreated: "Created",
|
|
845
|
+
metadataUpdated: "Updated",
|
|
846
|
+
metadataEditor: "Editor",
|
|
847
|
+
pageEditHeader: "Wiki edit",
|
|
848
|
+
snapshotExpired: "Snapshot expired — showing current page",
|
|
849
|
+
pageDeleted: "Page deleted",
|
|
850
|
+
history: {
|
|
851
|
+
tabContent: "Content",
|
|
852
|
+
tabHistory: "History",
|
|
853
|
+
empty: "No history yet — edit this page and the first version will appear here.",
|
|
854
|
+
loading: "Loading history…",
|
|
855
|
+
backToList: "Back to history",
|
|
856
|
+
restoreButton: "Restore this version",
|
|
857
|
+
restoreConfirmTitle: "Restore this version?",
|
|
858
|
+
restoreConfirmBody: "Restore page to the version from {ts} by {editor}? Current page will be replaced. Existing history is preserved.",
|
|
859
|
+
restoreConfirmAction: "Restore",
|
|
860
|
+
restoreConfirmCancel: "Cancel",
|
|
861
|
+
restoreSuccessToast: "Page restored.",
|
|
862
|
+
restoreFailureBanner: "Restore failed: {error}",
|
|
863
|
+
compareCurrent: "Compare with current page",
|
|
864
|
+
comparePrevious: "Compare with previous version",
|
|
865
|
+
diffNoPrevious: "No previous version to compare against.",
|
|
866
|
+
diffNoChanges: "No content changes between this version and the comparison.",
|
|
867
|
+
editorBadgeUser: "User",
|
|
868
|
+
editorBadgeLLM: "LLM",
|
|
869
|
+
editorBadgeSystem: "System",
|
|
870
|
+
hiddenLines: "{count} unchanged lines hidden",
|
|
871
|
+
expandHidden: "Show",
|
|
872
|
+
},
|
|
468
873
|
},
|
|
469
874
|
pluginPresentForm: {
|
|
470
875
|
fallbackTitle: "Form",
|
|
@@ -482,8 +887,13 @@ const enMessages = {
|
|
|
482
887
|
saveAsPdf: "Save as PDF (opens print dialog)",
|
|
483
888
|
pdf: "PDF",
|
|
484
889
|
untitled: "HTML Page",
|
|
485
|
-
|
|
486
|
-
|
|
890
|
+
editSource: "Edit HTML Source",
|
|
891
|
+
cancel: "Cancel",
|
|
892
|
+
applyChanges: "Apply Changes",
|
|
893
|
+
saving: "Saving...",
|
|
894
|
+
saveError: "⚠ Save failed: {error}",
|
|
895
|
+
loadingSource: "Loading source…",
|
|
896
|
+
sourceError: "Failed to load source: {error}",
|
|
487
897
|
},
|
|
488
898
|
pluginNews: {
|
|
489
899
|
title: "News",
|
|
@@ -600,7 +1010,6 @@ const enMessages = {
|
|
|
600
1010
|
pluginManageRoles: {
|
|
601
1011
|
heading: "Custom Roles",
|
|
602
1012
|
roleCount: "{count} role | {count} roles",
|
|
603
|
-
previewCount: "{count} custom role | {count} custom roles",
|
|
604
1013
|
addButton: "+ Add",
|
|
605
1014
|
createPanel: "Create new role",
|
|
606
1015
|
fieldId: "ID",
|
|
@@ -649,6 +1058,8 @@ const enMessages = {
|
|
|
649
1058
|
gen: "Gen",
|
|
650
1059
|
play: "▶ Play",
|
|
651
1060
|
stop: "■ Stop",
|
|
1061
|
+
playPresentation: "Play presentation",
|
|
1062
|
+
regenerateMovie: "Regenerate movie",
|
|
652
1063
|
errPrefix: "⚠ Error",
|
|
653
1064
|
noBeats: "No beats found in script",
|
|
654
1065
|
editSource: "Edit Script Source",
|
|
@@ -685,6 +1096,11 @@ const enMessages = {
|
|
|
685
1096
|
copyLabel: "Copy",
|
|
686
1097
|
copiedLabel: "Copied!",
|
|
687
1098
|
cancel: "Cancel",
|
|
1099
|
+
seededByPlugin: "from {pkg}",
|
|
1100
|
+
seededByPluginTooltip: "This message was seeded by the {pkg} plugin, not sent by you.",
|
|
1101
|
+
},
|
|
1102
|
+
pluginSkill: {
|
|
1103
|
+
noDescription: "(no description)",
|
|
688
1104
|
},
|
|
689
1105
|
pluginSpreadsheet: {
|
|
690
1106
|
previewUntitled: "Spreadsheet",
|
|
@@ -712,6 +1128,11 @@ const enMessages = {
|
|
|
712
1128
|
},
|
|
713
1129
|
suggestionsPanel: {
|
|
714
1130
|
suggestions: "Suggestions",
|
|
1131
|
+
skills: "Skills",
|
|
1132
|
+
tooltip: "Suggestions and Skills",
|
|
1133
|
+
emptySuggestions: "No suggestions.",
|
|
1134
|
+
emptySkills: "No skills installed.",
|
|
1135
|
+
skillsError: "Failed to load skills: {error}",
|
|
715
1136
|
sendEditHint: "click to send · shift+click to edit",
|
|
716
1137
|
},
|
|
717
1138
|
settingsToolsTab: {
|