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/es.ts
CHANGED
|
@@ -38,11 +38,13 @@ const esMessages = {
|
|
|
38
38
|
attachFile: "Adjuntar archivo",
|
|
39
39
|
fileTooLarge: "El archivo es demasiado grande ({sizeMB} MB). El máximo es 30 MB.",
|
|
40
40
|
unsupportedFileType: "Tipo de archivo no admitido. Se aceptan: imágenes, PDF, DOCX, XLSX, PPTX y archivos de texto.",
|
|
41
|
+
attachImageFailed: "No se pudo adjuntar la imagen: {error}",
|
|
41
42
|
},
|
|
42
43
|
sessionHistoryPanel: {
|
|
43
44
|
filters: {
|
|
44
45
|
all: "Todas",
|
|
45
46
|
unread: "No leídas",
|
|
47
|
+
bookmarked: "Marcadas",
|
|
46
48
|
human: "Persona",
|
|
47
49
|
scheduler: "Programador",
|
|
48
50
|
skill: "Skill",
|
|
@@ -55,18 +57,45 @@ const esMessages = {
|
|
|
55
57
|
running: "En ejecución",
|
|
56
58
|
noMessages: "(sin mensajes)",
|
|
57
59
|
openRowAria: "Abrir sesión: {preview}",
|
|
60
|
+
rowMenuAria: "Acciones de sesión",
|
|
61
|
+
bookmark: "Marcar",
|
|
62
|
+
unbookmark: "Quitar marcador",
|
|
63
|
+
delete: "Eliminar",
|
|
64
|
+
deleteConfirm: "¿Eliminar esta sesión?\n\n{preview}\n\nEsta acción no se puede deshacer.",
|
|
58
65
|
},
|
|
59
66
|
notificationBell: {
|
|
60
67
|
notifications: "Notificaciones",
|
|
61
|
-
|
|
62
|
-
|
|
68
|
+
activeSection: "Activas",
|
|
69
|
+
historySection: "Historial",
|
|
70
|
+
noActive: "Sin notificaciones activas",
|
|
71
|
+
noHistory: "Sin actividad reciente",
|
|
72
|
+
clearAll: "Borrar",
|
|
63
73
|
dismiss: "Descartar",
|
|
74
|
+
cancel: "Cancelar",
|
|
75
|
+
},
|
|
76
|
+
pluginDiagnostics: {
|
|
77
|
+
title: "Problema de configuración del plugin",
|
|
78
|
+
hostBody: 'El plugin "{plugin}" intentó registrar la clave {label} "{key}", pero está reservada por el host. La entrada del plugin se ha descartado.',
|
|
79
|
+
intraBody:
|
|
80
|
+
'Los plugins "{first}" y "{second}" registran ambos el {dimension} "{key}". "{first}" lo reclamó primero, por lo que el registro de "{second}" se ignora.',
|
|
81
|
+
},
|
|
82
|
+
pluginErrorBoundary: {
|
|
83
|
+
title: "El plugin {pkg} se ha bloqueado",
|
|
84
|
+
subtitle: "El plugin no se pudo renderizar. El error se ha registrado en la consola.",
|
|
85
|
+
showDetails: "Mostrar detalles",
|
|
86
|
+
hideDetails: "Ocultar detalles",
|
|
87
|
+
retry: "Reintentar",
|
|
64
88
|
},
|
|
65
89
|
sidebarHeader: {
|
|
66
90
|
home: "Ir al chat más reciente",
|
|
67
91
|
toolCallHistory: "Historial de llamadas a herramientas",
|
|
68
92
|
settings: "Ajustes",
|
|
69
93
|
settingsGeminiMissing: "Ajustes — Falta la clave API de Gemini",
|
|
94
|
+
todayJournal: "Resumen de hoy",
|
|
95
|
+
todayJournalNotFound: "Aún no hay resumen — chatea un rato y el journal lo generará.",
|
|
96
|
+
todayJournalLoadFailed: "Error al cargar el journal (status {status}): {error}",
|
|
97
|
+
copyMarkdown: "Copiar la conversación como Markdown",
|
|
98
|
+
copiedMarkdown: "¡Copiado!",
|
|
70
99
|
},
|
|
71
100
|
rightSidebar: {
|
|
72
101
|
toggleSystemPrompt: "Alternar system prompt",
|
|
@@ -208,6 +237,110 @@ const esMessages = {
|
|
|
208
237
|
pdfPreview: "Vista previa PDF",
|
|
209
238
|
parseError: "error al analizar",
|
|
210
239
|
},
|
|
240
|
+
filesView: {
|
|
241
|
+
chatPlaceholder: "Pregunta sobre este archivo…",
|
|
242
|
+
},
|
|
243
|
+
systemFiles: {
|
|
244
|
+
schemaLabel: "Esquema",
|
|
245
|
+
showDetails: "Mostrar detalles",
|
|
246
|
+
hideDetails: "Ocultar detalles",
|
|
247
|
+
editPolicy: {
|
|
248
|
+
"agent-managed-but-hand-editable": "Gestionado por el agente (edición manual permitida)",
|
|
249
|
+
"user-editable": "Editable por el usuario",
|
|
250
|
+
"agent-managed": "Gestionado por el agente",
|
|
251
|
+
"fragile-format": "Formato frágil",
|
|
252
|
+
ephemeral: "Efímero",
|
|
253
|
+
},
|
|
254
|
+
interests: {
|
|
255
|
+
title: "Configuración de intereses",
|
|
256
|
+
summary: "Temas que la canalización de noticias / fuentes monitoriza y puntúa. Editable a mano; el agente también lo actualiza desde el chat.",
|
|
257
|
+
},
|
|
258
|
+
mcp: {
|
|
259
|
+
title: "Servidores MCP",
|
|
260
|
+
summary: "Servidores externos del Model Context Protocol conectados al agente. Añade servidores HTTP o stdio para ampliar las herramientas disponibles.",
|
|
261
|
+
},
|
|
262
|
+
settings: {
|
|
263
|
+
title: "Ajustes de la app",
|
|
264
|
+
summary: "Preferencias de comportamiento editables — clave API de Gemini, herramientas permitidas, configuración del sandbox, etc.",
|
|
265
|
+
},
|
|
266
|
+
schedulerTasks: {
|
|
267
|
+
title: "Tareas del programador",
|
|
268
|
+
summary:
|
|
269
|
+
"Automatizaciones recurrentes del agente que se disparan en un horario. Se gestionan desde la UI Automations; este archivo es la fuente en disco.",
|
|
270
|
+
},
|
|
271
|
+
schedulerOverrides: {
|
|
272
|
+
title: "Sobrescrituras del programador",
|
|
273
|
+
summary:
|
|
274
|
+
"Sobrescrituras de hora / intervalo por tarea aplicadas sobre el horario del sistema. El agente las edita cuando pides cambiar la franja de una tarea recurrente.",
|
|
275
|
+
},
|
|
276
|
+
newsReadState: {
|
|
277
|
+
title: "Estado de lectura de noticias",
|
|
278
|
+
summary: "Seguimiento local de qué noticias has visto. Efímero — puedes eliminarlo; se regenerará a medida que leas.",
|
|
279
|
+
},
|
|
280
|
+
schedulerItems: {
|
|
281
|
+
title: "Cola de elementos del programador",
|
|
282
|
+
summary: "Invocaciones programadas listas para dispararse. Gestionado por el agente; no edites a mano salvo que entiendas cada campo.",
|
|
283
|
+
},
|
|
284
|
+
todosItems: {
|
|
285
|
+
title: "Tareas pendientes",
|
|
286
|
+
summary: "Tus tareas en todas las columnas del tablero kanban. El agente escribe aquí cuando dices «añade una tarea»; también puedes editar a mano.",
|
|
287
|
+
},
|
|
288
|
+
todosColumns: {
|
|
289
|
+
title: "Columnas de pendientes",
|
|
290
|
+
summary: "Disposición de columnas del tablero kanban (títulos, orden, ids). Editable por el usuario — renombra o reordena libremente.",
|
|
291
|
+
},
|
|
292
|
+
wikiIndex: {
|
|
293
|
+
title: "Índice de la wiki",
|
|
294
|
+
summary: "Índice autogenerado de cada página de la wiki. Se refresca con cada edición — no edites a mano (tus cambios serán sobrescritos).",
|
|
295
|
+
},
|
|
296
|
+
wikiLog: {
|
|
297
|
+
title: "Registro de edición de la wiki",
|
|
298
|
+
summary: "Registro de actividades de creación y edición de páginas. Gestionado por el agente y solo añade — útil como feed de cambios recientes.",
|
|
299
|
+
},
|
|
300
|
+
wikiSummary: {
|
|
301
|
+
title: "Resumen de la wiki",
|
|
302
|
+
summary: "Visión general autogenerada de la wiki — clústeres temáticos, recuento de páginas, actividad reciente. Refrescado por el agente.",
|
|
303
|
+
},
|
|
304
|
+
wikiSchema: {
|
|
305
|
+
title: "Esquema de la wiki",
|
|
306
|
+
summary:
|
|
307
|
+
"Especificación de formato que el agente lee para mantener las páginas consistentes. Frágil — espera una estructura concreta; prefiere ediciones del agente.",
|
|
308
|
+
},
|
|
309
|
+
memory: {
|
|
310
|
+
title: "Memoria",
|
|
311
|
+
summary:
|
|
312
|
+
"Hechos destilados sobre ti, cargados siempre como contexto en conversaciones nuevas. El extractor del journal añade automáticamente; también puedes editar a mano.",
|
|
313
|
+
},
|
|
314
|
+
summariesIndex: {
|
|
315
|
+
title: "Índice de resúmenes",
|
|
316
|
+
summary: "Índice navegable que enlaza los resúmenes diarios y por tema generados por el journal. Gestionado por el agente; refrescado en cada pasada.",
|
|
317
|
+
},
|
|
318
|
+
rolesJson: {
|
|
319
|
+
title: "Definición del rol (JSON)",
|
|
320
|
+
summary: "Configuración del rol — elección de modelo, servidores MCP, plugins permitidos, sugerencias de consulta. Editable, sin reinicio.",
|
|
321
|
+
},
|
|
322
|
+
rolesMd: {
|
|
323
|
+
title: "Descripción del rol (Markdown)",
|
|
324
|
+
summary: "Persona y system prompt del rol, cargado como contexto cuando este rol está activo. Editable; los cambios aplican en el siguiente mensaje.",
|
|
325
|
+
},
|
|
326
|
+
sourceFeed: {
|
|
327
|
+
title: "Fuente suscrita",
|
|
328
|
+
summary: "Una fuente suscrita (RSS, releases / issues de GitHub, arXiv, etc.). Editable; la canalización de fuentes la consulta según horario.",
|
|
329
|
+
},
|
|
330
|
+
sourceState: {
|
|
331
|
+
title: "Estado de la fuente",
|
|
332
|
+
summary:
|
|
333
|
+
"Estado efímero de la canalización para una fuente — últimos ids vistos, ETags, errores de descarga. Puedes eliminarlo; se regenerará en la siguiente ejecución.",
|
|
334
|
+
},
|
|
335
|
+
journalDaily: {
|
|
336
|
+
title: "Resumen diario del journal",
|
|
337
|
+
summary: "Recapitulación autogenerada de tu actividad para un día natural, destilada por el journal a partir de las sesiones de chat.",
|
|
338
|
+
},
|
|
339
|
+
journalTopic: {
|
|
340
|
+
title: "Journal por tema",
|
|
341
|
+
summary: "Notas a largo plazo sobre un tema concreto, acumuladas y revisadas conforme sigues hablando de él. Gestionado por el agente.",
|
|
342
|
+
},
|
|
343
|
+
},
|
|
211
344
|
settingsMcpTab: {
|
|
212
345
|
explanation:
|
|
213
346
|
"Añade servidores MCP externos. Los servidores HTTP funcionan en todos los modos. Los servidores Stdio usan el {npx} / {node} / {tsx} de la imagen del sandbox; cuando Docker está activo las rutas deben estar dentro del área de trabajo.",
|
|
@@ -293,10 +426,81 @@ const esMessages = {
|
|
|
293
426
|
},
|
|
294
427
|
},
|
|
295
428
|
},
|
|
429
|
+
appleNative: {
|
|
430
|
+
displayName: "Apps nativas de Apple (macOS)",
|
|
431
|
+
description: "Lee y escribe Recordatorios, Calendario, Notas, Mail y Mapas vía AppleScript. Solo macOS — sin credenciales.",
|
|
432
|
+
},
|
|
433
|
+
gmail: {
|
|
434
|
+
displayName: "Gmail",
|
|
435
|
+
description:
|
|
436
|
+
"Lee, envía y etiqueta tu Gmail. Usa un cliente OAuth de Google que tú mismo creas en tu propio proyecto de Google Cloud (sin verificación de app).",
|
|
437
|
+
field: {
|
|
438
|
+
credentials: {
|
|
439
|
+
label: "Ruta a credentials.json",
|
|
440
|
+
help: "Google Cloud Console → APIs & Services → Credentials → ID de cliente OAuth (Desktop app). Descarga credentials.json y pega su ruta absoluta.",
|
|
441
|
+
},
|
|
442
|
+
},
|
|
443
|
+
},
|
|
444
|
+
googleCalendar: {
|
|
445
|
+
displayName: "Google Calendar",
|
|
446
|
+
description: "Lee y crea eventos en Google Calendar. Mismo patrón BYO credentials.json que Gmail.",
|
|
447
|
+
field: {
|
|
448
|
+
credentials: {
|
|
449
|
+
label: "Ruta a credentials.json",
|
|
450
|
+
help: "Reutiliza el mismo cliente OAuth de Google Cloud que Gmail, o crea uno separado para Calendar.",
|
|
451
|
+
},
|
|
452
|
+
},
|
|
453
|
+
},
|
|
454
|
+
googleDrive: {
|
|
455
|
+
displayName: "Google Drive",
|
|
456
|
+
description: "Busca y lee archivos de Google Drive. BYO credenciales OAuth de Google — el token se guarda localmente junto al archivo.",
|
|
457
|
+
field: {
|
|
458
|
+
credentials: {
|
|
459
|
+
label: "Ruta a credentials.json",
|
|
460
|
+
help: "Google Cloud Console → APIs & Services → Credentials → ID de cliente OAuth (Desktop app). Habilita la API de Google Drive en el mismo proyecto.",
|
|
461
|
+
},
|
|
462
|
+
},
|
|
463
|
+
},
|
|
464
|
+
github: {
|
|
465
|
+
displayName: "GitHub",
|
|
466
|
+
description:
|
|
467
|
+
"Lee repos, issues, PRs y ejecuta búsquedas con un Personal Access Token. Limita el alcance del token — los permisos de escritura (`repo`) dejan al agente hacer push a cualquier repo accesible.",
|
|
468
|
+
field: {
|
|
469
|
+
token: {
|
|
470
|
+
label: "Personal Access Token",
|
|
471
|
+
help: "GitHub → Settings → Developer settings → Personal access tokens. Se recomienda usar fine-grained tokens limitados a los repos donde quieras que el agente actúe.",
|
|
472
|
+
},
|
|
473
|
+
},
|
|
474
|
+
},
|
|
475
|
+
linear: {
|
|
476
|
+
displayName: "Linear",
|
|
477
|
+
description: "Lee y actualiza issues, proyectos y ciclos de Linear con una clave API personal.",
|
|
478
|
+
field: {
|
|
479
|
+
apiKey: {
|
|
480
|
+
label: "Clave API de Linear",
|
|
481
|
+
help: "Linear → Settings → API → Personal API keys. Pulsa 🔑 para abrir la página y haz clic en Create key.",
|
|
482
|
+
},
|
|
483
|
+
},
|
|
484
|
+
},
|
|
296
485
|
weatherOpenMeteo: {
|
|
297
486
|
displayName: "Clima (Open-Meteo)",
|
|
298
487
|
description: "Pronósticos meteorológicos gratuitos y condiciones actuales en todo el mundo — sin clave API.",
|
|
299
488
|
},
|
|
489
|
+
spotify: {
|
|
490
|
+
displayName: "Spotify",
|
|
491
|
+
description:
|
|
492
|
+
"Busca canciones, gestiona playlists y controla la reproducción. BYO app de desarrollador de Spotify — solo Client ID (flujo PKCE, sin client secret).",
|
|
493
|
+
field: {
|
|
494
|
+
clientId: {
|
|
495
|
+
label: "Client ID",
|
|
496
|
+
help: "Spotify Developer Dashboard → Create app, configura la Redirect URI como http://127.0.0.1:8888/callback, copia el Client ID. Luego ejecuta una vez en la terminal `SPOTIFY_CLIENT_ID=<id> npx spotify-mcp@latest auth` para iniciar sesión (el refresh token se guarda en ~/.spotify-mcp/tokens.json).",
|
|
497
|
+
},
|
|
498
|
+
},
|
|
499
|
+
},
|
|
500
|
+
youtubeTranscript: {
|
|
501
|
+
displayName: "Transcripción de YouTube",
|
|
502
|
+
description: "Obtén los subtítulos de cualquier vídeo público de YouTube por URL. Sin credenciales.",
|
|
503
|
+
},
|
|
300
504
|
},
|
|
301
505
|
config: {
|
|
302
506
|
howToGet: "Cómo obtenerlo",
|
|
@@ -358,6 +562,8 @@ const esMessages = {
|
|
|
358
562
|
redo: "Rehacer",
|
|
359
563
|
clear: "Limpiar",
|
|
360
564
|
styleLabel: "Estilo:",
|
|
565
|
+
stylePromptWithPath: "Convierte la imagen en `{path}` en una imagen de estilo {style}.",
|
|
566
|
+
stylePromptNoPath: "Convierte mi dibujo en el lienzo en una imagen de estilo {style}.",
|
|
361
567
|
},
|
|
362
568
|
pluginChart: {
|
|
363
569
|
untitled: "Gráfico",
|
|
@@ -365,20 +571,223 @@ const esMessages = {
|
|
|
365
571
|
chartTitle: "Gráfico {num}",
|
|
366
572
|
png: "PNG",
|
|
367
573
|
},
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
574
|
+
pluginAccounting: {
|
|
575
|
+
title: "Contabilidad",
|
|
576
|
+
noBook: 'Aún no hay libros — pulsa "+ Nuevo libro" arriba para crear el primero.',
|
|
577
|
+
common: {
|
|
578
|
+
cancel: "Cancelar",
|
|
579
|
+
loading: "Cargando…",
|
|
580
|
+
error: "Error: {error}",
|
|
581
|
+
empty: "Aún no hay entradas.",
|
|
582
|
+
},
|
|
583
|
+
tabs: {
|
|
584
|
+
journal: "Diario",
|
|
585
|
+
newEntry: "Nueva entrada",
|
|
586
|
+
opening: "Apertura",
|
|
587
|
+
accounts: "Cuentas",
|
|
588
|
+
ledger: "Mayor",
|
|
589
|
+
balanceSheet: "Balance",
|
|
590
|
+
profitLoss: "P&L",
|
|
591
|
+
settings: "Ajustes",
|
|
592
|
+
},
|
|
593
|
+
bookSwitcher: {
|
|
594
|
+
label: "Libro",
|
|
595
|
+
newBook: "Nuevo libro…",
|
|
596
|
+
create: "Crear",
|
|
597
|
+
nameLabel: "Nombre",
|
|
598
|
+
currencyLabel: "Moneda",
|
|
599
|
+
countryLabel: "País",
|
|
600
|
+
countryPlaceholder: "Selecciona un país…",
|
|
601
|
+
countryHint: "El país define la jurisdicción fiscal para que el asistente pueda dar consejos específicos (T-number en Japón, ID de IVA en la UE, etc.).",
|
|
602
|
+
fiscalYearEndLabel: "Cierre del ejercicio",
|
|
603
|
+
fiscalYearEndQ1: "31 de marzo (Q1)",
|
|
604
|
+
fiscalYearEndQ2: "30 de junio (Q2)",
|
|
605
|
+
fiscalYearEndQ3: "30 de septiembre (Q3)",
|
|
606
|
+
fiscalYearEndQ4: "31 de diciembre (Q4)",
|
|
607
|
+
fiscalYearEndHint: "Define el límite del ejercicio para los atajos de rango de fechas de este libro. Por defecto: 31 de diciembre (Q4 — año natural).",
|
|
608
|
+
placeholder: "Elige un libro…",
|
|
609
|
+
firstRunHint:
|
|
610
|
+
"Elige el nombre, la moneda, el país y el cierre de ejercicio de tu primer libro. La moneda se fija por libro y es difícil cambiarla una vez que empieces a registrar asientos.",
|
|
611
|
+
},
|
|
612
|
+
deletedNotice: {
|
|
613
|
+
title: "“{bookName}” se ha eliminado.",
|
|
614
|
+
body: "Elige otro libro en el desplegable de arriba o crea uno nuevo.",
|
|
615
|
+
},
|
|
616
|
+
journalList: {
|
|
617
|
+
fromLabel: "Desde",
|
|
618
|
+
toLabel: "Hasta",
|
|
619
|
+
accountLabel: "Cuenta",
|
|
620
|
+
allAccounts: "Todas",
|
|
621
|
+
void: "Anular",
|
|
622
|
+
edit: "Editar",
|
|
623
|
+
voidConfirm: "¿Anular esta entrada? La original permanece en el diario; se añade un par de reversión.",
|
|
624
|
+
voidReason: "Motivo (opcional):",
|
|
625
|
+
columns: {
|
|
626
|
+
date: "Fecha",
|
|
627
|
+
kind: "Tipo",
|
|
628
|
+
memo: "Memo",
|
|
629
|
+
lines: "Líneas",
|
|
630
|
+
},
|
|
631
|
+
kind: {
|
|
632
|
+
normal: "—",
|
|
633
|
+
opening: "Apertura",
|
|
634
|
+
void: "Reverso",
|
|
635
|
+
voidMarker: "Marcador de anulación",
|
|
636
|
+
},
|
|
637
|
+
},
|
|
638
|
+
entryForm: {
|
|
639
|
+
title: "Nueva entrada",
|
|
640
|
+
editTitle: "Editar entrada",
|
|
641
|
+
editBanner: "Al enviar, la entrada original será anulada y sustituida por esta.",
|
|
642
|
+
dateLabel: "Fecha",
|
|
643
|
+
memoLabel: "Memo",
|
|
644
|
+
accountLabel: "Cuenta",
|
|
645
|
+
debitLabel: "Debe",
|
|
646
|
+
creditLabel: "Haber",
|
|
647
|
+
taxRegistrationIdLabel: "ID fiscal",
|
|
648
|
+
taxRegistrationIdPlaceholder: "NIF / VAT ID / RFC…",
|
|
649
|
+
taxRegistrationIdMissingWarning: "Obligatorio",
|
|
650
|
+
addLine: "Añadir línea",
|
|
651
|
+
removeLine: "Quitar",
|
|
652
|
+
submit: "Asentar",
|
|
653
|
+
submitting: "Asentando…",
|
|
654
|
+
update: "Actualizar",
|
|
655
|
+
updating: "Actualizando…",
|
|
656
|
+
cancelEdit: "Cancelar",
|
|
657
|
+
success: "Entrada asentada.",
|
|
658
|
+
editSuccess: "Entrada actualizada.",
|
|
659
|
+
editVoidReason: "editado",
|
|
660
|
+
imbalance: "Descuadre: {amount}",
|
|
661
|
+
balanced: "Cuadrada ✓",
|
|
662
|
+
},
|
|
663
|
+
openingForm: {
|
|
664
|
+
title: "Saldos de apertura",
|
|
665
|
+
asOfLabel: "Al",
|
|
666
|
+
explainer: "Solo cuentas de balance (activo/pasivo/patrimonio). Σ debe = Σ haber; la diferencia va a Retained Earnings.",
|
|
667
|
+
emptyHint:
|
|
668
|
+
"Puedes guardar todo en blanco — luego puedes actualizar los saldos de apertura. Solo hace falta tener una apertura registrada para desbloquear las demás pestañas.",
|
|
669
|
+
explainer2: "Solo cuentas de balance.",
|
|
670
|
+
submit: "Guardar saldos de apertura",
|
|
671
|
+
replaceWarning: "Al guardar se reemplaza la apertura existente (la anterior se anula en el diario).",
|
|
672
|
+
none: "Aún no hay saldos de apertura.",
|
|
673
|
+
setBy: "Establecido al {date}",
|
|
674
|
+
success: "Saldos guardados.",
|
|
675
|
+
},
|
|
676
|
+
ledger: {
|
|
677
|
+
selectAccount: "Seleccionar cuenta",
|
|
678
|
+
closingBalance: "Saldo final",
|
|
679
|
+
columns: {
|
|
680
|
+
date: "Fecha",
|
|
681
|
+
memo: "Memo",
|
|
682
|
+
debit: "Debe",
|
|
683
|
+
credit: "Haber",
|
|
684
|
+
balance: "Saldo",
|
|
685
|
+
taxRegistrationId: "ID fiscal",
|
|
686
|
+
},
|
|
687
|
+
},
|
|
688
|
+
dateRange: {
|
|
689
|
+
shortcutLabel: "Rango",
|
|
690
|
+
currentQuarter: "Trimestre actual",
|
|
691
|
+
previousQuarter: "Último trimestre",
|
|
692
|
+
currentYear: "Año en curso",
|
|
693
|
+
previousYear: "Año anterior",
|
|
694
|
+
lifetime: "Desde la apertura",
|
|
695
|
+
all: "Todo",
|
|
696
|
+
fromLabel: "Desde",
|
|
697
|
+
toLabel: "Hasta",
|
|
698
|
+
},
|
|
699
|
+
balanceSheet: {
|
|
700
|
+
asOfLabel: "Período",
|
|
701
|
+
sections: {
|
|
702
|
+
asset: "Activo",
|
|
703
|
+
liability: "Pasivo",
|
|
704
|
+
equity: "Patrimonio",
|
|
705
|
+
},
|
|
706
|
+
total: "Total",
|
|
707
|
+
imbalance: "Descuadre: {amount}",
|
|
708
|
+
currentEarnings: "Resultado del período",
|
|
709
|
+
shortcutLabel: "Atajo",
|
|
710
|
+
thisMonth: "Este mes",
|
|
711
|
+
lastMonth: "Mes anterior",
|
|
712
|
+
lastQuarter: "Último trimestre",
|
|
713
|
+
lastYear: "Año anterior",
|
|
714
|
+
},
|
|
715
|
+
profitLoss: {
|
|
716
|
+
fromLabel: "Desde",
|
|
717
|
+
toLabel: "Hasta",
|
|
718
|
+
income: "Ingresos",
|
|
719
|
+
expense: "Gastos",
|
|
720
|
+
netIncome: "Resultado neto:",
|
|
721
|
+
},
|
|
722
|
+
accounts: {
|
|
723
|
+
listEmpty: "No hay cuentas en esta categoría.",
|
|
724
|
+
openLedgerAria: "Abrir mayor de {code} {name}",
|
|
725
|
+
manageButton: "Gestionar cuentas",
|
|
726
|
+
modalTitle: "Gestionar cuentas",
|
|
727
|
+
addAccount: "Añadir cuenta",
|
|
728
|
+
sectionTitle: {
|
|
729
|
+
asset: "Activos",
|
|
730
|
+
liability: "Pasivos",
|
|
731
|
+
equity: "Patrimonio",
|
|
732
|
+
income: "Ingresos",
|
|
733
|
+
expense: "Gastos",
|
|
734
|
+
},
|
|
735
|
+
columnCode: "Código",
|
|
736
|
+
columnName: "Nombre",
|
|
737
|
+
columnType: "Tipo",
|
|
738
|
+
columnNote: "Nota",
|
|
739
|
+
typeOption: {
|
|
740
|
+
asset: "Activo",
|
|
741
|
+
liability: "Pasivo",
|
|
742
|
+
equity: "Patrimonio",
|
|
743
|
+
income: "Ingreso",
|
|
744
|
+
expense: "Gasto",
|
|
745
|
+
},
|
|
746
|
+
edit: "Editar",
|
|
747
|
+
save: "Guardar",
|
|
748
|
+
cancel: "Cancelar",
|
|
749
|
+
saving: "Guardando…",
|
|
750
|
+
addToCategory: "Añadir cuenta de {type}",
|
|
751
|
+
deactivate: "Desactivar",
|
|
752
|
+
reactivate: "Activar",
|
|
753
|
+
deactivateConfirm: "¿Ocultar “{name}” de los desplegables de asientos / mayor? Los asientos existentes no se ven afectados.",
|
|
754
|
+
errorEmptyCode: "El código es obligatorio.",
|
|
755
|
+
errorReservedCode: "Los códigos que empiezan por “_” están reservados para filas del sistema.",
|
|
756
|
+
errorInvalidCodeFormat: "El código de cuenta debe tener exactamente 4 dígitos.",
|
|
757
|
+
errorCodeTypeMismatch: "El código debe coincidir con el tipo de cuenta: 1xxx activo, 2xxx pasivo, 3xxx patrimonio, 4xxx ingreso, 5xxx gasto.",
|
|
758
|
+
errorEmptyName: "El nombre es obligatorio.",
|
|
759
|
+
errorDuplicateCode: "Ya existe una cuenta con este código.",
|
|
760
|
+
errorDuplicateName: "Ya existe una cuenta con este nombre.",
|
|
761
|
+
success: "Cuenta guardada.",
|
|
762
|
+
codeReadOnlyHint: "El código no puede cambiarse una vez creada la cuenta.",
|
|
763
|
+
noteOptional: "(opcional)",
|
|
764
|
+
},
|
|
765
|
+
settings: {
|
|
766
|
+
bookInfo: "Información del libro",
|
|
767
|
+
bookInfoExplain:
|
|
768
|
+
"Edita el país para actualizar los consejos según la jurisdicción fiscal. La moneda no puede cambiarse una vez registrados los asientos.",
|
|
769
|
+
countryUnset: "(sin definir)",
|
|
770
|
+
fiscalYearEndExplain: "Solo cambia cómo se resuelven los atajos de rango de fechas en adelante; los asientos existentes no se mueven.",
|
|
771
|
+
saveChanges: "Guardar cambios",
|
|
772
|
+
updateOk: "Libro actualizado.",
|
|
773
|
+
rebuild: "Reconstruir snapshots",
|
|
774
|
+
rebuildExplain: "Borra todos los snapshots mensuales y los recalcula desde el diario. Útil tras editar el diario a mano.",
|
|
775
|
+
rebuildOk: "Reconstruidos {count} período(s).",
|
|
776
|
+
advanced: "Avanzado…",
|
|
777
|
+
deleteBook: "Eliminar libro",
|
|
778
|
+
deleteBookExplain: "Elimina permanentemente el directorio del libro. No se puede deshacer.",
|
|
779
|
+
deleteBookConfirm: 'Escribe "{bookName}" para confirmar:',
|
|
780
|
+
deleteBookButton: "Eliminar para siempre",
|
|
781
|
+
},
|
|
782
|
+
preview: {
|
|
783
|
+
entry: "Entrada asentada el {date}",
|
|
784
|
+
pl: "P&L {from} → {to}: neto {net}",
|
|
785
|
+
bs: "Balance al {date} · activos {assets}",
|
|
786
|
+
bookCreated: 'Libro "{name}" ({id}) creado',
|
|
787
|
+
},
|
|
788
|
+
previewSummary: "Contabilidad · {bookId}",
|
|
789
|
+
previewError: "Contabilidad: {error}",
|
|
790
|
+
previewGeneric: "Resultado de contabilidad",
|
|
382
791
|
},
|
|
383
792
|
todoExplorer: {
|
|
384
793
|
heading: "Tareas",
|
|
@@ -395,14 +804,6 @@ const esMessages = {
|
|
|
395
804
|
newColumnPlaceholder: "Revisar",
|
|
396
805
|
noMatchingFilter: "Ningún elemento coincide con el filtro actual",
|
|
397
806
|
},
|
|
398
|
-
todoPreview: {
|
|
399
|
-
completedRatio: "{done}/{total} completadas",
|
|
400
|
-
moreItems: "+ {count} más…",
|
|
401
|
-
headerIcon: "☑",
|
|
402
|
-
doneIcon: "✓",
|
|
403
|
-
pendingIcon: "○",
|
|
404
|
-
moreLabels: "+{count}",
|
|
405
|
-
},
|
|
406
807
|
todoDialogs: {
|
|
407
808
|
addTitle: "Añadir tarea",
|
|
408
809
|
editTitle: "Editar tarea",
|
|
@@ -432,6 +833,7 @@ const esMessages = {
|
|
|
432
833
|
noMatchingFilter: "Ningún elemento coincide con el filtro actual",
|
|
433
834
|
sortColumnAria: "Ordenar por {column}",
|
|
434
835
|
expandRowAria: "Expandir tarea: {task}",
|
|
836
|
+
deleteItem: "Eliminar elemento",
|
|
435
837
|
},
|
|
436
838
|
pluginWiki: {
|
|
437
839
|
backToIndex: "Volver al índice",
|
|
@@ -451,6 +853,35 @@ const esMessages = {
|
|
|
451
853
|
noMatches: "No hay páginas con la etiqueta #{tag}",
|
|
452
854
|
lintChat: "Revisar mi wiki",
|
|
453
855
|
taskCountMismatch: "La fuente del wiki y la salida renderizada difieren en el número de tareas. Se rechazó el cambio para evitar dañar el archivo.",
|
|
856
|
+
metadataCreated: "Creado",
|
|
857
|
+
metadataUpdated: "Actualizado",
|
|
858
|
+
metadataEditor: "Editor",
|
|
859
|
+
pageEditHeader: "Edición de wiki",
|
|
860
|
+
snapshotExpired: "Instantánea expirada — mostrando la página actual",
|
|
861
|
+
pageDeleted: "Página eliminada",
|
|
862
|
+
history: {
|
|
863
|
+
tabContent: "Contenido",
|
|
864
|
+
tabHistory: "Historial",
|
|
865
|
+
empty: "Aún no hay historial — edita esta página y la primera versión aparecerá aquí.",
|
|
866
|
+
loading: "Cargando historial…",
|
|
867
|
+
backToList: "Volver al historial",
|
|
868
|
+
restoreButton: "Restaurar esta versión",
|
|
869
|
+
restoreConfirmTitle: "¿Restaurar esta versión?",
|
|
870
|
+
restoreConfirmBody: "Restaurar la página a la versión del {ts} por {editor}. La página actual será reemplazada. El historial existente se conserva.",
|
|
871
|
+
restoreConfirmAction: "Restaurar",
|
|
872
|
+
restoreConfirmCancel: "Cancelar",
|
|
873
|
+
restoreSuccessToast: "Página restaurada.",
|
|
874
|
+
restoreFailureBanner: "Error al restaurar: {error}",
|
|
875
|
+
compareCurrent: "Comparar con la página actual",
|
|
876
|
+
comparePrevious: "Comparar con la versión anterior",
|
|
877
|
+
diffNoPrevious: "No hay versión anterior con la que comparar.",
|
|
878
|
+
diffNoChanges: "No hay diferencias de contenido entre esta versión y el objeto de comparación.",
|
|
879
|
+
editorBadgeUser: "Usuario",
|
|
880
|
+
editorBadgeLLM: "LLM",
|
|
881
|
+
editorBadgeSystem: "Sistema",
|
|
882
|
+
hiddenLines: "{count} líneas sin cambios ocultas",
|
|
883
|
+
expandHidden: "Mostrar",
|
|
884
|
+
},
|
|
454
885
|
},
|
|
455
886
|
pluginPresentForm: {
|
|
456
887
|
fallbackTitle: "Formulario",
|
|
@@ -468,8 +899,13 @@ const esMessages = {
|
|
|
468
899
|
saveAsPdf: "Guardar como PDF (abre el diálogo de impresión)",
|
|
469
900
|
pdf: "PDF",
|
|
470
901
|
untitled: "Página HTML",
|
|
471
|
-
|
|
472
|
-
|
|
902
|
+
editSource: "Editar código HTML",
|
|
903
|
+
cancel: "Cancelar",
|
|
904
|
+
applyChanges: "Aplicar cambios",
|
|
905
|
+
saving: "Guardando...",
|
|
906
|
+
saveError: "⚠ Error al guardar: {error}",
|
|
907
|
+
loadingSource: "Cargando código…",
|
|
908
|
+
sourceError: "Error al cargar el código: {error}",
|
|
473
909
|
},
|
|
474
910
|
pluginNews: {
|
|
475
911
|
title: "Noticias",
|
|
@@ -586,7 +1022,6 @@ const esMessages = {
|
|
|
586
1022
|
pluginManageRoles: {
|
|
587
1023
|
heading: "Roles personalizados",
|
|
588
1024
|
roleCount: "{count} rol | {count} roles",
|
|
589
|
-
previewCount: "{count} rol personalizado | {count} roles personalizados",
|
|
590
1025
|
addButton: "+ Añadir",
|
|
591
1026
|
createPanel: "Crear nuevo rol",
|
|
592
1027
|
fieldId: "ID",
|
|
@@ -635,6 +1070,8 @@ const esMessages = {
|
|
|
635
1070
|
gen: "Generar",
|
|
636
1071
|
play: "▶ Reproducir",
|
|
637
1072
|
stop: "■ Detener",
|
|
1073
|
+
playPresentation: "Reproducir presentación",
|
|
1074
|
+
regenerateMovie: "Regenerar vídeo",
|
|
638
1075
|
errPrefix: "⚠ Error",
|
|
639
1076
|
noBeats: "No se encontraron beats en el script",
|
|
640
1077
|
editSource: "Editar fuente del script",
|
|
@@ -671,6 +1108,11 @@ const esMessages = {
|
|
|
671
1108
|
copyLabel: "Copiar",
|
|
672
1109
|
copiedLabel: "¡Copiado!",
|
|
673
1110
|
cancel: "Cancelar",
|
|
1111
|
+
seededByPlugin: "desde {pkg}",
|
|
1112
|
+
seededByPluginTooltip: "Este mensaje fue generado por el plugin {pkg}, no enviado por ti.",
|
|
1113
|
+
},
|
|
1114
|
+
pluginSkill: {
|
|
1115
|
+
noDescription: "(sin descripción)",
|
|
674
1116
|
},
|
|
675
1117
|
pluginSpreadsheet: {
|
|
676
1118
|
previewUntitled: "Hoja de cálculo",
|
|
@@ -698,6 +1140,11 @@ const esMessages = {
|
|
|
698
1140
|
},
|
|
699
1141
|
suggestionsPanel: {
|
|
700
1142
|
suggestions: "Sugerencias",
|
|
1143
|
+
skills: "Habilidades",
|
|
1144
|
+
tooltip: "Sugerencias y habilidades",
|
|
1145
|
+
emptySuggestions: "No hay sugerencias.",
|
|
1146
|
+
emptySkills: "No hay habilidades instaladas.",
|
|
1147
|
+
skillsError: "Error al cargar las habilidades: {error}",
|
|
701
1148
|
sendEditHint: "clic para enviar · shift+clic para editar",
|
|
702
1149
|
},
|
|
703
1150
|
settingsToolsTab: {
|