10110 Commits
Author SHA1 Message Date
e1c906a1c2 feat: Fuse powered local content search (#13115)
* wip

* generalize

* refactor

* Extract SearchResultIcon for command bar results

Both search action builders rendered the same document icon inline. Move it
into a shared component alongside the other command bar pieces, forwarding
size so the command bar can continue to size icons via cloneElement.

Also drop the redundant charAt(0).toUpperCase() on the initial, as the Icon
component already normalizes it.

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

* PR feedback
Prevent same doc showing twice in cmd k
Improve result ordering in main app command bar
Refactor to flattenTree

* Upgrade Fuse to 7.5.0, use workers

* fix: Re-register search actions when index is enriched

Include result contexts in the command bar registration key so that
snippets refresh when the same documents are enriched, and only mark a
server search as cached once its results are actually fed to the index.

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-25 13:16:53 -04:00
Tom MoorandGitHub c2fd3ddb5a perf: Removes JSDom usage on main server -> worker (#13128)
* refactor

* fix: Test setup for awaited jobs

* feedback
2026-07-25 12:43:18 -04:00
Tom Moor 5a9fb0024f fix: Immediately stop retrying malformed imports 2026-07-25 12:38:57 -04:00
62a2220a48 fix: preserve diagrams.net source through API markdown round-trip (#13082)
* fix: preserve diagrams.net source through API markdown round-trip

Images with source: "diagrams.net" (draw.io embeds) lost their editability
when updated through the API (documents.create/update with text). The
markdown serializer/deserializer had no slot for the source attribute, so
every round-trip through markdown stripped it, downgrading editable diagrams
to static images.

Encode source as a "source=<value>" token in the markdown title attribute,
which already carries layoutClass and size. The token is extracted on parse
and emitted on serialize, surviving the full API round-trip.

* fix: address image source review feedback

Authored-by: Terminus (AI Assistant) <raisalpwardana+terminus@gmail.com>

* fix: narrow image test node attributes

Authored-by: Terminus (AI Assistant) <raisalpwardana+terminus@gmail.com>

* fix: narrow image test attributes

Authored-by: Terminus (AI Assistant) <raisalpwardana+terminus@gmail.com>

---------

Co-authored-by: Raisal P Wardana <IEatCodeDaily@users.noreply.github.com>
2026-07-25 12:36:07 -04:00
Tom MoorandGitHub 8267f22c31 chore: Remove client boolean guard in redirectOnClient (#13136) 2026-07-25 12:16:28 -04:00
8192bc0514 chore: Audit and move inline actions to definitions (#13133)
* chore: Audit and move inline actions to definitions

* fix: Reuse existing smart-quote translation key in emoji delete dialog

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

* Remove two usages of 'Link copied' translation

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-25 16:13:12 +00:00
Tom MoorandGitHub 60195ae0ee fix: Clear search chip highlight when opening CMD+F (#13135) 2026-07-25 12:05:26 -04:00
Tom MoorandGitHub 64fad39230 Remove dead ImportHelper (#13134) 2026-07-25 11:50:54 -04:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2ed50bfe03 chore(deps): bump postcss from 8.5.15 to 8.5.22 (#13131)
Bumps [postcss](https://github.com/postcss/postcss) from 8.5.15 to 8.5.22.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.5.15...8.5.22)

---
updated-dependencies:
- dependency-name: postcss
  dependency-version: 8.5.22
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-25 11:07:19 -04:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
ed90f25dc6 chore(deps): bump tar from 7.5.20 to 7.5.21 (#13132)
Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.20 to 7.5.21.
- [Release notes](https://github.com/isaacs/node-tar/releases)
- [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md)
- [Commits](https://github.com/isaacs/node-tar/compare/v7.5.20...v7.5.21)

---
updated-dependencies:
- dependency-name: tar
  dependency-version: 7.5.21
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-25 11:07:03 -04:00
Tom MoorandGitHub 08a3b64295 chore: Exhaustive deps warning -> error (#13124)
* chore: Exhaustive deps turned to error

* Refactor useDragResize

* Refactor Lightbox to explicit state machine

* feedback

* ci
2026-07-25 10:43:49 -04:00
Tom MoorandGitHub b9354edb52 fix: Split view browser title (#13130) 2026-07-25 10:36:37 -04:00
Tom MoorandGitHub d4349731b8 chore: Update deprecated CodeQL to v3 (#13129) 2026-07-25 10:32:40 -04:00
2d608d95e7 fix: Temporary directory left behind after S3 storage file handle (#13127)
* fix: Temporary directory left behind after S3 storage file handle

* Remove unused ZipHelper.extract

Use pipeline everywhere instead of manually wiring streams

* fix: Cleanup failure should not mask original error

Removing the temporary directory is best-effort, log the failure and
propagate the underlying error instead.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-25 08:17:04 -04:00
CopilotandGitHub 796adb8b22 Rename split-view route helper to isSplittablePath (#13125) 2026-07-25 07:57:19 -04:00
Tom MoorGitHubCopilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
7fed1597df Apply suggested fix to app/components/EditorAwareHTML5Backend.ts from Copilot Autofix (#13126)
Co-authored-by: Copilot Autofix powered by AI <223894421+github-code-quality[bot]@users.noreply.github.com>
2026-07-25 07:56:23 -04:00
Tom MoorandGitHub d63372694b chore: More lint warnings -> errors (#13122) 2026-07-25 07:56:13 -04:00
Tom MoorandGitHub ce0e80bca4 fix: State mapping must be ProjectionAlias (#13121) 2026-07-25 03:06:48 +00:00
Tom MoorandGitHub 0697b0a972 perf: Remove dd-trace in master process (#13119) 2026-07-24 22:39:48 -04:00
Tom MoorandGitHub 97d0c06381 perf: Over loading of state column (#13118) 2026-07-24 22:39:39 -04:00
0f8a38ecd5 perf: Optimize drag and drop re-rendering (#13114)
* perf: optimize sidebar dragging

* Address copilot review comments

* deslop

* feedback

---------

Co-authored-by: Aron Granberg <aron.granberg@gmail.com>
2026-07-23 22:35:35 -04:00
Tom MoorandGitHub 64132a28d5 fix: Ensure JSDOM’s window is torn down (#13112)
* fix: Ensure JSDOM’s window (and its retained timers/resources) is torn down

* feedback

* catch
2026-07-23 20:36:04 -04:00
Tom MoorandGitHub 87a4a40939 Remove ReactDOM from toDOM server rendering (#13109) 2026-07-23 20:06:27 -04:00
c8d4e8c0e7 perf: Bound MutexLock retries and de-dupe same-key cache misses (#13110)
* perf: Bound MutexLock retries and de-dupe same-key cache misses

MutexLock configured redlock with retryCount: 120, retryDelay: 1000 — a
2-minute retry window for locks with a 4s default TTL. Under cache-miss
storms (e.g. websocket reconnects all missing user.collectionIds) N
contenders piled onto one lock key, retaining ~K²/2 error objects plus
pending timers/promises. Bound retries to ~the lock TTL (retryCount: 15,
retryDelay: 250) and add a per-process in-flight de-dupe in
CacheHelper.getDataOrSet so N same-key misses share one lock acquisition
and callback.

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

* fix: Return falsy cached values instead of treating them as misses

getDataOrSet checked `if (cache)`, so a cached null/false/0/"" was treated
as a miss and re-populated on every read (e.g. Collection.getCachedDocument
Structure caches NavigationNode[] | null via the AfterSave hook). Check for
undefined — the only value getData returns on a genuine miss — so falsy
cached values are returned without an extra lock and DB query.

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

* deslop

* fix: Scope bounded lock retries to cache locks only

The tightened retry window (15×250ms) was set on the shared Redlock
instance, so it also affected long-lived callers — notably the 10-minute
"migrations" lock in checkMigrations, which fatal-exits on acquire failure
and would crash concurrent boots. Restore the generous default on the
shared instance and pass a bounded retry override (MutexLock.cacheRetry
Settings) only from the cache path via a new per-acquire retry option.

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

* fix: Cache falsy callback results in getDataOrSet

populate only cached truthy callback results, so a valid null (e.g. from
Collection.getCachedDocumentStructure) was never stored and every miss
re-ran the lock + DB query. Skip caching only when the result is undefined,
and guard the CacheResult detection against null (typeof null === "object").

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

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 20:00:54 -04:00
Tom MoorandGitHub a232f8c702 fix: Escape characters with special meaning in LIKE statements (#13111)
closes #13102
2026-07-23 19:58:37 -04:00
Tom MoorandGitHub f2c44f8732 fix: Add row lock in documentUpdater (#13108) 2026-07-23 19:52:41 -04:00
Tom MoorandGitHub 77b01f11fc chore: Remove Fix decorator (#13100)
* chore: Remove Fix decorator

* test
2026-07-23 09:10:17 -04:00
Tom MoorandGitHub 9884e0379f perf: Memory usage fixes (#13101)
* fix: Module level cache in headingToSlug

* fix: Remove retained full User and Team model on every ws connection

* feedback
2026-07-23 08:14:35 -04:00
Tom MoorandGitHub 2d91a13647 fix: useKeyDown binding blocks browser defaults (#13098)
* fix: useKeyDown binding blocks browser defaults

* feedback
2026-07-22 21:42:32 -04:00
Tom MoorandGitHub 55fa306838 fix: Spuriously removed edit string (#13097)
closes #13096
2026-07-22 20:23:21 -04:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
7511065bc6 chore(deps): bump hono from 4.12.25 to 4.12.31 (#13091)
Bumps [hono](https://github.com/honojs/hono) from 4.12.25 to 4.12.31.
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](https://github.com/honojs/hono/compare/v4.12.25...v4.12.31)

---
updated-dependencies:
- dependency-name: hono
  dependency-version: 4.12.31
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-22 08:56:33 -04:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
d10d4676e9 chore(deps): bump dompurify from 3.4.11 to 3.4.12 (#13089)
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 3.4.11 to 3.4.12.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/3.4.11...3.4.12)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-version: 3.4.12
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-22 08:56:14 -04:00
Tom MoorandGitHub e6a935d723 fix: Remove Home and Search buttons on logged out 404 page (#13094) 2026-07-22 08:48:35 -04:00
Tom MoorandGitHub 3da21c7caf chore: Dependency audit (#13088) 2026-07-22 08:18:34 -04:00
ZhuoYang Wu(阿离)andGitHub 376f2ea6ae fix(mcp): clarify create_document HTML media handling in tool schema (#13093)
* fix(mcp): clarify create_document HTML media handling in tool schema

* Integrate the prompt into the instructions
2026-07-22 08:18:23 -04:00
Tom MoorandGitHub b1d2fb986f chore: Address 11 lint warnings (#13092) 2026-07-21 23:07:10 -04:00
Tom MoorandGitHub 043d2902b0 chore: Update to tsgolint stable (#13087) 2026-07-21 22:39:40 -04:00
Tom Moor bc898c40c8 fix: Format number for locale on imports listing 2026-07-21 21:13:04 -04:00
Tom MoorandGitHub 71bed28d8e fix: OIDC email update (#13079)
* fix: OIDC email update

* test
2026-07-21 20:49:14 -04:00
Tom MoorandGitHub 19f77b8fa8 fix: OOM on large markdown imports (#13086)
fix: Markdown import does no truncate titles
2026-07-21 20:39:31 -04:00
Tom MoorandGitHub 6599d0b498 fix: documents.add_user event missing teamId (#13084) 2026-07-21 19:41:31 -04:00
Tom MoorandGitHub fa2c498786 Remove user listing for guests (#13083)
closes #13075
2026-07-21 18:46:57 -04:00
Tom MoorandGitHub 6a09e9cf1d fix: Dark border printing docs from dark theme (#13074) 2026-07-20 23:29:26 -04:00
b67442a475 feat: CMD+enter from command menu to open in split view (#13073)
* CMD+enter to open in split view

* Fall back to normal navigation when location state is present

Location state cannot be represented in the split query parameter, so
opening in the secondary pane would silently drop it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 22:28:10 -04:00
Tom Moor ebc4e23dad chore: Tighten split view styling 2026-07-20 22:21:23 -04:00
Tom MoorandGitHub fb25ddc5a5 chore: Dependency audit (#13072) 2026-07-20 20:27:59 -04:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
9fe683e5a2 chore(deps): bump body-parser from 2.2.1 to 2.3.0 (#13071)
Bumps [body-parser](https://github.com/expressjs/body-parser) from 2.2.1 to 2.3.0.
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/v2.2.1...v2.3.0)

---
updated-dependencies:
- dependency-name: body-parser
  dependency-version: 2.3.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-20 20:11:46 -04:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
97fa7532ad chore(deps): bump js-yaml from 4.2.0 to 4.3.0 (#13065)
Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.2.0 to 4.3.0.
- [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/js-yaml/compare/4.2.0...4.3.0)

---
updated-dependencies:
- dependency-name: js-yaml
  dependency-version: 4.3.0
  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-07-20 20:01:33 -04:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
9472da5837 chore(deps): bump shell-quote from 1.8.4 to 1.10.0 (#13066)
Bumps [shell-quote](https://github.com/ljharb/shell-quote) from 1.8.4 to 1.10.0.
- [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/shell-quote/compare/v1.8.4...v1.10.0)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-version: 1.10.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-20 20:01:23 -04:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
faabde91e9 chore(deps): bump brace-expansion from 1.1.14 to 1.1.16 (#13067)
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.14 to 1.1.16.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.14...v1.1.16)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 1.1.16
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-20 20:01:12 -04:00