Commit Graph

9388 Commits

Author SHA1 Message Date
Tom Moor 568b4ac074 v1.7.0 v1.7.0 2026-04-24 20:19:52 +00:00
Tom Moor e59d7ee973 fix: Escape key should clear search highlight when editor does not have focus (#12158)
* fix: Escape key should clear search highlight when editor does not have focus

* PR feedback, CSS guard
2026-04-24 14:36:09 -04:00
Tom Moor f3f97cc3ea feat: Add hex swatch previews (#12150)
* feat: Add hex previews, closes #860

* PR feedback
2026-04-24 04:29:13 -04:00
Tom Moor 4c4649346b feat: Allow geo:, maps:, and magnet: link protocols (#12149)
* feat: Allow geo:, maps:, and magnet: link protocols

* Case-insensitive scheme matching, fix test grammar
2026-04-24 04:10:38 -04:00
Hemachandar 22538e7392 fix: Scrollbar flash in new collection modal (#12144)
* fix: Scrollbar flash in new collection modal

* reset animating on close
2026-04-24 13:23:40 +05:30
Tom Moor 1b0a5fb067 fix: TOC auto-closes, closes #12140 (#12143) 2026-04-23 05:02:55 -04:00
Tom Moor eefa8d4222 Add year headings to compare version select (#12138)
* Add year headings to compare version select

* Address review feedback on heading options

Use stable keys for heading options and set explicit displayName.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 19:04:35 -04:00
dependabot[bot] 5b2283386d chore(deps): bump i18next-fs-backend from 2.6.3 to 2.6.4 (#12136)
Bumps [i18next-fs-backend](https://github.com/i18next/i18next-fs-backend) from 2.6.3 to 2.6.4.
- [Changelog](https://github.com/i18next/i18next-fs-backend/blob/master/CHANGELOG.md)
- [Commits](https://github.com/i18next/i18next-fs-backend/compare/v2.6.3...v2.6.4)

---
updated-dependencies:
- dependency-name: i18next-fs-backend
  dependency-version: 2.6.4
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 14:07:49 -04:00
Tom Moor ccbc9b75fc fix: Null reference (#12135)
* fix: Null reference

* fix: Scope image click querySelector to editor view

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-22 13:07:12 -04:00
Tom Moor 05da80d318 fix: Drag active links with children (#12133) 2026-04-22 13:07:08 -04:00
dependabot[bot] 26bc3fb1b8 chore(deps): bump @tanstack/react-virtual from 3.13.23 to 3.13.24 (#12128)
Bumps [@tanstack/react-virtual](https://github.com/TanStack/virtual/tree/HEAD/packages/react-virtual) from 3.13.23 to 3.13.24.
- [Release notes](https://github.com/TanStack/virtual/releases)
- [Changelog](https://github.com/TanStack/virtual/blob/main/packages/react-virtual/CHANGELOG.md)
- [Commits](https://github.com/TanStack/virtual/commits/@tanstack/react-virtual@3.13.24/packages/react-virtual)

---
updated-dependencies:
- dependency-name: "@tanstack/react-virtual"
  dependency-version: 3.13.24
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-22 04:51:10 -04:00
Tom Moor bc982cb516 fix: Sentry for handled errors in MCP (#12130)
* fix: Sentry for handled errors in MCP

* refactor: Pass error object to Logger.warn in MCP transport handler
2026-04-22 04:50:57 -04:00
Tom Moor 733355f514 fix: Ignore Outlook SafeLink crawler errors in Sentry (#12131) 2026-04-21 19:34:49 -04:00
Tom Moor d55c9ccc1f fix: Reduce noise from XHR upload network errors (#12132)
Network-level upload failures (xhr.status === 0) now log as warnings
with extra context instead of unhelpful "Error: 0" reports in Sentry.
2026-04-21 19:34:39 -04:00
Tom Moor 1649b46778 fix: Incorrect nesting in publish dialog (#12122)
* fix: Incorrect nesting in publish dialog

* fix: Incorrect expanded disclosure background

* PR feedback
2026-04-20 19:34:25 -04:00
Tom Moor 276ae71a91 Various fixes (#12121) 2026-04-20 19:34:16 -04:00
dependabot[bot] 4e07cf75bf chore(deps): bump the aws group with 5 updates (#12124)
Bumps the aws group with 5 updates:

| Package | From | To |
| --- | --- | --- |
| [@aws-sdk/client-s3](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/clients/client-s3) | `3.990.0` | `3.1032.0` |
| [@aws-sdk/lib-storage](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/lib/lib-storage) | `3.990.0` | `3.1032.0` |
| [@aws-sdk/s3-presigned-post](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages/s3-presigned-post) | `3.990.0` | `3.1032.0` |
| [@aws-sdk/s3-request-presigner](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages/s3-request-presigner) | `3.990.0` | `3.1032.0` |
| [@aws-sdk/signature-v4-crt](https://github.com/aws/aws-sdk-js-v3/tree/HEAD/packages/signature-v4-crt) | `3.990.0` | `3.1032.0` |


Updates `@aws-sdk/client-s3` from 3.990.0 to 3.1032.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/clients/client-s3/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1032.0/clients/client-s3)

Updates `@aws-sdk/lib-storage` from 3.990.0 to 3.1032.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/lib/lib-storage/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1032.0/lib/lib-storage)

Updates `@aws-sdk/s3-presigned-post` from 3.990.0 to 3.1032.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages/s3-presigned-post/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1032.0/packages/s3-presigned-post)

Updates `@aws-sdk/s3-request-presigner` from 3.990.0 to 3.1032.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages/s3-request-presigner/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1032.0/packages/s3-request-presigner)

Updates `@aws-sdk/signature-v4-crt` from 3.990.0 to 3.1032.0
- [Release notes](https://github.com/aws/aws-sdk-js-v3/releases)
- [Changelog](https://github.com/aws/aws-sdk-js-v3/blob/main/packages/signature-v4-crt/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-js-v3/commits/v3.1032.0/packages/signature-v4-crt)

---
updated-dependencies:
- dependency-name: "@aws-sdk/client-s3"
  dependency-version: 3.1032.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws
- dependency-name: "@aws-sdk/lib-storage"
  dependency-version: 3.1032.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws
- dependency-name: "@aws-sdk/s3-presigned-post"
  dependency-version: 3.1032.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws
- dependency-name: "@aws-sdk/s3-request-presigner"
  dependency-version: 3.1032.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws
- dependency-name: "@aws-sdk/signature-v4-crt"
  dependency-version: 3.1032.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: aws
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 19:34:05 -04:00
dependabot[bot] a422c537ec chore(deps): bump @simplewebauthn/browser from 13.2.2 to 13.3.0 (#12125)
Bumps [@simplewebauthn/browser](https://github.com/MasterKale/SimpleWebAuthn/tree/HEAD/packages/browser) from 13.2.2 to 13.3.0.
- [Release notes](https://github.com/MasterKale/SimpleWebAuthn/releases)
- [Changelog](https://github.com/MasterKale/SimpleWebAuthn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/MasterKale/SimpleWebAuthn/commits/v13.3.0/packages/browser)

---
updated-dependencies:
- dependency-name: "@simplewebauthn/browser"
  dependency-version: 13.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-20 19:33:47 -04:00
Tom Moor 1b91a295e1 fix: Use verified JWT for rate limiting (#12114)
* fix: Use verified JWT for rate limiting

* PR feedback

* Prefer guards
2026-04-20 06:19:39 -04:00
github-actions[bot] 06d5969099 fix: Update Node.js to 24.15.0 (#12120)
Co-authored-by: tommoor <380914+tommoor@users.noreply.github.com>
2026-04-20 06:19:11 -04:00
Tom Moor 321b232f17 Move "Webhook" settings to table (#12119)
* Move 'Webhook' settings to table

* Add tests
2026-04-19 19:27:32 -04:00
Tom Moor 69e8aac4f1 Move "Api Keys" listing to filterable table (#12117)
* Move 'Api Keys' listing to filterable table

* Add context menu
Allow copying new keys
2026-04-19 18:12:32 -04:00
Tom Moor 7b182f9038 More styling improvements to highlight control 2026-04-19 18:07:08 -04:00
Tom Moor c52c96dc96 perf: Remove unneccesary location subscription (#12116) 2026-04-19 16:18:52 -04:00
Tom Moor ce409c0a8a fix: Return to empty search on 'Search' sidebar click (#12115)
* fix: Return to empty search on 'Search' sidebar click

* PR feedback
2026-04-19 15:53:19 -04:00
Tom Moor 666b3879b3 feat: Document history design (#12112)
* refactor

* refactor

* design
2026-04-19 09:37:09 -04:00
Tom Moor 46b040a9f4 fix: Validate move operation path prefix per RFC 6902 (#11835)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 21:08:39 -04:00
Tom Moor 36f6cb9e01 fix: Do not clear local database on passive logout (#12109) 2026-04-18 20:26:32 -04:00
Robert Hawkins 182f7f38f6 feat: Allow comparing any two revisions in document history (#12001)
* feat: Allow comparing any two revisions in document history

* Copilot review feedback
Move MobX store lookup out of useMemo so it stays reactive, fix i18n key spacing to match existing translations, and map synthetic latest revision ID to "latest" in the dropdown so DataLoader can fetch it.

* fix: Force editor remount when comparison target changes

* fix: Don't show wrong diff while compareTo revision is loading
2026-04-18 15:13:57 -04:00
Tom Moor 49d5052a51 feat: RTL layout (#12107)
* First pass

* Remove prop drilling, fix comment layout

* Revert dev:watch to use dev:backend

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 15:12:57 -04:00
Tom Moor e6cfc45fb4 chore: Upgrade xmldom (#12108) 2026-04-18 19:04:17 +00:00
Tom Moor b90659d8c1 fix: Remove user id from toggle storage key (#12105)
* fix: Remove user id from toggle storage key

* refactor: Namespace toggle fold storage key

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 19:01:33 +00:00
Tom Moor c02ac30eb0 refactor: Convert Document scene to functional component (#12033)
* refactor: Convert Document scene from class to functional component

Replace the @observer class component with a functional component using
hooks (useStores, useTranslation, useHistory, useLocation) instead of
HOC wrappers (withStores, withTranslation, withRouter). All @observable
state converted to useState with companion refs for stale closure
avoidance in debounced callbacks and unmount cleanup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* refactor: Extract save/dirty tracking into useDocumentSave hook

Moves all save, autosave, dirty-tracking, template insertion, and
unmount cleanup logic from DocumentScene into a dedicated hook. This
reduces the component from ~790 to ~500 lines and isolates re-renders
from save state changes (isSaving, isPublishing, etc.) to a smaller
surface.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: Add JSDoc to DocumentScene Props and function

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* unused

* Remove withStores

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-18 11:33:59 -04:00
Tom Moor 8535f2c092 chore: Refactor WebsocketProvider to functional component (#12034)
* chore: Refactor WebsocketProvider to functional component

* refactor
2026-04-18 11:05:30 -04:00
Tom Moor 267835ce6f Add missing controls to starred documents (#12100)
* Add missing controls to starred documents

* refactor

* refactor

* fix: Enter does not submit

* fix: Reordering child docs in starred section

* refactor: Rename editTitle to labelText, remove non-null assertion

* Refactor draggable for consistency

* refactor

* Remove star icon

* fix: Allow drag and drop importing into starred

* tsc
2026-04-18 11:04:05 -04:00
Tom Moor 60562f4f6a fix: Handle GitLab Flavored Markdown (#11930)
* fix: Handle GitLab Flavored Markdown

* PR feedback

* Harden HTML comment stripping against overlapping patterns

Loop the replacement until stable to avoid CodeQL's incomplete
multi-character sanitization alert — a single pass could leave
`<!--` residue for inputs like `<!<!-- x -->-- -->`.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 10:53:50 -04:00
Tom Moor 600108bc43 feat: Document insight rollups (#12086)
* First pass

* Remove popularity changes

* Address review feedback

- Compute retention cutoff in UTC from the database rather than worker-local TZ
- Push partition predicate into rollup source CTEs to avoid full-table scans per partition

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

* Anchor insight rollups to UTC and include today

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-18 08:11:15 -04:00
Tom Moor 6d7d8b056c fix: trimFilenameAndExt should not be passed full path (#12101) 2026-04-18 08:10:30 -04:00
Tom Moor 5cb4b71652 feat: Improve MCP ability to read tree hierarchy (#12102)
* feat: Improve MCP ability to read tree heirarchy

* PR feedback
2026-04-18 08:09:55 -04:00
Tom Moor 4dd24b59ad fix: Validate that shares contain only a documentId or collectionId (#12098)
* fix: Validate that shares contain only a documentId or collectionId

* Restore test
2026-04-18 03:29:20 +00:00
Tom Moor 04debcb607 fix: Disallow invalid scopes (#12099) 2026-04-18 03:26:08 +00:00
Tom Moor 505082b196 fix: Correctly validate uploaded file size using "local" storage option (#12095)
* fix: Correctly validate uploaded file size using local storage option

* fix: Normalize attachment size from BIGINT before comparison

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 23:25:46 -04:00
Tom Moor 347bdb10d4 fix: Ensure OTP is bound to workspace (#12096)
* fix: Ensure OTP is bound to teamId

* fix: Address review feedback on OTP tenant scoping

- Trim whitespace in VerificationCode Redis keys to match DB lookup
  normalization.
- Redirect with invalid-code (rather than leaking a backend error)
  when no user exists for the email in the resolved team.
- Correct retrieve() JSDoc to state undefined instead of null.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 23:22:58 -04:00
Tom Moor e49e3136b6 Increase MCP guidance limit (#12097)
* Increase MCP guidance limit
Add new controls for Input

* PR feedback
2026-04-17 23:22:50 -04:00
Tom Moor 60903fef84 Allow passing CSP nonce to exported html (#12088)
* Allow passing CSP nonce to exported html

* test: Add nonce regression test, drop options from tags

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-17 09:00:34 -04:00
Tom Moor cbb53285a7 fix: Flaky test (#12087)
* fix: Flaky test

* fix: Validation values incorrect
2026-04-16 21:40:08 -04:00
Tom Moor 5bbc240628 feat: Add diffs to share subscription notifications (#12084)
* Add diffs to share subscription notifications

* Update cache key

* fix
2026-04-16 21:17:56 -04:00
Tom Moor 400c0aa262 fix: Flaky test (#12069)
* fix: Flaky test

* fix: Restrict /auth/redirect to JWT authentication only

Non-JWT tokens (API keys, OAuth) could reach the redirect endpoint
and produce a confusing "Unable to decode token" error. Restrict the
auth middleware to APP type so they are rejected before the handler.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-16 20:35:26 -04:00
Tom Moor 5e1a5a208f fix: Flaky test (#12085) 2026-04-16 20:35:15 -04:00
Tom Moor 8e371ea263 Add argument to suppressEmail when inviting users through API (#12082)
* Add argument to suppressEmails wehn inviting users

* Skip InviteSent flag when suppressEmail is set

Keeps the resend-invite counter accurate so users.resendInvite can
still deliver the first email when the initial invite was silent.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-16 20:26:12 -04:00