Commit Graph
1311 Commits
Author SHA1 Message Date
tianma-if 80038dd2d1 feat(editor): refine note image share themes with typography affinity and curated layout 2026-10-16 00:10:18 +08:00
Dariusz Koryto 3e54226110 chore(ts): enable noFallthroughCasesInSwitch and noImplicitOverride (#577)
Turn on both compiler checks in the root TypeScript configuration, which
apps/web, apps/api, apps/extension, packages/shared and packages/plugin-api
extend, and in the separate Expo configuration of apps/mobile.

No switch statement falls through today. The 19 members that override a
base class member (React error boundaries, the local database recovery
error and the vendored poster badge) now declare `override`; this only
changes type checking and is erased from the emitted JavaScript.
2026-10-15 21:54:59 +08:00
LuoQianhong 1bb9580007 feat(extension): expand vertical and article platform clipping (#578) 2026-10-15 21:39:41 +08:00
Dariusz Koryto 72ab4816a1 feat(memos): duplicate a note with its files (#566)
* feat(memos): duplicate a note with its files

Add "Duplicate note" to the note list's context menu and the text editor's
"More note actions" menu. The copy keeps the note's content and tags, is
titled "<title> (copy)" in the UI language, and opens in the editor.

POST /api/v1/memos/:id/duplicate (write:memos) copies every image and
attachment of the note to a new resource with its own stored object and
rewrites the content to reference the copies, so editing or deleting either
note never affects the other. Shares, revisions, the pinned state, public
form links and unsubmitted form uploads are not copied. A note with more
than 20 files or more than 64 MiB of files is refused, and files written for
a copy that fails are removed.

The Web and desktop clients synchronize the note's queued changes before
duplicating and refuse while any remain, including unresolved conflicts;
the editor item stays disabled until the current edit is saved.

* fix(memos): keep committed duplicate files and check the whole desktop outbox

- Copied objects are removed only when the write batch fails. A failure
  after the commit, such as a transient error while reading the new memo,
  no longer deletes files that committed resource rows reference. When the
  memo row is missing after the commit (its notebook was removed meanwhile),
  the rows are removed before their objects.
- The sidecar lists at most 200 outbox items, so a conflict of the note
  further down the queue was invisible and the stale server version could be
  copied. The desktop client now compares the listed items with the
  sidecar's status counts and refuses to duplicate unless the whole
  outstanding queue was listed, nothing is being synchronized, and no item
  belongs to the note.
- Regression tests cover a read failure after the commit and a target
  conflict at position 201 behind 200 other conflicts.
2026-10-15 16:54:04 +08:00
tianma-if 71e2395e28 fix(editor): search and replace in the active editor mode
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
2026-10-15 11:43:34 +08:00
tianma-if f4b36fc64f fix(desktop): repair ACP updates and add manual retry 2026-10-15 11:10:39 +08:00
Dariusz Koryto 9bb3218c03 feat(templates): show unedited default templates in the current UI language (#563)
* 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.
2026-10-15 09:10:38 +08:00
Dariusz Koryto b3f4dfda2b feat(workspace): localize default notebooks and welcome note at first sign-in (#562)
* 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
2026-10-14 20:45:42 +08:00
tianma-if 3c77c67155 fix(desktop): defer local AI probes until selector opens
Record adapter process lifecycle diagnostics to correlate transient Windows consoles.

Refs #561; Windows device verification remains pending.
2026-10-14 17:53:03 +08:00
tianma-if 4c592d68a1 fix(ai): clarify current note context for local agents 2026-10-14 10:48:42 +08:00
tianma-if c78f17a800 fix(desktop): restore WorkBuddy sign-in after connection failure 2026-10-14 10:40:53 +08:00
tianma-if 82fa24c3a0 fix(sharing): align memo sharing actions and allow revocation retries 2026-10-14 10:27:01 +08:00
tianma-if 043752546f fix(web): correct sharing dialog initial focus and close button rings 2026-10-14 10:12:25 +08:00
tianma-if 590150d3ea fix(web): clarify sharing states and close dialogs on navigation 2026-10-14 10:02:58 +08:00
tianma-if 80c83023cf refactor(sharing): streamline share dialogs and create links on open 2026-10-14 09:39:31 +08:00
tianma-if 29bb511259 feat(sharing): recover encrypted passwords across devices 2026-10-14 09:27:13 +08:00
tianma-if 6d9469c058 refactor(web): streamline share dialog layout and password controls 2026-10-14 00:13:07 +08:00
tianma-if eda356a824 fix(sharing): require password verification for logged-in users 2026-10-13 23:46:32 +08:00
tianma-if e711bb5880 fix(web): simplify shared note and notebook indicators 2026-10-13 23:35:20 +08:00
tianma-if a78586b716 feat(sharing): add password protection for notebook shares 2026-10-13 23:24:17 +08:00
tianma-if a7f05b439c fix(web): clarify share management layout and notebook icon 2026-10-13 21:56:08 +08:00
tianma-if 62390b218f feat(web): turn shared notebooks into a navigable website 2026-10-13 21:45:58 +08:00
tianma-if cdcc77af5e fix(ui): use softer neutral colors for solid buttons and share link 2026-10-13 21:40:23 +08:00
tianma-if 13f8b3f407 feat: share notebooks recursively with live public reading
Add notebook-level share management, directory navigation, and live subtree checks for notes and attachments. Include migration and access-boundary regression tests.

Refs #551
2026-10-13 19:27:16 +08:00
tianma-if 91f1887c33 fix(ai): surface safe companion failure diagnostics
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
2026-10-13 17:35:33 +08:00
tianma-if 1c234a463c fix: clarify used storage labels and simplify member descriptions
Refs #553
2026-10-13 17:17:23 +08:00
tianma-if 7bbde189f8 feat: show instance and per-account attachment storage usage
Add owner-only attachment summaries and a compact member management table. Keep personal attachment statistics unchanged and exclude Trash from usage totals.

Refs #553
2026-10-13 17:12:04 +08:00
tianma-if f682fbcb33 fix: refine inline code styling and improve region visibility 2026-10-13 16:15:38 +08:00
tianma-if 55d56957a0 fix: neutralize inline code colors and refine prose palette names 2026-10-13 14:06:34 +08:00
tianma-if be93432e78 fix: capture desktop update network diagnostics
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
2026-10-13 13:40:11 +08:00
tianma-if d482d841ac fix: refine prose reading palettes for light and dark modes 2026-10-13 13:37:41 +08:00
tianma-if 9011a1ce62 feat(plugins): add guarded editing for structured notes 2026-10-13 13:25:16 +08:00
tianma-if 973a5a09a8 fix: improve violet prose accent readability 2026-10-13 12:25:36 +08:00
tianma-if 6b5027e8b4 fix(security): harden renderer and desktop execution boundaries
Preserve trusted plugin and automatic ACP permission models. Track release and remaining validation in #546.
2026-10-13 00:42:36 +08:00
tianma-if 73f6ac5307 style(web): simplify AI response tables 2026-10-12 23:48:30 +08:00
Thorufur bc048b9620 Improve editor resizing for better viewing (#528)
* 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
2026-10-12 23:35:58 +08:00
tianma-if 28a8792e1a fix(desktop): verify ACP authentication status and retain diagnostics
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.
2026-10-12 22:31:21 +08:00
tianma-if e66b0d707e fix(desktop): recover transient ACP note access failures 2026-10-12 22:13:37 +08:00
tianma-if bf41941f35 refactor(web): clarify image hosting labels and settings copy
Name built-in and external image hosting consistently and shorten PicGo setup descriptions across all locales.

Refs #530
2026-10-12 22:04:46 +08:00
tianma-if 435376ca56 feat: add optional desktop PicGo image uploads
Add local PicGo configuration, connection testing, and explicit upload failure recovery. Expose the configuration preview on Web.

Refs #530
2026-10-12 21:45:06 +08:00
Thorufur 5053e0cd71 feat(web): make notebook pane resizable (#527)
* feat(web): make notebook pane resizable

* fix(web): harden notebook pane dragging
2026-10-12 20:50:38 +08:00
tianma-if 1e6a355bb5 fix(web): restrict note reference triggers to text boundaries 2026-10-12 17:48:51 +08:00
tianma-if 855298bb63 fix(web): preserve bundled editor initialization order 2026-10-12 14:16:09 +08:00
tianma-if 0e958b4944 chore: upgrade core dependencies and migrate site to Astro 7
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.
2026-10-12 12:22:42 +08:00
X77 c647f6b624 fix(web): explain why the Inbox notebook cannot be deleted (#522)
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
2026-10-12 10:48:54 +08:00
tianma-if 3855efb3ee fix(web): unify WorkBuddy available status label 2026-10-12 00:12:12 +08:00
tianma-if 30263f76b0 fix(settings): open model picker on single click 2026-10-11 20:49:03 +08:00
tianma-if 6dca569daa fix(settings): clarify WorkBuddy connection and sign-in status 2026-10-11 19:15:06 +08:00
tianma-if 79e58acbdf fix(poster): edit grouped text on double-click 2026-10-11 18:27:11 +08:00
tianma-if b151f73ab5 feat(poster): replace images and placeholders on double-click 2026-10-11 18:08:27 +08:00