Search raw Markdown in source mode with literal character matching, batched undoable replacement, and matching highlights. Preserve query whitespace and keep replacement focus stable. Route source editor search shortcuts through the workspace controller.
Validation: 141 editor tests and 2 Chrome end-to-end cases passed; web and mobile typechecks and the web build passed.
Refs #574
* feat(templates): show unedited default templates in the current UI language
Default templates are stored in the language of the workspace's first
sign-in, so switching the UI language left them in that language. While a
default template still equals one of its seeded translations, the web
template center and the Android template picker now show it in the current
UI language, and using it creates the note in that language. Templates the
user created or edited are shown and used exactly as stored.
POST /api/v1/templates/:id/use accepts an optional `locale`; without it the
stored template is used as before, so MCP, agents and older clients are
unaffected.
* fix(templates): edit the stored template and stop localizing retagged defaults
- The template center now keeps each card's stored template next to its
display translation. Editing starts from the stored fields, so saving a
name-only change in another UI language no longer writes the translated
title, description and Markdown.
- A default template whose tags differ from its seeded tags is treated as
edited and is no longer localized.
- Add regression tests for the name-only edit and changed tags.
* feat(workspace): localize default notebooks and welcome note at first sign-in
A new installation always created its five default notebooks, welcome
note and note templates in Chinese, whatever the interface language.
Members added by the owner got notebooks and templates in the owner's
language instead of their own.
The seed data is now localized once, at the first sign-in of the
workspace's user, using the UI locale the client sends with the login
request (Web and Android send it; other clients fall back to
Accept-Language, and unsupported languages to English).
Migration 0070 marks the default workspace as waiting for this only on
an installation nobody has used yet: no users, no notes beyond the
welcome note, no edits to it, no extra notebooks, revisions or
resources. Existing installations keep their data unchanged. Member
workspaces created by the owner are marked when created.
The sign-in localizes notebook names, templates, the welcome note and
its search document in one transaction that also clears the mark, and
replaces only values that still equal a seeded translation. A failed
attempt leaves the mark for the next sign-in to retry, and a second
sign-in changes nothing. The demo clears the mark so its bilingual seed
stays as it is.
Refs #483
* fix(workspace): guard seed inserts and title-only welcome edits during localization
- Default template and AI prompt inserts in the first-sign-in batch now
require the pending marker, so a delayed concurrent sign-in cannot
recreate seeds removed after the faster sign-in finished.
- The welcome note is treated as untouched only while it keeps the seeded
title, the system actor, the seed content hash, and revision 0, so a
title-only edit is no longer overwritten.
- Add regression tests for both cases.
Refs #483
Add notebook-level share management, directory navigation, and live subtree checks for notes and attachments. Include migration and access-boundary regression tests.
Refs #551
Preserve HTTP status and fixed failure categories for direct and proxied agent requests, display diagnostics beside failed turns, and prevent AI SDK error logging from exposing request data.
Refs #555
Add owner-only attachment summaries and a compact member management table. Keep personal attachment statistics unchanged and exclude Trash from usage totals.
Refs #553
Record sanitized request URLs, redirects, timing, HTTP errors and proxy resolution from the actual updater session. Include the trace in copyable update diagnostics. Refs #513
* feat(web): improve editor resizing and header visibility
Prioritize note titles, compact notebook and tag controls by available space, preserve Smart Tags, and show accessible tooltips. Share pane-width limits across layout and resizing.
Validation: web/mobile typechecks and web build pass; 3002 bulk tests and 17 integration tests pass. One OpenClaw ACP timeout also reproduces on unchanged upstream/main 3855efb3. This commit builds on the existing notebook-pane resizing contribution 17f0898a.
* fix(web): handle constrained editor resizing
Handle asynchronous authentication identity notifications, reject missing credentials before prompting, and preserve sanitized adapter stderr. Document Claude gateway model mapping and add regression coverage for issue #531.
Align editor, AI SDK, query, and Expo SDK 57 dependencies; pin floating versions and rebase the Mermaid and Android sharing patches. Refresh the standalone iOS editor bundle and migrate site content collections while preserving routes.
Validation: typechecks for Web/API, Android, and iOS editor; Web, site, iOS editor, Worker, Docker server, extension, and Android APK builds; 2,994 tests passed, 23 skipped. Built-in browser verified rich-text paste/undo and bilingual site navigation.
USB-device upgrade/data/share verification and desktop cross-version release gates remain pending. Remaining dependency audit advisories are not all resolved.
Inbox has no working delete action, but the entry was hidden entirely, so users
had no way to learn why. Show the disabled entry in both the row actions menu
and the context menu with an always-visible inline explanation instead of a
native title: disabled context-menu items are pointer-events-none and are
skipped by keyboard focus, so a title tooltip is unreachable.
Clicks on the disabled entry no longer bubble to the notebook row, which used
to switch the selection to Inbox. The wording also clarifies that restored
notes land in Inbox when their original notebook was deleted, not always.
Fixes#503