Commit graph

450 commits

Author SHA1 Message Date
be951a22ac feat(acadenice): add inline comments threads for R3.8 (30 tests, Patch 016)
Page comments: REST resolve/unresolve facade over native comments table
(PageCommentResolveService + CollaborationGateway yjs mark sync).
Row comments: new acadenice_row_comment table + full CRUD + resolve
(RowCommentService, RowCommentsController) + React panel in RowDetailModal.
4 new permissions: comments:read/write/resolve/moderate (30 total).
i18n FR+EN. R3 ENTIEREMENT TERMINE.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 02:47:15 +02:00
7d076aa86f feat(acadenice): add mentions notifications system for R3.7 (45 tests, Patch 015)
Bridges native Docmost mention notification pipeline (already active for
collab path) to the REST API path via NotificationEmitterService.  Adds
AcadeniceNotificationsModule with mention detector, notification facade API,
preferences endpoint, /notifications full page, /settings/notifications
preferences page, and bell count polling (30s).  No new DB migration —
native notifications table handles page.user_mention.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 02:29:01 +02:00
614533f228 feat(acadenice): add page templates system for R3.6 (65 tests, Patch 014)
- DB migration: acadenice_template table (JSONB content, is_built_in, is_workspace_default, usage_count)
- 3 new permissions: templates:read|create|manage — catalogue goes to 26
- NestJS AcadeniceTemplatesModule: TemplateService (CRUD + instantiate + setDefault), TemplateSeedService (5 built-ins), TemplatesController (7 endpoints)
- Built-in seed: Meeting Note, Project Brief, Daily Standup, Weekly Review, Empty Page — clone-then-edit pattern
- Frontend: templates-admin gallery (TemplatesPage /settings/templates, TemplateGallery, TemplateCard, TemplateForm)
- Frontend: TemplatePickerModal — opened via "New page from template" sidebar dropdown + /template slash command (custom DOM event)
- i18n: 39 keys FR + EN
- Tests: 40 backend (22 service + 18 controller) + 25 frontend (9 client + 9 page + 7 card) = 65 tests

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 02:12:58 +02:00
5f7271da19 feat(acadenice): add graph endpoint for R3.5.1
GET /api/acadenice/graph returns { nodes, edges, meta } from acadenice_backlink.
BFS depth-limited traversal, Redis cache TTL 60s, permission-aware SQL aggregation,
truncation at 1000 nodes. 35 tests (21 service + 14 controller). Patch 012.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 01:27:23 +02:00
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
4d8bd250be feat(rbac): R2.3a endpoint /permissions/me + frontend hook propre 2026-05-07 22:58:22 +02:00
bcd861126f feat(rbac): R2.1 backend RBAC dynamique multi-roles avec catalogue + 5 roles seed + JWT enrichi 2026-05-07 22:26:21 +02:00
06c46f7b9b fix(oidc): defaut OIDC_SCOPES align Authentik (sans 'groups')
Authentik n'expose pas un scope 'groups' standard — demander ce scope
inconnu peut faire echouer l'authorize selon la config provider. Les
groups arrivent dans le claim 'groups' du scope 'profile' par defaut.

Defaut passe de 'openid email profile groups' vers 'openid email profile'.
Update env.example + ACADENICE_PATCHES.md doc associee.
2026-05-07 21:28:40 +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
2b63137217 mail 2026-05-07 18:13:24 +01:00
Philip Okugbe
73dc62bca3
update react-email (#2149) 2026-05-04 22:26:53 +01:00
Sarthak Chaturvedi
fe18f22dc6
fix: prevent code block deletion when adding inline comments in read mode (#2146) 2026-05-04 21:14:21 +01:00
Philipinho
fcef0c6b96 fix: S3 2026-05-04 20:57:35 +01:00
Philipinho
b74ca00bfd sync 2026-05-01 14:57:32 +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
Philipinho
a0aea43e25 feat(saml): allow disabling RequestedAuthnContext via env var
Adds SAML_DISABLE_REQUESTED_AUTHN_CONTEXT env var, passed through
    to the SAML strategy's disableRequestedAuthnContext option.
    Defaults to existing behavior (element sent). Set to true to omit
    the element when the IdP authenticates the user with a method that
    does not match (e.g. MFA, FIDO, passwordless), which would
    otherwise cause AADSTS75011 with Microsoft Entra ID.
2026-05-01 11:47:03 +01:00
Philip Okugbe
09c69d7a0f
feat: properly preserve table width (#2143) 2026-05-01 00:49:31 +01:00
Philipinho
fe44dc92a9 sync 2026-04-27 15:51:23 +01:00
Philipinho
8e15b22d8c package updates 2026-04-27 15:22:02 +01:00
Philipinho
ec83fc82d5 fix: refactor sanitize 2026-04-27 15:16:26 +01:00
Philipinho
a573acedd0 fix: local storage, and package overrides 2026-04-22 14:13:25 +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
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
Philipinho
e02661974e sync 2026-04-13 00:13:18 +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
e1bbceb9a6 fix: logs 2026-04-07 10:10:41 +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
Philipinho
147d028036 v0.71.0 2026-03-31 20:42:37 +01:00
Philipinho
992691e6e0 fix module import 2026-03-31 20:41:09 +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
Philipinho
af8b0ddf3a sync 2026-03-31 16:05:09 +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
c180d0e487
feat: ratelimits (#2073)
* feat: rate limits

* ip
2026-03-30 15:38:44 +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
cbd0dd4a0b
feat: indexes (#2071) 2026-03-29 20:29:12 +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
Philipinho
ccb35517bb sync 2026-03-28 20:29:31 +00:00
Philip Okugbe
3829b6cbef
feat(ee): viewer comments (#2060) 2026-03-28 19:32:52 +00:00
Philip Okugbe
7981ef462e
feat(editor): audio and PDF nodes (#2064)
* use local resizable

* feat: aduio

* support audio imports

* feat: use confluence real file names

* cleanup

* error handling

* hide notice

* add audio

* fix pulse

* Fix import and export

* unify pulse

* hide in readonly mode

* keywords

* keyword

* translations

* better sort

* feat: PDF embed

* cleanup

* remove audio menu

* open active

* hide focus on readonly mode

* increase iframe default dimension
2026-03-28 17:33:29 +00:00
Philipinho
a3559b7c33 sync 2026-03-26 20:01:02 +00:00
Philip Okugbe
803f1f0b81
feat: user session management (#2056)
* user session management

* WIP

* cleanup

* license

* cleanup

* don't cache index

* rename current device property

* fix
2026-03-26 20:00:04 +00:00