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.
Files changed (486) hide show
  1. package/Dockerfile.sandbox +100 -0
  2. package/README.md +17 -4
  3. package/bin/mulmoclaude.js +46 -15
  4. package/bin/prepare-dist.js +18 -2
  5. package/client/assets/chunk-CernVdwh.js +1 -0
  6. package/client/assets/chunk-D8eiyYIV-C1eAZMzz.js +1 -0
  7. package/client/assets/html2canvas-CDGcmOD3-BbPeutDg.js +5 -0
  8. package/client/assets/index-BbgSjFQ8.js +4968 -0
  9. package/client/assets/index-ECD0lgIv.css +2 -0
  10. package/client/assets/{index.es-D4YyL_Dg-BgT6a3Nd.js → index.es-DqtpmBm8-DJdTPdnc.js} +5 -5
  11. package/client/assets/material-symbols-outlined-BLDfUw-_.woff2 +0 -0
  12. package/client/assets/runtime-protocol-vue-6WYa8hAs.js +1 -0
  13. package/client/assets/runtime-vue-BVUzgYGA.js +1 -0
  14. package/client/assets/typeof-DBp4T-Ny-C2xoZtcz.js +1 -0
  15. package/client/assets/vue-1e_vz2LW.js +1 -0
  16. package/client/assets/vue.runtime.esm-bundler-DQ8Kjjui.js +4 -0
  17. package/client/index.html +33 -2
  18. package/package.json +20 -18
  19. package/sandbox-entrypoint.sh +106 -0
  20. package/server/accounting/accountNormalize.ts +32 -0
  21. package/server/accounting/defaultAccounts.ts +87 -0
  22. package/server/accounting/eventPublisher.ts +51 -0
  23. package/server/accounting/journal.ts +252 -0
  24. package/server/accounting/openingBalances.ts +114 -0
  25. package/server/accounting/report.ts +237 -0
  26. package/server/accounting/service.ts +718 -0
  27. package/server/accounting/snapshotCache.ts +333 -0
  28. package/server/accounting/timeSeries.ts +265 -0
  29. package/server/accounting/types.ts +148 -0
  30. package/server/agent/activeTools.ts +128 -0
  31. package/server/agent/attachmentConverter.ts +10 -5
  32. package/server/agent/backend/claude-code.ts +8 -2
  33. package/server/agent/backend/types.ts +1 -1
  34. package/server/agent/config.ts +101 -31
  35. package/server/agent/index.ts +45 -33
  36. package/server/agent/mcp-server.ts +146 -69
  37. package/server/agent/mcp-tools/index.ts +1 -5
  38. package/server/agent/mcp-tools/notify.ts +2 -22
  39. package/server/agent/mcp-tools/x.ts +0 -4
  40. package/server/agent/mcpHealth.ts +168 -0
  41. package/server/agent/plugin-names.ts +20 -77
  42. package/server/agent/prompt.ts +259 -51
  43. package/server/agent/resumeFailover.ts +1 -1
  44. package/server/agent/stream.ts +0 -1
  45. package/server/api/auth/bearerAuth.ts +5 -5
  46. package/server/api/csrfGuard.ts +1 -1
  47. package/server/api/routes/accounting.ts +366 -0
  48. package/server/api/routes/agent.ts +509 -46
  49. package/server/api/routes/attachment.ts +104 -0
  50. package/server/api/routes/chart.ts +2 -1
  51. package/server/api/routes/config.ts +12 -12
  52. package/server/api/routes/files.ts +105 -48
  53. package/server/api/routes/image.ts +70 -25
  54. package/server/api/routes/journal.ts +35 -0
  55. package/server/api/routes/mulmo-script.ts +358 -118
  56. package/server/api/routes/mulmoScriptValidate.ts +1 -1
  57. package/server/api/routes/news.ts +1 -1
  58. package/server/api/routes/notifications.ts +92 -22
  59. package/server/api/routes/notifier.ts +98 -0
  60. package/server/api/routes/pdf.ts +188 -48
  61. package/server/api/routes/plugins.ts +34 -14
  62. package/server/api/routes/presentHtml.ts +58 -3
  63. package/server/api/routes/roles.ts +1 -8
  64. package/server/api/routes/runtime-plugin.ts +224 -0
  65. package/server/api/routes/scheduler.ts +7 -5
  66. package/server/api/routes/schedulerHandlers.ts +1 -1
  67. package/server/api/routes/schedulerTasks.ts +8 -7
  68. package/server/api/routes/sessions.ts +234 -121
  69. package/server/api/routes/skills.ts +56 -51
  70. package/server/api/routes/sources.ts +52 -45
  71. package/server/api/routes/translation.ts +44 -0
  72. package/server/api/routes/wiki/frontmatter.ts +13 -65
  73. package/server/api/routes/wiki/history.ts +261 -0
  74. package/server/api/routes/wiki/pageIndex.ts +1 -1
  75. package/server/api/routes/wiki.ts +50 -26
  76. package/server/events/file-change.ts +83 -0
  77. package/server/events/notifications.ts +247 -91
  78. package/server/events/pub-sub/index.ts +1 -1
  79. package/server/events/relay-client.ts +5 -5
  80. package/server/events/scheduler-adapter.ts +2 -2
  81. package/server/events/session-store/index.ts +110 -22
  82. package/server/events/task-manager/index.ts +10 -9
  83. package/server/index.ts +509 -33
  84. package/server/notifier/engine.ts +419 -0
  85. package/server/notifier/legacy-adapters.ts +76 -0
  86. package/server/notifier/runtime-api.ts +74 -0
  87. package/server/notifier/store.ts +70 -0
  88. package/server/notifier/types.ts +121 -0
  89. package/server/plugins/dev-loader.ts +171 -0
  90. package/server/plugins/dev-watcher.ts +150 -0
  91. package/server/plugins/diagnostics.ts +188 -0
  92. package/server/plugins/preset-list.ts +52 -0
  93. package/server/plugins/preset-loader.ts +112 -0
  94. package/server/plugins/runtime-chat-api.ts +38 -0
  95. package/server/plugins/runtime-loader.ts +430 -0
  96. package/server/plugins/runtime-registry.ts +112 -0
  97. package/server/plugins/runtime-tasks-api.ts +50 -0
  98. package/server/plugins/runtime.ts +378 -0
  99. package/server/services/translation/cache.ts +72 -0
  100. package/server/services/translation/index.ts +106 -0
  101. package/server/services/translation/llm.ts +140 -0
  102. package/server/services/translation/types.ts +35 -0
  103. package/server/system/credentials.ts +13 -2
  104. package/server/system/env.ts +6 -1
  105. package/server/system/logger/formatters.ts +46 -4
  106. package/server/system/logger/index.ts +4 -4
  107. package/server/system/logger/sinks.ts +26 -5
  108. package/server/system/logger/types.ts +2 -2
  109. package/server/utils/dev-plugin-args.d.mts +11 -0
  110. package/server/utils/dev-plugin-args.mjs +43 -0
  111. package/server/utils/errors.ts +13 -4
  112. package/server/utils/files/accounting-io.ts +295 -0
  113. package/server/utils/files/atomic.ts +17 -49
  114. package/server/utils/files/attachment-store.ts +182 -0
  115. package/server/utils/files/html-io.ts +1 -7
  116. package/server/utils/files/html-store.ts +19 -0
  117. package/server/utils/files/image-store.ts +20 -22
  118. package/server/utils/files/index.ts +5 -15
  119. package/server/utils/files/journal-io.ts +7 -35
  120. package/server/utils/files/json.ts +2 -29
  121. package/server/utils/files/markdown-image-fill.ts +6 -37
  122. package/server/utils/files/markdown-store.ts +6 -21
  123. package/server/utils/files/naming.ts +3 -39
  124. package/server/utils/files/plugins-io.ts +100 -0
  125. package/server/utils/files/reference-dirs-io.ts +1 -9
  126. package/server/utils/files/roles-io.ts +2 -10
  127. package/server/utils/files/safe.ts +17 -19
  128. package/server/utils/files/scheduler-io.ts +1 -7
  129. package/server/utils/files/scheduler-overrides-io.ts +3 -12
  130. package/server/utils/files/session-io.ts +21 -30
  131. package/server/utils/files/spreadsheet-store.ts +9 -22
  132. package/server/utils/files/translation-io.ts +46 -0
  133. package/server/utils/files/user-tasks-io.ts +1 -7
  134. package/server/utils/files/workspace-io.ts +3 -79
  135. package/server/utils/gemini.ts +33 -11
  136. package/server/utils/html/htmlArtifactSplicer.ts +41 -0
  137. package/server/utils/markdown/frontmatter.ts +112 -0
  138. package/server/utils/regex.ts +56 -0
  139. package/server/utils/router.ts +41 -0
  140. package/server/utils/slug.ts +5 -3
  141. package/server/utils/time.ts +12 -0
  142. package/server/workspace/chat-index/indexer.ts +15 -2
  143. package/server/workspace/chat-index/summarizer.ts +1 -1
  144. package/server/workspace/custom-dirs.ts +1 -1
  145. package/server/workspace/helps/gemini.md +1 -1
  146. package/server/workspace/helps/guide.md +61 -0
  147. package/server/workspace/helps/index.md +4 -0
  148. package/server/workspace/helps/presenthtml.md +80 -0
  149. package/server/workspace/helps/sandbox.md +7 -0
  150. package/server/workspace/helps/storyteller.md +101 -0
  151. package/server/workspace/helps/telegram.md +1 -0
  152. package/server/workspace/helps/wiki.md +9 -7
  153. package/server/workspace/journal/archivist-cli.ts +7 -33
  154. package/server/workspace/journal/archivist-schemas.ts +5 -43
  155. package/server/workspace/journal/dailyPass.ts +34 -187
  156. package/server/workspace/journal/diff.ts +3 -28
  157. package/server/workspace/journal/index.ts +10 -81
  158. package/server/workspace/journal/indexFile.ts +3 -24
  159. package/server/workspace/journal/latestDaily.ts +51 -0
  160. package/server/workspace/journal/memoryExtractor.ts +4 -20
  161. package/server/workspace/journal/optimizationPass.ts +4 -21
  162. package/server/workspace/journal/paths.ts +4 -23
  163. package/server/workspace/journal/state.ts +6 -29
  164. package/server/workspace/memory/io.ts +213 -0
  165. package/server/workspace/memory/llm-classifier.ts +158 -0
  166. package/server/workspace/memory/migrate.ts +263 -0
  167. package/server/workspace/memory/run.ts +84 -0
  168. package/server/workspace/memory/topic-cluster.ts +218 -0
  169. package/server/workspace/memory/topic-detect.ts +67 -0
  170. package/server/workspace/memory/topic-index-hook.ts +128 -0
  171. package/server/workspace/memory/topic-io.ts +180 -0
  172. package/server/workspace/memory/topic-migrate.ts +248 -0
  173. package/server/workspace/memory/topic-run.ts +172 -0
  174. package/server/workspace/memory/topic-swap.ts +135 -0
  175. package/server/workspace/memory/topic-types.ts +142 -0
  176. package/server/workspace/memory/types.ts +83 -0
  177. package/server/workspace/news/reader.ts +4 -5
  178. package/server/workspace/paths.ts +124 -47
  179. package/server/workspace/roles.ts +2 -11
  180. package/server/workspace/skills/parser.ts +38 -55
  181. package/server/workspace/skills/user-tasks.ts +1 -2
  182. package/server/workspace/skills-preset/mc-library/SKILL.md +188 -0
  183. package/server/workspace/skills-preset.ts +196 -0
  184. package/server/workspace/sources/fetchers/githubIssues.ts +13 -11
  185. package/server/workspace/sources/fetchers/index.ts +1 -1
  186. package/server/workspace/sources/fetchers/rssParser.ts +1 -1
  187. package/server/workspace/sources/pipeline/index.ts +2 -2
  188. package/server/workspace/sources/pipeline/notify.ts +3 -3
  189. package/server/workspace/sources/pipeline/write.ts +2 -2
  190. package/server/workspace/sources/registry.ts +39 -61
  191. package/server/workspace/sources/robots.ts +1 -1
  192. package/server/workspace/tool-trace/classify.ts +2 -1
  193. package/server/workspace/tool-trace/index.ts +1 -1
  194. package/server/workspace/tool-trace/writeSearch.ts +6 -1
  195. package/server/workspace/wiki-backlinks/index.ts +19 -7
  196. package/server/workspace/wiki-backlinks/sessionBacklinks.ts +1 -0
  197. package/server/workspace/wiki-history/hook/snapshot.mjs +98 -0
  198. package/server/workspace/wiki-history/hook/snapshot.ts +135 -0
  199. package/server/workspace/wiki-history/provision.ts +181 -0
  200. package/server/workspace/wiki-pages/io.ts +217 -0
  201. package/server/workspace/wiki-pages/snapshot.ts +380 -0
  202. package/server/workspace/workspace.ts +75 -13
  203. package/src/App.vue +115 -40
  204. package/src/_runtime/protocol-vue.ts +21 -0
  205. package/src/_runtime/vue.ts +22 -0
  206. package/src/components/ChatInput.vue +14 -10
  207. package/src/components/CopyChatButton.vue +76 -0
  208. package/src/components/FileContentRenderer.vue +67 -14
  209. package/src/components/FileTree.vue +2 -2
  210. package/src/components/FilesView.vue +17 -1
  211. package/src/components/NewsView.vue +16 -2
  212. package/src/components/NotificationBell.vue +320 -93
  213. package/src/components/PageChatComposer.vue +5 -4
  214. package/src/components/PluginLauncher.vue +42 -6
  215. package/src/components/PluginScopedRoot.vue +87 -0
  216. package/src/components/RoleSelector.vue +12 -1
  217. package/src/components/RolesView.vue +562 -0
  218. package/src/components/SentAttachmentChip.vue +102 -0
  219. package/src/components/SessionHistoryPanel.vue +109 -20
  220. package/src/components/SessionRoleIcon.vue +7 -4
  221. package/src/components/SessionSidebar.vue +20 -7
  222. package/src/components/SessionTabBar.vue +1 -1
  223. package/src/components/SettingsMcpTab.vue +4 -4
  224. package/src/components/SettingsModal.vue +2 -0
  225. package/src/components/SidebarHeader.vue +16 -5
  226. package/src/components/SourcesManager.vue +23 -9
  227. package/src/components/SourcesView.vue +1 -1
  228. package/src/components/StackView.vue +102 -6
  229. package/src/components/SuggestionsPanel.vue +105 -16
  230. package/src/components/SystemFileBanner.vue +1 -1
  231. package/src/components/TodoExplorer.vue +4 -5
  232. package/src/components/todo/TodoAddDialog.vue +2 -3
  233. package/src/components/todo/TodoEditDialog.vue +1 -2
  234. package/src/components/todo/TodoEditPanel.vue +2 -3
  235. package/src/components/todo/TodoKanbanView.vue +8 -5
  236. package/src/components/todo/TodoListView.vue +3 -5
  237. package/src/components/todo/TodoTableView.vue +7 -5
  238. package/src/composables/useAccountingChannel.ts +58 -0
  239. package/src/composables/useActiveSession.ts +4 -25
  240. package/src/composables/useAppApi.ts +6 -44
  241. package/src/composables/useClipboardCopy.ts +3 -20
  242. package/src/composables/useContentDisplay.ts +33 -2
  243. package/src/composables/useDevPluginReload.ts +23 -0
  244. package/src/composables/useDynamicFavicon.ts +5 -31
  245. package/src/composables/useEventListeners.ts +0 -20
  246. package/src/composables/useExpandedDirs.ts +4 -15
  247. package/src/composables/useFaviconState.ts +12 -46
  248. package/src/composables/useFileChange.ts +53 -0
  249. package/src/composables/useFreshPluginData.ts +6 -43
  250. package/src/composables/useHealth.ts +14 -43
  251. package/src/composables/useImageErrorRepair.ts +104 -0
  252. package/src/composables/useLatestDaily.ts +40 -0
  253. package/src/composables/useMarkdownDoc.ts +39 -0
  254. package/src/composables/useMarkdownLinkHandler.ts +1 -1
  255. package/src/composables/useMcpTools.ts +3 -16
  256. package/src/composables/useNotifications.ts +138 -112
  257. package/src/composables/usePdfDownload.ts +17 -3
  258. package/src/composables/usePendingCalls.ts +8 -26
  259. package/src/composables/usePluginErrorBoundary.ts +68 -0
  260. package/src/composables/usePubSub.ts +9 -17
  261. package/src/composables/useRunElapsed.ts +5 -22
  262. package/src/composables/useSandboxStatus.ts +4 -20
  263. package/src/composables/useSessionDerived.ts +7 -15
  264. package/src/composables/useSessionHistory.ts +70 -29
  265. package/src/composables/useSessionSync.ts +25 -3
  266. package/src/composables/useSkillsList.ts +59 -0
  267. package/src/composables/useTranslatedQueries.ts +109 -0
  268. package/src/config/apiRoutes.ts +181 -80
  269. package/src/config/historyFilters.ts +5 -3
  270. package/src/config/hostEvents.ts +17 -0
  271. package/src/config/mcpCatalog.ts +277 -5
  272. package/src/config/pubsubChannels.ts +134 -12
  273. package/src/config/roles.ts +212 -147
  274. package/src/config/systemFileDescriptors.ts +5 -5
  275. package/src/config/toolNames.ts +52 -30
  276. package/src/config/workspacePaths.ts +26 -2
  277. package/src/lang/de.ts +483 -27
  278. package/src/lang/en.ts +448 -27
  279. package/src/lang/es.ts +474 -27
  280. package/src/lang/fr.ts +476 -27
  281. package/src/lang/ja.ts +465 -27
  282. package/src/lang/ko.ts +466 -27
  283. package/src/lang/pt-BR.ts +473 -27
  284. package/src/lang/zh.ts +463 -27
  285. package/src/lib/vue-i18n.ts +1 -1
  286. package/src/lib/wiki-page/slug.ts +66 -0
  287. package/src/main.ts +85 -0
  288. package/src/plugins/_extras.ts +58 -0
  289. package/src/plugins/_generated/metas.ts +42 -0
  290. package/src/plugins/_generated/registrations.ts +44 -0
  291. package/src/plugins/_generated/server-bindings.ts +47 -0
  292. package/src/plugins/accounting/Preview.vue +106 -0
  293. package/src/plugins/accounting/View.vue +632 -0
  294. package/src/plugins/accounting/actions.ts +34 -0
  295. package/src/plugins/accounting/api.ts +301 -0
  296. package/src/plugins/accounting/components/AccountEditor.vue +250 -0
  297. package/src/plugins/accounting/components/AccountRow.vue +50 -0
  298. package/src/plugins/accounting/components/AccountsList.vue +102 -0
  299. package/src/plugins/accounting/components/AccountsModal.vue +300 -0
  300. package/src/plugins/accounting/components/BalanceSheet.vue +186 -0
  301. package/src/plugins/accounting/components/BookSettings.vue +284 -0
  302. package/src/plugins/accounting/components/BookSwitcher.vue +78 -0
  303. package/src/plugins/accounting/components/DateRangePicker.vue +140 -0
  304. package/src/plugins/accounting/components/JournalEntryForm.vue +504 -0
  305. package/src/plugins/accounting/components/JournalList.vue +553 -0
  306. package/src/plugins/accounting/components/Ledger.vue +206 -0
  307. package/src/plugins/accounting/components/NewBookForm.vue +211 -0
  308. package/src/plugins/accounting/components/OpeningBalancesForm.vue +271 -0
  309. package/src/plugins/accounting/components/ProfitLoss.vue +160 -0
  310. package/src/plugins/accounting/components/accountDraft.ts +13 -0
  311. package/src/plugins/accounting/components/accountNumbering.ts +103 -0
  312. package/src/plugins/accounting/components/accountValidation.ts +75 -0
  313. package/src/plugins/accounting/components/useLatestRequest.ts +44 -0
  314. package/src/plugins/accounting/countries.ts +158 -0
  315. package/src/plugins/accounting/currencies.ts +64 -0
  316. package/src/plugins/accounting/dates.ts +51 -0
  317. package/src/plugins/accounting/definition.ts +199 -0
  318. package/src/plugins/accounting/fiscalYear.ts +136 -0
  319. package/src/plugins/accounting/index.ts +49 -0
  320. package/src/plugins/accounting/meta.ts +91 -0
  321. package/src/plugins/accounting/timeSeriesEnums.ts +16 -0
  322. package/src/plugins/api.ts +125 -0
  323. package/src/plugins/canvas/View.vue +38 -28
  324. package/src/plugins/canvas/definition.ts +10 -8
  325. package/src/plugins/canvas/index.ts +15 -8
  326. package/src/plugins/canvas/meta.ts +12 -0
  327. package/src/plugins/chart/Preview.vue +1 -1
  328. package/src/plugins/chart/View.vue +2 -2
  329. package/src/plugins/chart/definition.ts +12 -2
  330. package/src/plugins/chart/index.ts +15 -7
  331. package/src/plugins/chart/meta.ts +18 -0
  332. package/src/plugins/editImages/definition.ts +44 -0
  333. package/src/plugins/editImages/index.ts +43 -0
  334. package/src/plugins/editImages/meta.ts +5 -0
  335. package/src/plugins/generateImage/View.vue +3 -1
  336. package/src/plugins/generateImage/definition.ts +2 -0
  337. package/src/plugins/generateImage/index.ts +13 -5
  338. package/src/plugins/generateImage/meta.ts +5 -0
  339. package/src/plugins/index.ts +35 -0
  340. package/src/plugins/manageRoles/Preview.vue +7 -4
  341. package/src/plugins/manageRoles/View.vue +12 -8
  342. package/src/plugins/manageRoles/definition.ts +6 -0
  343. package/src/plugins/manageRoles/index.ts +7 -6
  344. package/src/plugins/manageSkills/View.vue +11 -7
  345. package/src/plugins/manageSkills/definition.ts +4 -1
  346. package/src/plugins/manageSkills/index.ts +14 -7
  347. package/src/plugins/manageSkills/meta.ts +21 -0
  348. package/src/plugins/manageSource/definition.ts +4 -1
  349. package/src/plugins/manageSource/index.ts +15 -7
  350. package/src/plugins/manageSource/meta.ts +21 -0
  351. package/src/plugins/markdown/Preview.vue +10 -8
  352. package/src/plugins/markdown/View.vue +84 -17
  353. package/src/plugins/markdown/definition.ts +7 -1
  354. package/src/plugins/markdown/index.ts +15 -8
  355. package/src/plugins/markdown/meta.ts +16 -0
  356. package/src/plugins/meta-types.ts +97 -0
  357. package/src/plugins/metas.ts +224 -0
  358. package/src/plugins/presentForm/Preview.vue +4 -15
  359. package/src/plugins/presentForm/View.vue +35 -78
  360. package/src/plugins/presentForm/definition.ts +7 -6
  361. package/src/plugins/presentForm/index.ts +12 -5
  362. package/src/plugins/presentForm/meta.ts +11 -0
  363. package/src/plugins/presentForm/plugin.ts +8 -9
  364. package/src/plugins/presentForm/types.ts +0 -24
  365. package/src/plugins/presentHtml/Preview.vue +1 -8
  366. package/src/plugins/presentHtml/View.vue +401 -30
  367. package/src/plugins/presentHtml/definition.ts +8 -5
  368. package/src/plugins/presentHtml/index.ts +15 -8
  369. package/src/plugins/presentHtml/meta.ts +14 -0
  370. package/src/plugins/presentMulmoScript/View.vue +327 -107
  371. package/src/plugins/presentMulmoScript/definition.ts +34 -7
  372. package/src/plugins/presentMulmoScript/helpers.ts +4 -5
  373. package/src/plugins/presentMulmoScript/index.ts +20 -7
  374. package/src/plugins/presentMulmoScript/meta.ts +52 -0
  375. package/src/plugins/scheduler/AutomationsPreview.vue +2 -8
  376. package/src/plugins/scheduler/Preview.vue +5 -2
  377. package/src/plugins/scheduler/TasksTab.vue +16 -36
  378. package/src/plugins/scheduler/View.vue +22 -54
  379. package/src/plugins/scheduler/automationsDefinition.ts +14 -9
  380. package/src/plugins/scheduler/automationsMeta.ts +5 -0
  381. package/src/plugins/scheduler/calendarDefinition.ts +4 -7
  382. package/src/plugins/scheduler/calendarMeta.ts +28 -0
  383. package/src/plugins/scheduler/formatSchedule.ts +6 -24
  384. package/src/plugins/scheduler/index.ts +26 -52
  385. package/src/plugins/scope.ts +57 -0
  386. package/src/plugins/server-bindings-types.ts +38 -0
  387. package/src/plugins/server.ts +32 -0
  388. package/src/plugins/skill/Preview.vue +25 -0
  389. package/src/plugins/skill/View.vue +125 -0
  390. package/src/plugins/skill/definition.ts +23 -0
  391. package/src/plugins/skill/index.ts +36 -0
  392. package/src/plugins/skill/plugin.ts +31 -0
  393. package/src/plugins/skill/types.ts +21 -0
  394. package/src/plugins/spreadsheet/Preview.vue +1 -3
  395. package/src/plugins/spreadsheet/View.vue +29 -49
  396. package/src/plugins/spreadsheet/cellHighlights.ts +2 -3
  397. package/src/plugins/spreadsheet/definition.ts +5 -2
  398. package/src/plugins/spreadsheet/index.ts +15 -8
  399. package/src/plugins/spreadsheet/keyboardNav.ts +38 -0
  400. package/src/plugins/spreadsheet/meta.ts +14 -0
  401. package/src/plugins/textResponse/Preview.vue +9 -1
  402. package/src/plugins/textResponse/View.vue +59 -8
  403. package/src/plugins/textResponse/index.ts +11 -3
  404. package/src/plugins/textResponse/plugin.ts +8 -10
  405. package/src/plugins/textResponse/types.ts +28 -0
  406. package/src/plugins/wiki/Preview.vue +6 -4
  407. package/src/plugins/wiki/View.vue +463 -254
  408. package/src/plugins/wiki/components/WikiPageBody.vue +159 -0
  409. package/src/plugins/wiki/helpers.ts +17 -0
  410. package/src/plugins/wiki/history/HistoryDetail.vue +325 -0
  411. package/src/plugins/wiki/history/HistoryTab.vue +167 -0
  412. package/src/plugins/wiki/history/RestoreConfirm.vue +63 -0
  413. package/src/plugins/wiki/history/api.ts +52 -0
  414. package/src/plugins/wiki/history/diff.ts +145 -0
  415. package/src/plugins/wiki/index.ts +42 -32
  416. package/src/plugins/wiki/meta.ts +10 -0
  417. package/src/plugins/wiki/pageEditLoader.ts +53 -0
  418. package/src/plugins/wiki/route.ts +8 -0
  419. package/src/router/guards.ts +2 -1
  420. package/src/router/index.ts +19 -0
  421. package/src/router/pageRoutes.ts +1 -0
  422. package/src/tools/index.ts +50 -51
  423. package/src/tools/runtimeLoader.ts +141 -0
  424. package/src/tools/types.ts +44 -1
  425. package/src/types/notification.ts +23 -0
  426. package/src/types/pastedFile.ts +10 -0
  427. package/src/types/session.ts +61 -3
  428. package/src/types/sse.ts +21 -6
  429. package/src/utils/agent/eventDispatch.ts +12 -9
  430. package/src/utils/agent/pastedAttachment.ts +35 -0
  431. package/src/utils/agent/request.ts +32 -3
  432. package/src/utils/agent/toolCalls.ts +7 -1
  433. package/src/utils/api.ts +1 -1
  434. package/src/utils/chat/exportMarkdown.ts +243 -0
  435. package/src/utils/errors.ts +10 -2
  436. package/src/utils/files/expandedDirs.ts +1 -1
  437. package/src/utils/filesPreview/todoPreview.ts +13 -2
  438. package/src/utils/format/date.ts +1 -3
  439. package/src/utils/format/jsonSyntax.ts +5 -0
  440. package/src/utils/html/iframeHeightReporterScript.ts +62 -0
  441. package/src/utils/html/previewCsp.ts +29 -2
  442. package/src/utils/image/htmlSrcAttrs.ts +122 -0
  443. package/src/utils/image/imageRepairInlineScript.ts +115 -0
  444. package/src/utils/image/resolve.ts +17 -3
  445. package/src/utils/image/rewriteMarkdownImageRefs.ts +62 -9
  446. package/src/utils/markdown/frontmatter.ts +125 -0
  447. package/src/utils/markdown/taskList.ts +7 -2
  448. package/src/utils/plugin/runtime.ts +132 -0
  449. package/src/utils/session/mergeSessions.ts +40 -37
  450. package/src/utils/session/sessionEntries.ts +74 -18
  451. package/src/utils/session/sessionHelpers.ts +54 -10
  452. package/src/utils/tools/result.ts +76 -14
  453. package/src/vite-env.d.ts +6 -0
  454. package/client/assets/html2canvas-Cx501zZr-Bug0qRNv.js +0 -5
  455. package/client/assets/index-CY-WpQUm.css +0 -2
  456. package/client/assets/index-DbTz2Mfs.js +0 -4911
  457. package/client/assets/material-symbols-outlined-NzYEeyps.woff2 +0 -0
  458. package/server/api/routes/html.ts +0 -114
  459. package/server/api/routes/todos.ts +0 -293
  460. package/server/api/routes/todosColumnsHandlers.ts +0 -333
  461. package/server/api/routes/todosHandlers.ts +0 -274
  462. package/server/api/routes/todosItemsHandlers.ts +0 -386
  463. package/server/utils/files/todos-io.ts +0 -29
  464. package/src/components/NotificationToast.vue +0 -75
  465. package/src/plugins/editImage/definition.ts +0 -27
  466. package/src/plugins/editImage/index.ts +0 -37
  467. package/src/plugins/presentHtml/helpers.ts +0 -72
  468. package/src/plugins/scheduler/LegacySchedulerView.vue +0 -32
  469. package/src/plugins/scheduler/legacyShape.ts +0 -34
  470. package/src/plugins/todo/Preview.vue +0 -68
  471. package/src/plugins/todo/View.vue +0 -378
  472. package/src/plugins/todo/composables/useTodos.ts +0 -179
  473. package/src/plugins/todo/definition.ts +0 -45
  474. package/src/plugins/todo/index.ts +0 -62
  475. package/src/plugins/todo/labels.ts +0 -163
  476. package/src/plugins/todo/priority.ts +0 -98
  477. package/src/plugins/todo/viewModes.ts +0 -19
  478. package/src/plugins/wiki/definition.ts +0 -25
  479. package/src/tools/legacyPluginNames.ts +0 -13
  480. package/src/utils/format/frontmatter.ts +0 -80
  481. package/src/utils/image/rewriteHtmlImageRefs.ts +0 -50
  482. package/src/utils/notification/dispatch.ts +0 -58
  483. /package/client/assets/{purify.es-Fx1Nqyry-BwJECkqS.js → purify.es-Fx1Nqyry-BSVNht6S.js} +0 -0
  484. /package/src/plugins/{editImage → editImages}/Preview.vue +0 -0
  485. /package/src/plugins/{editImage → editImages}/View.vue +0 -0
  486. /package/src/{config/schedulerActions.ts → plugins/scheduler/actions.ts} +0 -0
package/src/lang/fr.ts CHANGED
@@ -33,11 +33,13 @@ const frMessages = {
33
33
  attachFile: "Joindre un fichier",
34
34
  fileTooLarge: "Fichier trop volumineux ({sizeMB} Mo). La limite est de 30 Mo.",
35
35
  unsupportedFileType: "Type de fichier non pris en charge. Acceptés : images, PDF, DOCX, XLSX, PPTX, fichiers texte.",
36
+ attachImageFailed: "Échec de l'attache de l'image : {error}",
36
37
  },
37
38
  sessionHistoryPanel: {
38
39
  filters: {
39
40
  all: "Toutes",
40
41
  unread: "Non lues",
42
+ bookmarked: "Favoris",
41
43
  human: "Humain",
42
44
  scheduler: "Planificateur",
43
45
  skill: "Skill",
@@ -50,18 +52,45 @@ const frMessages = {
50
52
  running: "En cours",
51
53
  noMessages: "(aucun message)",
52
54
  openRowAria: "Ouvrir la session : {preview}",
55
+ rowMenuAria: "Actions de la session",
56
+ bookmark: "Ajouter aux favoris",
57
+ unbookmark: "Retirer des favoris",
58
+ delete: "Supprimer",
59
+ deleteConfirm: "Supprimer cette session ?\n\n{preview}\n\nCette action est irréversible.",
53
60
  },
54
61
  notificationBell: {
55
62
  notifications: "Notifications",
56
- markAllRead: "Tout marquer comme lu",
57
- noNotifications: "Aucune notification",
63
+ activeSection: "Actives",
64
+ historySection: "Historique",
65
+ noActive: "Aucune notification active",
66
+ noHistory: "Aucune activité récente",
67
+ clearAll: "Tout effacer",
58
68
  dismiss: "Ignorer",
69
+ cancel: "Annuler",
70
+ },
71
+ pluginDiagnostics: {
72
+ title: "Problème de configuration du plugin",
73
+ hostBody: "Le plugin « {plugin} » a tenté d'enregistrer la clé {label} « {key} », mais elle est réservée par l'hôte. L'entrée du plugin a été supprimée.",
74
+ intraBody:
75
+ "Les plugins « {first} » et « {second} » enregistrent tous deux le {dimension} « {key} ». « {first} » l'a réclamé en premier, donc l'enregistrement de « {second} » est ignoré.",
76
+ },
77
+ pluginErrorBoundary: {
78
+ title: "Le plugin {pkg} a planté",
79
+ subtitle: "Le plugin n'a pas pu être affiché. L'erreur a été consignée dans la console.",
80
+ showDetails: "Afficher les détails",
81
+ hideDetails: "Masquer les détails",
82
+ retry: "Réessayer",
59
83
  },
60
84
  sidebarHeader: {
61
85
  home: "Aller à la dernière conversation",
62
86
  toolCallHistory: "Historique des appels d'outils",
63
87
  settings: "Paramètres",
64
88
  settingsGeminiMissing: "Paramètres — Clé API Gemini manquante",
89
+ todayJournal: "Résumé du jour",
90
+ todayJournalNotFound: "Pas encore de résumé — discutez un peu et le journal en générera un.",
91
+ todayJournalLoadFailed: "Échec du chargement du journal (status {status}) : {error}",
92
+ copyMarkdown: "Copier la conversation en Markdown",
93
+ copiedMarkdown: "Copié !",
65
94
  },
66
95
  rightSidebar: {
67
96
  toggleSystemPrompt: "Basculer le system prompt",
@@ -202,6 +231,110 @@ const frMessages = {
202
231
  pdfPreview: "Aperçu PDF",
203
232
  parseError: "erreur d'analyse",
204
233
  },
234
+ filesView: {
235
+ chatPlaceholder: "Posez une question sur ce fichier…",
236
+ },
237
+ systemFiles: {
238
+ schemaLabel: "Schéma",
239
+ showDetails: "Afficher les détails",
240
+ hideDetails: "Masquer les détails",
241
+ editPolicy: {
242
+ "agent-managed-but-hand-editable": "Géré par l'agent (édition manuelle OK)",
243
+ "user-editable": "Éditable par l'utilisateur",
244
+ "agent-managed": "Géré par l'agent",
245
+ "fragile-format": "Format fragile",
246
+ ephemeral: "Éphémère",
247
+ },
248
+ interests: {
249
+ title: "Configuration des centres d'intérêt",
250
+ summary: "Sujets que le pipeline news / sources surveille et classe pour vous. Éditable à la main ; l'agent le met également à jour depuis le chat.",
251
+ },
252
+ mcp: {
253
+ title: "Serveurs MCP",
254
+ summary: "Serveurs externes Model Context Protocol attachés à l'agent. Ajoutez des serveurs HTTP ou stdio pour étendre les outils disponibles.",
255
+ },
256
+ settings: {
257
+ title: "Paramètres de l'app",
258
+ summary: "Préférences de comportement éditables — clé API Gemini, outils autorisés, configuration du sandbox, etc.",
259
+ },
260
+ schedulerTasks: {
261
+ title: "Tâches du planificateur",
262
+ summary: "Automatisations récurrentes de l'agent déclenchées selon un planning. Gérées via l'UI Automations ; ce fichier est la source sur disque.",
263
+ },
264
+ schedulerOverrides: {
265
+ title: "Surcharges du planificateur",
266
+ summary:
267
+ "Surcharges horaires / d'intervalle par tâche appliquées au-dessus du planning système. L'agent édite ce fichier quand vous demandez à changer l'horaire d'une tâche récurrente.",
268
+ },
269
+ newsReadState: {
270
+ title: "État de lecture des news",
271
+ summary: "Suivi local des news déjà vues. Éphémère — vous pouvez le supprimer ; il sera régénéré au fil de votre lecture.",
272
+ },
273
+ schedulerItems: {
274
+ title: "File d'éléments du planificateur",
275
+ summary: "Invocations planifiées prêtes à se déclencher. Géré par l'agent ; n'éditez pas à la main sans comprendre chaque champ.",
276
+ },
277
+ todosItems: {
278
+ title: "Tâches à faire",
279
+ summary:
280
+ "Vos tâches dans toutes les colonnes du tableau kanban. L'agent écrit ici quand vous dites « ajoute une tâche » ; vous pouvez aussi éditer à la main.",
281
+ },
282
+ todosColumns: {
283
+ title: "Colonnes des tâches",
284
+ summary: "Disposition des colonnes du tableau kanban (titres, ordre, ids). Éditable par l'utilisateur — renommez ou réordonnez librement.",
285
+ },
286
+ wikiIndex: {
287
+ title: "Index du wiki",
288
+ summary: "Index auto-généré de toutes les pages du wiki. Régénéré à chaque édition — n'éditez pas à la main (vos changements seront écrasés).",
289
+ },
290
+ wikiLog: {
291
+ title: "Journal d'édition du wiki",
292
+ summary: "Journal d'activité des créations et éditions de pages. Géré par l'agent et en append seulement — utile comme flux des changements récents.",
293
+ },
294
+ wikiSummary: {
295
+ title: "Résumé du wiki",
296
+ summary: "Vue d'ensemble auto-générée du wiki — clusters thématiques, nombre de pages, activité récente. Régénérée par l'agent.",
297
+ },
298
+ wikiSchema: {
299
+ title: "Schéma du wiki",
300
+ summary:
301
+ "Spécification de format que l'agent lit pour garder les pages du wiki cohérentes. Fragile — il attend une structure précise ; préférez les éditions via l'agent.",
302
+ },
303
+ memory: {
304
+ title: "Mémoire",
305
+ summary:
306
+ "Faits distillés à votre sujet, toujours chargés comme contexte pour les nouvelles conversations. L'extracteur du journal y ajoute automatiquement ; vous pouvez aussi éditer à la main.",
307
+ },
308
+ summariesIndex: {
309
+ title: "Index des résumés",
310
+ summary: "Index navigable reliant les résumés quotidiens et thématiques générés par le journal. Géré par l'agent ; régénéré à chaque passe.",
311
+ },
312
+ rolesJson: {
313
+ title: "Définition du rôle (JSON)",
314
+ summary: "Configuration du rôle — choix du modèle, serveurs MCP, plugins autorisés, suggestions de requêtes. Éditable, pas besoin de redémarrage.",
315
+ },
316
+ rolesMd: {
317
+ title: "Description du rôle (Markdown)",
318
+ summary: "Persona et system prompt du rôle, chargés comme contexte quand ce rôle est actif. Éditable ; les changements s'appliquent au prochain message.",
319
+ },
320
+ sourceFeed: {
321
+ title: "Source abonnée",
322
+ summary: "Une source abonnée (RSS, releases / issues GitHub, arXiv, etc.). Éditable ; le pipeline interroge selon le planning.",
323
+ },
324
+ sourceState: {
325
+ title: "État de la source",
326
+ summary:
327
+ "État éphémère du pipeline pour une source — derniers ids vus, ETags, erreurs de fetch. Vous pouvez le supprimer ; il sera régénéré à la prochaine exécution.",
328
+ },
329
+ journalDaily: {
330
+ title: "Résumé quotidien du journal",
331
+ summary: "Récapitulatif auto-généré de votre activité pour une journée, distillé par le journal à partir des sessions de chat.",
332
+ },
333
+ journalTopic: {
334
+ title: "Journal thématique",
335
+ summary: "Notes à long terme sur un sujet spécifique, accumulées et révisées au fur et à mesure que vous en reparlez. Géré par l'agent.",
336
+ },
337
+ },
205
338
  settingsMcpTab: {
206
339
  explanation:
207
340
  "Ajoutez des serveurs MCP externes. Les serveurs HTTP fonctionnent dans tous les modes. Les serveurs Stdio utilisent le {npx} / {node} / {tsx} de l'image du sandbox ; lorsque Docker est activé, les chemins doivent se trouver dans l'espace de travail.",
@@ -287,10 +420,81 @@ const frMessages = {
287
420
  },
288
421
  },
289
422
  },
423
+ appleNative: {
424
+ displayName: "Apps natives Apple (macOS)",
425
+ description: "Lit et écrit Rappels, Calendrier, Notes, Mail et Plans via AppleScript. macOS uniquement — sans identifiants.",
426
+ },
427
+ gmail: {
428
+ displayName: "Gmail",
429
+ description:
430
+ "Lit, envoie et étiquette votre Gmail. Utilise un client OAuth Google que vous créez dans votre propre projet Google Cloud (sans vérification d'app).",
431
+ field: {
432
+ credentials: {
433
+ label: "Chemin vers credentials.json",
434
+ help: "Google Cloud Console → APIs & Services → Credentials → ID client OAuth (Desktop app). Téléchargez credentials.json et collez son chemin absolu.",
435
+ },
436
+ },
437
+ },
438
+ googleCalendar: {
439
+ displayName: "Google Agenda",
440
+ description: "Lit et crée des événements Google Agenda. Même modèle BYO credentials.json que Gmail.",
441
+ field: {
442
+ credentials: {
443
+ label: "Chemin vers credentials.json",
444
+ help: "Réutilisez le même client OAuth Google Cloud que Gmail, ou créez-en un séparé pour le Calendar.",
445
+ },
446
+ },
447
+ },
448
+ googleDrive: {
449
+ displayName: "Google Drive",
450
+ description: "Recherche et lit les fichiers Google Drive. BYO identifiants OAuth Google — le jeton est mis en cache localement à côté du fichier.",
451
+ field: {
452
+ credentials: {
453
+ label: "Chemin vers credentials.json",
454
+ help: "Google Cloud Console → APIs & Services → Credentials → ID client OAuth (Desktop app). Activez l'API Google Drive dans le même projet.",
455
+ },
456
+ },
457
+ },
458
+ github: {
459
+ displayName: "GitHub",
460
+ description:
461
+ "Lit les repos, issues, PRs et exécute des recherches avec un Personal Access Token. Limitez la portée du token — les permissions d'écriture (`repo`) laissent l'agent push sur n'importe quel repo accessible.",
462
+ field: {
463
+ token: {
464
+ label: "Personal Access Token",
465
+ help: "GitHub → Settings → Developer settings → Personal access tokens. Préférez les fine-grained tokens limités aux repos où l'agent doit agir.",
466
+ },
467
+ },
468
+ },
469
+ linear: {
470
+ displayName: "Linear",
471
+ description: "Lit et met à jour les issues, projets et cycles Linear avec une clé d'API personnelle.",
472
+ field: {
473
+ apiKey: {
474
+ label: "Clé d'API Linear",
475
+ help: "Linear → Settings → API → Personal API keys. Cliquez sur 🔑 pour ouvrir la page et sur Create key.",
476
+ },
477
+ },
478
+ },
290
479
  weatherOpenMeteo: {
291
480
  displayName: "Météo (Open-Meteo)",
292
481
  description: "Prévisions météo gratuites et conditions actuelles dans le monde entier — sans clé d'API.",
293
482
  },
483
+ spotify: {
484
+ displayName: "Spotify",
485
+ description:
486
+ "Recherche des morceaux, gère les playlists, contrôle la lecture. BYO app développeur Spotify — Client ID uniquement (flux PKCE, pas de client secret).",
487
+ field: {
488
+ clientId: {
489
+ label: "Client ID",
490
+ help: "Spotify Developer Dashboard → Create app, configurez la Redirect URI à http://127.0.0.1:8888/callback, copiez le Client ID. Puis exécutez une fois dans le terminal `SPOTIFY_CLIENT_ID=<id> npx spotify-mcp@latest auth` pour vous connecter (refresh token mis en cache dans ~/.spotify-mcp/tokens.json).",
491
+ },
492
+ },
493
+ },
494
+ youtubeTranscript: {
495
+ displayName: "Transcription YouTube",
496
+ description: "Récupère les sous-titres de n'importe quelle vidéo YouTube publique par URL. Sans identifiants.",
497
+ },
294
498
  },
295
499
  config: {
296
500
  howToGet: "Comment l'obtenir",
@@ -352,6 +556,8 @@ const frMessages = {
352
556
  redo: "Rétablir",
353
557
  clear: "Effacer",
354
558
  styleLabel: "Style :",
559
+ stylePromptWithPath: "Transforme l'image en `{path}` en une image de style {style}.",
560
+ stylePromptNoPath: "Transforme mon dessin sur le canevas en une image de style {style}.",
355
561
  },
356
562
  pluginChart: {
357
563
  untitled: "Graphique",
@@ -359,20 +565,225 @@ const frMessages = {
359
565
  chartTitle: "Graphique {num}",
360
566
  png: "PNG",
361
567
  },
362
- pluginTodo: {
363
- clearFilters: "Effacer tous les filtres",
364
- deleteItem: "Supprimer l'élément",
365
- apiError: "⚠ Échec de la mise à jour des tâches : {error}",
366
- loadFailed: "Échec du chargement des todos",
367
- heading: "Liste de tâches",
368
- completedRatio: "{done}/{total} terminées",
369
- filter: "Filtre :",
370
- noItems: "Aucune tâche pour le moment",
371
- noMatchingFilter: "Aucun élément ne correspond au filtre actif",
372
- update: "Mettre à jour",
373
- clearCompleted: "Effacer les terminées",
374
- clearButton: "Effacer ✕",
375
- deleteSymbol: "",
568
+ pluginAccounting: {
569
+ title: "Comptabilité",
570
+ noBook: 'Pas encore de livres — cliquez sur "+ Nouveau livre" en haut pour créer le premier.',
571
+ common: {
572
+ cancel: "Annuler",
573
+ loading: "Chargement…",
574
+ error: "Erreur : {error}",
575
+ empty: "Aucune écriture pour l'instant.",
576
+ },
577
+ tabs: {
578
+ journal: "Journal",
579
+ newEntry: "Nouvelle écriture",
580
+ opening: "Ouverture",
581
+ accounts: "Comptes",
582
+ ledger: "Grand livre",
583
+ balanceSheet: "Bilan",
584
+ profitLoss: "Résultat",
585
+ settings: "Paramètres",
586
+ },
587
+ bookSwitcher: {
588
+ label: "Livre",
589
+ newBook: "Nouveau livre…",
590
+ create: "Créer",
591
+ nameLabel: "Nom",
592
+ currencyLabel: "Devise",
593
+ countryLabel: "Pays",
594
+ countryPlaceholder: "Sélectionner un pays…",
595
+ countryHint: "Le pays définit la juridiction fiscale afin que l'assistant puisse donner des conseils ciblés (T-number au Japon, ID TVA dans l'UE, etc.).",
596
+ fiscalYearEndLabel: "Clôture de l'exercice",
597
+ fiscalYearEndQ1: "31 mars (Q1)",
598
+ fiscalYearEndQ2: "30 juin (Q2)",
599
+ fiscalYearEndQ3: "30 septembre (Q3)",
600
+ fiscalYearEndQ4: "31 décembre (Q4)",
601
+ fiscalYearEndHint:
602
+ "Définit la limite de l'exercice utilisée par les raccourcis de plage de dates de ce livre. Par défaut : 31 décembre (Q4 — année civile).",
603
+ placeholder: "Sélectionner un livre…",
604
+ firstRunHint:
605
+ "Choisissez le nom, la devise, le pays et la clôture de l'exercice de votre premier livre. La devise est figée par livre et difficile à changer une fois les écritures commencées.",
606
+ },
607
+ deletedNotice: {
608
+ title: "« {bookName} » a été supprimé.",
609
+ body: "Choisissez un autre livre dans la liste ci-dessus ou créez-en un nouveau.",
610
+ },
611
+ journalList: {
612
+ fromLabel: "Du",
613
+ toLabel: "Au",
614
+ accountLabel: "Compte",
615
+ allAccounts: "Tous",
616
+ void: "Annuler",
617
+ edit: "Modifier",
618
+ voidConfirm: "Annuler cette écriture ? L'originale reste dans le journal ; une paire de contre-passation est ajoutée.",
619
+ voidReason: "Motif (optionnel) :",
620
+ columns: {
621
+ date: "Date",
622
+ kind: "Type",
623
+ memo: "Mémo",
624
+ lines: "Lignes",
625
+ },
626
+ kind: {
627
+ normal: "—",
628
+ opening: "Ouverture",
629
+ void: "Contre-passation",
630
+ voidMarker: "Marqueur d'annulation",
631
+ },
632
+ },
633
+ entryForm: {
634
+ title: "Nouvelle écriture",
635
+ editTitle: "Modifier l'écriture",
636
+ editBanner: "À l'envoi, l'écriture d'origine sera contre-passée et remplacée par celle-ci.",
637
+ dateLabel: "Date",
638
+ memoLabel: "Mémo",
639
+ accountLabel: "Compte",
640
+ debitLabel: "Débit",
641
+ creditLabel: "Crédit",
642
+ taxRegistrationIdLabel: "N° d'identification fiscale",
643
+ taxRegistrationIdPlaceholder: "TVA / SIRET / GSTIN…",
644
+ taxRegistrationIdMissingWarning: "Obligatoire",
645
+ addLine: "Ajouter une ligne",
646
+ removeLine: "Supprimer",
647
+ submit: "Comptabiliser",
648
+ submitting: "Comptabilisation…",
649
+ update: "Mettre à jour",
650
+ updating: "Mise à jour…",
651
+ cancelEdit: "Annuler",
652
+ success: "Écriture comptabilisée.",
653
+ editSuccess: "Écriture mise à jour.",
654
+ editVoidReason: "modifiée",
655
+ imbalance: "Déséquilibre : {amount}",
656
+ balanced: "Équilibré ✓",
657
+ },
658
+ openingForm: {
659
+ title: "Soldes d'ouverture",
660
+ asOfLabel: "Au",
661
+ explainer: "Comptes de bilan uniquement (actif/passif/capitaux). Σ débit = Σ crédit ; le solde tombe sur Retained Earnings.",
662
+ emptyHint:
663
+ "Vous pouvez enregistrer en laissant tout vide — les soldes d'ouverture peuvent être mis à jour plus tard. Il suffit qu'une ouverture soit enregistrée pour débloquer les autres onglets.",
664
+ explainer2: "Comptes de bilan uniquement.",
665
+ submit: "Enregistrer les soldes d'ouverture",
666
+ replaceWarning: "Enregistrer remplace l'ouverture existante (l'ancienne est contre-passée dans le journal).",
667
+ none: "Aucun solde d'ouverture défini.",
668
+ setBy: "Défini au {date}",
669
+ success: "Soldes d'ouverture enregistrés.",
670
+ },
671
+ ledger: {
672
+ selectAccount: "Sélectionner un compte",
673
+ closingBalance: "Solde de clôture",
674
+ columns: {
675
+ date: "Date",
676
+ memo: "Mémo",
677
+ debit: "Débit",
678
+ credit: "Crédit",
679
+ balance: "Solde",
680
+ taxRegistrationId: "N° d'identification fiscale",
681
+ },
682
+ },
683
+ dateRange: {
684
+ shortcutLabel: "Plage",
685
+ currentQuarter: "Trimestre en cours",
686
+ previousQuarter: "Trimestre précédent",
687
+ currentYear: "Exercice en cours",
688
+ previousYear: "Exercice précédent",
689
+ lifetime: "Depuis l'ouverture",
690
+ all: "Tout",
691
+ fromLabel: "Du",
692
+ toLabel: "Au",
693
+ },
694
+ balanceSheet: {
695
+ asOfLabel: "Période",
696
+ sections: {
697
+ asset: "Actif",
698
+ liability: "Passif",
699
+ equity: "Capitaux",
700
+ },
701
+ total: "Total",
702
+ imbalance: "Déséquilibre : {amount}",
703
+ currentEarnings: "Résultat de la période",
704
+ shortcutLabel: "Raccourci",
705
+ thisMonth: "Ce mois-ci",
706
+ lastMonth: "Mois précédent",
707
+ lastQuarter: "Trimestre précédent",
708
+ lastYear: "Année précédente",
709
+ },
710
+ profitLoss: {
711
+ fromLabel: "Du",
712
+ toLabel: "Au",
713
+ income: "Produits",
714
+ expense: "Charges",
715
+ netIncome: "Résultat net :",
716
+ },
717
+ accounts: {
718
+ listEmpty: "Aucun compte dans cette catégorie pour l'instant.",
719
+ openLedgerAria: "Ouvrir le grand livre de {code} {name}",
720
+ manageButton: "Gérer les comptes",
721
+ modalTitle: "Gérer les comptes",
722
+ addAccount: "Ajouter un compte",
723
+ sectionTitle: {
724
+ asset: "Actifs",
725
+ liability: "Passifs",
726
+ equity: "Capitaux propres",
727
+ income: "Produits",
728
+ expense: "Charges",
729
+ },
730
+ columnCode: "Code",
731
+ columnName: "Nom",
732
+ columnType: "Type",
733
+ columnNote: "Note",
734
+ typeOption: {
735
+ asset: "Actif",
736
+ liability: "Passif",
737
+ equity: "Capitaux propres",
738
+ income: "Produit",
739
+ expense: "Charge",
740
+ },
741
+ edit: "Modifier",
742
+ save: "Enregistrer",
743
+ cancel: "Annuler",
744
+ saving: "Enregistrement…",
745
+ addToCategory: "Ajouter un compte de {type}",
746
+ deactivate: "Désactiver",
747
+ reactivate: "Activer",
748
+ deactivateConfirm: "Masquer « {name} » des listes déroulantes d’écriture / grand livre ? Les écritures existantes ne sont pas affectées.",
749
+ errorEmptyCode: "Le code est requis.",
750
+ errorReservedCode: "Les codes commençant par « _ » sont réservés aux lignes système.",
751
+ errorInvalidCodeFormat: "Le code de compte doit comporter exactement 4 chiffres.",
752
+ errorCodeTypeMismatch: "Le code doit correspondre au type de compte : 1xxx actif, 2xxx passif, 3xxx capitaux propres, 4xxx produit, 5xxx charge.",
753
+ errorEmptyName: "Le nom est requis.",
754
+ errorDuplicateCode: "Un compte avec ce code existe déjà.",
755
+ errorDuplicateName: "Un compte portant ce nom existe déjà.",
756
+ success: "Compte enregistré.",
757
+ codeReadOnlyHint: "Le code ne peut pas être modifié une fois le compte créé.",
758
+ noteOptional: "(facultatif)",
759
+ },
760
+ settings: {
761
+ bookInfo: "Informations du livre",
762
+ bookInfoExplain:
763
+ "Modifiez le pays pour mettre à jour les conseils selon la juridiction fiscale. La devise ne peut pas être changée une fois des écritures saisies.",
764
+ countryUnset: "(non défini)",
765
+ fiscalYearEndExplain:
766
+ "Modifie uniquement la résolution des raccourcis de plage de dates à partir de maintenant ; les écritures existantes ne sont pas déplacées.",
767
+ saveChanges: "Enregistrer les modifications",
768
+ updateOk: "Livre mis à jour.",
769
+ rebuild: "Reconstruire les snapshots",
770
+ rebuildExplain: "Supprime tous les snapshots mensuels et les recalcule depuis le journal. Utile après modification manuelle du journal.",
771
+ rebuildOk: "{count} période(s) reconstruite(s).",
772
+ advanced: "Avancé…",
773
+ deleteBook: "Supprimer le livre",
774
+ deleteBookExplain: "Supprime définitivement le répertoire du livre. Irréversible.",
775
+ deleteBookConfirm: 'Tapez "{bookName}" pour confirmer :',
776
+ deleteBookButton: "Supprimer définitivement",
777
+ },
778
+ preview: {
779
+ entry: "Écriture comptabilisée le {date}",
780
+ pl: "P&L {from} → {to} : net {net}",
781
+ bs: "Bilan au {date} · actif {assets}",
782
+ bookCreated: 'Livre "{name}" ({id}) créé',
783
+ },
784
+ previewSummary: "Comptabilité · {bookId}",
785
+ previewError: "Comptabilité : {error}",
786
+ previewGeneric: "Résultat comptable",
376
787
  },
377
788
  todoExplorer: {
378
789
  heading: "Tâches",
@@ -389,14 +800,6 @@ const frMessages = {
389
800
  newColumnPlaceholder: "Revue",
390
801
  noMatchingFilter: "Aucun élément ne correspond au filtre actuel",
391
802
  },
392
- todoPreview: {
393
- completedRatio: "{done}/{total} terminées",
394
- moreItems: "+ {count} de plus…",
395
- headerIcon: "☑",
396
- doneIcon: "✓",
397
- pendingIcon: "○",
398
- moreLabels: "+{count}",
399
- },
400
803
  todoDialogs: {
401
804
  addTitle: "Ajouter une tâche",
402
805
  editTitle: "Modifier la tâche",
@@ -426,6 +829,7 @@ const frMessages = {
426
829
  noMatchingFilter: "Aucun élément ne correspond au filtre actuel",
427
830
  sortColumnAria: "Trier par {column}",
428
831
  expandRowAria: "Développer la tâche : {task}",
832
+ deleteItem: "Supprimer l'élément",
429
833
  },
430
834
  pluginWiki: {
431
835
  backToIndex: "Retour à l'index",
@@ -445,6 +849,35 @@ const frMessages = {
445
849
  noMatches: "Aucune page avec le tag #{tag}",
446
850
  lintChat: "Vérifier mon wiki",
447
851
  taskCountMismatch: "La source du wiki et le rendu diffèrent sur le nombre de tâches. La modification a été refusée pour éviter de corrompre le fichier.",
852
+ metadataCreated: "Créé",
853
+ metadataUpdated: "Mis à jour",
854
+ metadataEditor: "Éditeur",
855
+ pageEditHeader: "Édition du wiki",
856
+ snapshotExpired: "Instantané expiré — affichage de la page actuelle",
857
+ pageDeleted: "Page supprimée",
858
+ history: {
859
+ tabContent: "Contenu",
860
+ tabHistory: "Historique",
861
+ empty: "Aucun historique — modifiez cette page et la première version apparaîtra ici.",
862
+ loading: "Chargement de l'historique…",
863
+ backToList: "Retour à l'historique",
864
+ restoreButton: "Restaurer cette version",
865
+ restoreConfirmTitle: "Restaurer cette version ?",
866
+ restoreConfirmBody: "Restaurer la page vers la version du {ts} par {editor}. La page actuelle sera remplacée. L'historique existant est conservé.",
867
+ restoreConfirmAction: "Restaurer",
868
+ restoreConfirmCancel: "Annuler",
869
+ restoreSuccessToast: "Page restaurée.",
870
+ restoreFailureBanner: "Échec de la restauration : {error}",
871
+ compareCurrent: "Comparer avec la page actuelle",
872
+ comparePrevious: "Comparer avec la version précédente",
873
+ diffNoPrevious: "Aucune version précédente à comparer.",
874
+ diffNoChanges: "Aucune différence de contenu entre cette version et l'élément de comparaison.",
875
+ editorBadgeUser: "Utilisateur",
876
+ editorBadgeLLM: "LLM",
877
+ editorBadgeSystem: "Système",
878
+ hiddenLines: "{count} lignes inchangées masquées",
879
+ expandHidden: "Afficher",
880
+ },
448
881
  },
449
882
  pluginPresentForm: {
450
883
  fallbackTitle: "Formulaire",
@@ -462,8 +895,13 @@ const frMessages = {
462
895
  saveAsPdf: "Enregistrer en PDF (ouvre la boîte de dialogue d'impression)",
463
896
  pdf: "PDF",
464
897
  untitled: "Page HTML",
465
- hideSource: "Masquer la source <>",
466
- showSource: "Afficher la source <>",
898
+ editSource: "Modifier la source HTML",
899
+ cancel: "Annuler",
900
+ applyChanges: "Appliquer les modifications",
901
+ saving: "Enregistrement...",
902
+ saveError: "⚠ Échec de l'enregistrement : {error}",
903
+ loadingSource: "Chargement de la source…",
904
+ sourceError: "Échec du chargement de la source : {error}",
467
905
  },
468
906
  pluginNews: {
469
907
  title: "Actualités",
@@ -578,7 +1016,6 @@ const frMessages = {
578
1016
  pluginManageRoles: {
579
1017
  heading: "Rôles personnalisés",
580
1018
  roleCount: "{count} rôle | {count} rôles",
581
- previewCount: "{count} rôle personnalisé | {count} rôles personnalisés",
582
1019
  addButton: "+ Ajouter",
583
1020
  createPanel: "Créer un nouveau rôle",
584
1021
  fieldId: "ID",
@@ -627,6 +1064,8 @@ const frMessages = {
627
1064
  gen: "Générer",
628
1065
  play: "▶ Lire",
629
1066
  stop: "■ Arrêter",
1067
+ playPresentation: "Lire la présentation",
1068
+ regenerateMovie: "Régénérer la vidéo",
630
1069
  errPrefix: "⚠ Erreur",
631
1070
  noBeats: "Aucun beat trouvé dans le script",
632
1071
  editSource: "Modifier la source du script",
@@ -663,6 +1102,11 @@ const frMessages = {
663
1102
  copyLabel: "Copier",
664
1103
  copiedLabel: "Copié !",
665
1104
  cancel: "Annuler",
1105
+ seededByPlugin: "depuis {pkg}",
1106
+ seededByPluginTooltip: "Ce message a été généré par le plugin {pkg}, et non envoyé par vous.",
1107
+ },
1108
+ pluginSkill: {
1109
+ noDescription: "(aucune description)",
666
1110
  },
667
1111
  pluginSpreadsheet: {
668
1112
  previewUntitled: "Tableur",
@@ -690,6 +1134,11 @@ const frMessages = {
690
1134
  },
691
1135
  suggestionsPanel: {
692
1136
  suggestions: "Suggestions",
1137
+ skills: "Compétences",
1138
+ tooltip: "Suggestions et compétences",
1139
+ emptySuggestions: "Aucune suggestion.",
1140
+ emptySkills: "Aucune compétence installée.",
1141
+ skillsError: "Échec du chargement des compétences : {error}",
693
1142
  sendEditHint: "cliquez pour envoyer · shift+clic pour modifier",
694
1143
  },
695
1144
  settingsToolsTab: {