4e2af88144
feat(acadenice): add custom slash commands system for R3.3
...
Workspace admins can declare dynamic /keyword commands via settings UI
without recompile. Five action types: insert-template, insert-table,
embed-url, run-webhook, insert-snippet. Webhook security: HTTPS-only,
ACADENICE_WEBHOOK_ALLOWLIST allowlist, 10s timeout, no redirects, 1MB cap.
New permission slash_commands:manage added to catalogue (23 perms) and
seeded to Owner + Admin roles.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 01:06:11 +02:00
2fc310a2f2
feat(acadenice): add bidirectional backlinks + wikilinks for R3.2
...
- Migration: acadenice_backlink table (source/target/link_type/excerpt/workspace)
with 3 indexes and UNIQUE(source,target,type) constraint. Up+down.
- Backend module AcadeniceBacklinksModule:
BacklinkParserService: walks Tiptap JSON, extracts wikilinks/mentions/databaseView.
BacklinkIndexerService: idempotent delete-then-insert per page save.
BacklinkService: permission-aware query (space_members / public visibility).
BacklinksController: GET /api/acadenice/pages/:pageId/backlinks (JWT auth).
PageContentUpdatedListener: OnEvent handler for collab saves -> async reindex.
Tests: 16 Vitest specs (parser/indexer/service/controller).
- PersistenceExtension patch: emits ACADENICE_PAGE_CONTENT_UPDATED_EVENT after
each collab onStoreDocument (fire-and-forget, no impact on save path).
- CoreModule patch: imports AcadeniceBacklinksModule.
- Frontend WikilinkExtension: Tiptap inline atom node, [[Title]] / [[Title|alias]],
Suggestion popup (reuses mention pattern + floating-ui), ReactNodeView with
broken-link state, insertWikilink command.
Tests: 9 Vitest specs (schema/attrs/commands/HTML parse+render).
- LinkedReferencesPanel: React Query useBacklinks(pageId, staleTime=30s),
accordion grouped by link_type, excerpt preview, navigate to source page.
Tests: 7 Vitest specs (loading/error/empty/render/navigate/groups).
- extensions.ts patch: + WikilinkExtension in mainExtensions[].
- full-editor.tsx patch: + LinkedReferencesPanel below editor (Divider + panel).
- i18n: 11 keys added in en-US and fr-FR (backlinks.* + wikilink.*).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 00:51:02 +02:00
ba8d8678a0
test(e2e): add data-testid attributes for Playwright e2e (Patch 008 R3.1.e)
...
Minimal testid additions to 4 renderer files so Playwright can target
stable selectors: table-renderer, cell-{rowId}-{fieldName}, kanban-board,
kanban-column-{label}, kanban-card-{rowId}, calendar-renderer,
inline-editor-input, inline-editor-readonly.
Also adds Dockerfile.e2e for the client build used in docker-compose.e2e.yml.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 00:37:39 +02:00
f3fae2ac78
feat(client): add kanban + calendar renderers + inline edit for R3.1.d
...
- KanbanRenderer: @dnd-kit drag-drop, group by single_select field,
optimistic update + rollback, empty column placeholder, read-only mode
- CalendarRenderer: @fullcalendar month/week/day toggle, eventDrop ->
PATCH date field, event click -> RowDetailModal, stub deps noted
- InlineEditor: polymorphic (text/number/date/select/multi-select),
save on blur/Enter, cancel on Escape, permission denied read-only
- RowDetailModal: simple field detail view opened from calendar events
- useUpdateRow: generic PATCH with React Query v5 optimistic+rollback
- usePermissions: reads acadenice_permissions from window global or cookie
- patchRow helper added to bridge-client.ts
- DatabaseViewComponent: dispatches kanban/calendar to real renderers
- TableRenderer: integrates InlineEditor on double-click cells
- i18n: +12 keys (kanban.*, calendar.*, edit.*, row_detail.*) in en-US + fr-FR
- 5 new test suites: kanban, calendar, inline-editor, use-update-row, use-permissions
- Updated database-view-component.test.tsx for R3.1.d dispatch
Deps to install: @dnd-kit/core@^6 @dnd-kit/sortable@^8 @dnd-kit/utilities@^3
@fullcalendar/react@^6 @fullcalendar/daygrid@^6
@fullcalendar/timegrid@^6 @fullcalendar/interaction@^6
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-08 00:24:12 +02:00
71c2abad8a
feat(client): add database-view Tiptap extension for R3.1.c
...
- Tiptap Node extension (database-view) with attrs tableId/viewId/viewType/bridgeUrl
- NodeViewWrapper dispatches on viewType: grid/table -> TableRenderer, other -> PlaceholderRenderer
- TableRenderer (HTML table, TanStack Table v8 migration-ready - dep not yet installed)
- InsertDatabaseModal (Mantine, 2-step: table -> view selection)
- useDatabaseRealtimeUpdates SSE hook (EventSource + exponential backoff + React Query invalidation)
- bridge-client.ts (axios wrapper, per-origin singleton, cookie Bearer passthrough)
- Slash command /database registered in menu-items CommandGroups
- DatabaseViewExtension wired in mainExtensions array
- i18n: 22 keys added in en-US and fr-FR
- 41 Vitest tests across 5 suites (extension schema, component dispatch, renderer states, modal steps, SSE hook)
Upstream patches: extensions.ts (+2 lines), menu-items.ts (+4 lines), 2 translation files
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 00:07:33 +02:00
4d8bd250be
feat(rbac): R2.3a endpoint /permissions/me + frontend hook propre
2026-05-07 22:58:22 +02:00
022add9acc
feat(rbac): R2.2 frontend pages settings RBAC dynamique avec PermissionMatrix
...
- Pages /settings/roles (liste + filtres + create), /settings/roles/:id (matrix
permissions + danger zone), /settings/users/:userId/roles (multi-select +
preview union)
- PermissionMatrix : groupes Mantine cards, wildcard <group>:* qui grise les
individuals, admin:* qui court-circuite tout, indeterminate states, tooltips
avec descriptions du catalogue
- React Query hooks pour CRUD roles + assignations user-roles, notifications
Mantine sur succes / erreurs avec extraction du message backend
- Hook useAcadenicePermissions : best-effort lecture du claim JWT R2.1, fallback
sur role natif Docmost (defense en profondeur — backend reste source de verite)
- i18n complet FR + EN (~80 cles)
- Vitest + Testing Library introduits dans apps/client (devDeps + config + setup)
- 22 tests couvrant matrix wildcards, list filters, detail save/delete flow,
multi-select assignments
- Patches upstream minimaux : 3 routes ajoutees au router, 1 entree sidebar
(visible si canManageRoles)
- Documente comme Patch 004 dans ACADENICE_PATCHES.md
2026-05-07 22:42:39 +02:00
07d0b66fda
feat(auth): Bloc 4b — OIDC client Authentik via openid-client (active par OIDC_ENABLED env)
...
Ajoute un flow d'authentification OIDC via Authentik (ou tout IdP conforme),
desactive par defaut. Le code est dormant tant que OIDC_ENABLED=true n'est
pas pose.
Server :
- apps/server/src/core/auth/oidc/oidc.module.ts (nouveau)
- apps/server/src/core/auth/oidc/oidc.service.ts (discovery + PKCE + callback + JIT provisioning)
- apps/server/src/core/auth/oidc/oidc.controller.ts (routes /api/auth/oidc/{login,callback,status})
- apps/server/src/core/auth/oidc/oidc.service.spec.ts (8 tests Jest, openid-client mocke)
- apps/server/src/integrations/environment/environment.service.ts : +9 getters OIDC
- apps/server/src/core/core.module.ts : +OidcModule dans imports
Client :
- apps/client/src/features/auth/queries/oidc-query.ts (hook useOidcStatus)
- apps/client/src/features/auth/components/oidc-login-button.tsx (bouton conditionnel)
- apps/client/src/features/auth/components/login-form.tsx : +OidcLoginButton
Securite :
- PKCE S256 obligatoire
- State CSRF en cookie httpOnly signe (5 min)
- Verification JWKS auto via openid-client v6
- Refetch userInfo apres echange du code
- JIT provisioning strict par defaut (OIDC_AUTO_PROVISION=false)
Lib : openid-client v6.8.2 (deja en deps), import lazy.
Documente dans ACADENICE_PATCHES.md (Patch 002) et .env.example.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-07 21:26:53 +02:00
efa26440a0
feat(rebrand): DocAdenice — patch initial sur le fork Acadenice
...
- Renomme app name visible 'Docmost' -> 'DocAdenice' (browser title, header, emails)
- Conserve identifiants techniques (package name, classes, imports, service docker)
- Ajoute ACADENICE_PATCHES.md avec changelog des patches Acadenice
2026-05-07 21:10:51 +02:00
Philipinho
3227bc6059
fix: a11y
2026-05-04 23:04:26 +01:00
Philip Okugbe
dbe6c2d6ba
feat: A11y fixes ( #2148 )
2026-05-04 21:21:37 +01:00
Philip Okugbe
c247d4c1e3
feat(ee): PDF import ( #2142 )
...
* feat: replace pdfjs-dist with firecrawl-pdf-inspector
* use modified firecrawl-pdf-inspector
* feat: pdf import
* increase single file upload size limit
* use npm package
* sync
* update package
2026-05-01 14:56:39 +01:00
Philip Okugbe
641ce142df
feat(ee): SCIM ( #1347 )
...
* SCIM - init (EE)
* accept db transaction
* sync
* Content parser support for scim+json
* patch scimmy
* sync
* return early if userIds is empty
* sync
* SCIM db table
* fixes
* scim tokens
* backfill
* feat(audit): add scim token events
* rename scim migration
* fix
* fix translation
* cleanup
2026-05-01 14:53:30 +01:00
Sarthak Chaturvedi
1d2486455f
fix: prevent browser tab fallback in editor ( #2123 )
2026-05-01 13:58:51 +01:00
Philip Okugbe
09c69d7a0f
feat: properly preserve table width ( #2143 )
2026-05-01 00:49:31 +01:00
Sarthak Chaturvedi
9943e104a5
fix(i18n): Correct German column count label rendering ( #2131 )
2026-05-01 00:37:59 +01:00
Peter Tripp
b16f1e5a55
fix: ctrl-k behavior on macOS ( #2052 )
...
* Improve cmd-k / ctrl-k behavior
Use cmd-k on macOS/iOS for search and keep ctrl-k everywhere else.
Fixes a bug where ctrl-k on macOS, which cuts to the end of the line,
was also triggering the search prompt.
* comment submit: cmd-enter (mac) / ctrl-enter (win/linux)
2026-05-01 00:36:40 +01:00
Philip Okugbe
24be90b95f
fix: duplicate PDF uploads ( #2139 )
2026-04-29 10:01:47 +01:00
Olivier Lambert
3ecf27c6b0
fix(page-permission): make people-with-access list scroll past 4 entries ( #2137 )
...
The "People with access" list in the page share modal used
<ScrollArea mah={250}>, which caps the container height but does not
make the inner viewport scroll (no fixed height is given to the
viewport). Items beyond ~4 entries were rendered correctly but clipped
out of view.
Switches to <ScrollArea.Autosize mah={400}>, which is Mantine's
dedicated primitive for "grow with content up to a max, then scroll".
Closes #2135
2026-04-29 09:36:38 +01:00
Philipinho
980521f957
v0.80.1
2026-04-27 16:06:32 +01:00
Philipinho
15b8908b1a
update postcss
2026-04-27 15:23:47 +01:00
Philipinho
8e15b22d8c
package updates
2026-04-27 15:22:02 +01:00
Philipinho
a573acedd0
fix: local storage, and package overrides
2026-04-22 14:13:25 +01:00
Philipinho
81ae7a17a6
confirm dialog
2026-04-14 17:56:36 +01:00
Philipinho
271f855761
v0.80.0
2026-04-14 17:08:44 +01:00
Philipinho
3e6d915227
sync
2026-04-14 16:34:44 +01:00
Philip Okugbe
a6a7e4370a
feat(ee): PDF export api ( #2112 )
...
* feat(ee): server side PDF export
* feat: pdf export queue
* sync
* sync
2026-04-14 16:26:54 +01:00
Philip Okugbe
cc00e77dfb
fix: space overview favorites ( #2110 )
2026-04-14 02:58:24 +01:00
Philipinho
66c70c0e76
fix print
2026-04-14 00:40:17 +01:00
Philip Okugbe
0e8b3bbfb3
New Crowdin updates ( #2109 )
...
* New translations translation.json (French)
* New translations translation.json (Spanish)
* New translations translation.json (German)
* New translations translation.json (Italian)
* New translations translation.json (Japanese)
* New translations translation.json (Korean)
* New translations translation.json (Dutch)
* New translations translation.json (Russian)
* New translations translation.json (Ukrainian)
* New translations translation.json (Chinese Simplified)
* New translations translation.json (Portuguese, Brazilian)
2026-04-14 00:05:51 +01:00
Philip Okugbe
a3a9f35005
fix home flickers ( #2108 )
2026-04-13 23:54:03 +01:00
Philip Okugbe
4056bd0104
feat: enhancements ( #2107 )
...
* refactor
* fix
* update packages
2026-04-13 23:34:40 +01:00
Philip Okugbe
bd68e47e03
feat(ee): page verification workflow ( #2102 )
...
* feat: page verification workflow
* feat: refactor page-verification
* sync
* fix type
* fix
* fix
* notification icon
* use full word
* accept .license file
* - update templates
- update migration and notification
* fix copy
* update audit labels
* sync
* add space name
2026-04-13 20:20:34 +01:00
Philip Okugbe
1113f17a43
New Crowdin updates ( #2104 )
2026-04-12 22:46:39 +01:00
Philip Okugbe
d42091ccb1
feat: favorites ( #2103 )
...
* feat: favorites and templates(ee)
* rename migrations
* fix sidebar
* cleanup tabs
* fix
* turn off templates
* cleanup
* uuid validation
2026-04-12 22:06:25 +01:00
Philip Okugbe
57efb91bd3
feat(ee): ai chat ( #2098 )
...
* feat: ai chat
* feat: ai chat
* sync
* cleanup
* view space button
2026-04-10 19:23:47 +01:00
Philip Okugbe
da9b43681e
feat: watch space ( #2096 )
2026-04-09 00:37:51 +01:00
Philipinho
4966f9b152
fix(deps): package updates
2026-04-07 10:24:46 +01:00
Philip Okugbe
895c1817ae
feat: bug fixes ( #2084 )
...
* handle enter in inline code
* fix: duplicate comment cache
* track link nodes (backlinks)
* fix en-US translation
* fix internal a-links
* overrides
* 0.71.1
2026-04-05 13:45:36 +01:00
Philip Okugbe
642024ba9d
New Crowdin updates ( #2078 )
2026-03-31 21:14:41 +01:00
Philipinho
147d028036
v0.71.0
2026-03-31 20:42:37 +01:00
Philip Okugbe
9aaa6c731c
feat: add AI_EMBEDDING_SUPPORTS_MRL env var to decouple pgvector dimensions from model API ( #2079 )
...
Some embedding models don't accept a `dimensions` parameter. This adds
an optional env var that controls whether the dimension is sent to the
model API, while always using it for pgvector indexing. Preset models
have this handled automatically; the env var allows explicit override
for custom models.
2026-03-31 19:39:49 +01:00
Philip Okugbe
879aa2c3d8
feat: page update notifications ( #2074 )
...
* feat: watchers notification and email preferences
* fix: email copy
* digests
* clean up
* fix
* clean up
* move backlinks queue-up to history processor
* fix
* fix keys
* feat: group notifications
* filter
* adjust email digest window
2026-03-31 16:03:59 +01:00
Philip Okugbe
a062f7a165
fix: enhance confluence importer ( #2072 )
...
* fix placeholder
* min resize dimensions
* fix media links
* fix
2026-03-30 13:16:40 +01:00
Philip Okugbe
2d6d829581
New translations translation.json (English) ( #2066 )
2026-03-29 16:25:45 +01:00
Philipinho
5cea30cc5c
fix markdown paste
2026-03-29 16:11:21 +01:00
Philipinho
c9cdfa0f17
fix
2026-03-29 02:20:56 +01:00
Philip Okugbe
412962204c
fix: editor fixes ( #2067 )
...
* autojoiner
* fix marked
* return clipboardTextSerializer as markdown
* fix clipboardTextSerializer for single lines
* cleanup two preceeding spaces in ordered lists item
* fix extra paragraph in task list
* don't zip sinple page exports
2026-03-29 02:19:09 +01:00
Olivier Lambert
a42ac3d450
fix: strip trailing whitespace-only paragraphs from pasted content ( #2050 )
2026-03-28 22:26:47 +00:00
Philipinho
642c92f779
fix select
2026-03-28 20:34:44 +00:00