Commit Graph
555 Commits
Author SHA1 Message Date
tianma-if 011a9048c0 feat(speech): add usage guidelines and copyright compliance notice 2026-10-07 13:50:13 +08:00
tianma-if b963ae54d8 feat(speech): show the download tool on the subtitle settings page
The settings item is now 字幕识别, and the card is 语音识别模型配置. The browser sign-in yt-dlp reuses sits with the tool version and path.
2026-10-07 12:37:35 +08:00
tianma-if 46f1c7d764 feat(speech): extract video-note subtitles from a workspace speech service
Video notes keep a hidden marker, and the note list can queue subtitle extraction. The desktop app downloads the audio with yt-dlp and sends it to the selected OpenAI-compatible speech service.
2026-10-07 11:36:12 +08:00
tianma-if be7bbe25e6 feat(plugins): append a signed community catalog beside official plugins
Official entries stay on the bundled registry. The instance returns a community file only when EDGE_EVER_COMMUNITY_REGISTRY_URL is set, and submission opens from its own marketplace entry.
2026-10-06 18:38:37 +08:00
Dariusz Koryto 80dadb3194 feat(i18n): add Polish as an in-app locale (#473)
* feat(editor): add setting to turn off spellcheck underlines

Add a device-local "Underline spelling mistakes" switch to the editing
preferences. The rich-text editor and the mobile plain-text editor now
set spellcheck from this preference and update live when it changes.
Defaults to enabled, so existing behavior is unchanged.

Refs #468

* feat(i18n): add Polish as an in-app locale

Add Polish (pl) across clients, mirroring how Japanese was added:

- Shared: full pl catalog, locale matching for pl/pl-*, Polish memo
  templates and factory AI prompts, mobile editor strings, and Polish as
  an AI translation target and selection-translate chip.
- Web: "Polski" in the language picker; the catalog is lazy-loaded in its
  own i18n-pl chunk and kept out of the PWA precache like ja.
- Android: pl locale option, mobile-only strings, web-clip labels.
  Messages that only had an English branch now use English for every
  non-Chinese locale, so Japanese no longer falls back to Chinese there.
- iOS: .polish UI language (pl-PL), pl argument for every t() call,
  pl in CFBundleLocalizations and Localizable.xcstrings.
- Companion: accepts locale "pl" and detects Polish requests.
- Browser extension: _locales/pl messages.
- Marketing site: /pl/ pages, hreflang, sitemap, language switcher.
- Google Play listing copy for pl-PL (manual publish only).

* fix(ios): show the note editor in Polish and Japanese

The iOS editor received every interface language except English as
Chinese, so with Polish or Japanese selected its toolbar and image
gallery controls were labeled in Chinese. Pass Polish and Japanese
through to the embedded editor, label its toolbar and the shared image
gallery controls in both languages, and rebuild the checked-in
EditorBundle. The Android editor uses the same gallery labels.

Also translate the last iOS strings that had no Polish text: the
follow-system language label, note created/updated times and the
current-device marker.

Refs #473

* fix(companion): recognize Polish typed without diacritics

Requests in Latin letters without Polish diacritics were always treated
as English, so with a Polish interface "Napisz plan na jutro" got an
English reply. With a Polish interface, such text is now told apart by
common English and Polish words; when it is still unclear, the recent
conversation and then the interface language decide. Other interface
languages keep treating Latin text as English.

Refs #473

* chore(ios): regenerate the Xcode project for Polish

Run xcodegen so the shipped Info.plist lists Polish in
CFBundleLocalizations and the project knows the pl region. The
hand-written AiDirectStream.swift entries are replaced by the IDs
xcodegen generates. MARKETING_VERSION and CURRENT_PROJECT_VERSION stay
in the project file because the release script and Xcode Cloud update
them there.

Refs #473

* i18n(pl): translate the sidebar shortcut, desktop menus and video scope

Add Polish for features that reached main while this branch was open:
the show/hide sidebar shortcut label, the desktop application and
editing context menus, and the new "ai:generate" MCP scope. The desktop
menus switch to Polish for pl and pl-* locales; other locales are
unchanged.

Refs #473
2026-10-06 16:18:38 +08:00
Dariusz Koryto 18c4833ef5 feat(editor): add setting to turn off spellcheck underlines (#472)
* feat(editor): add setting to turn off spellcheck underlines

Add a device-local "Underline spelling mistakes" switch to the editing
preferences. The rich-text editor and the mobile plain-text editor now
set spellcheck from this preference and update live when it changes.
Defaults to enabled, so existing behavior is unchanged.

Refs #468

* fix(editor): keep the spellcheck setting when it cannot be saved

When localStorage rejects the write, remember the choice in memory for
the rest of the session so reopening Settings or the editor no longer
falls back to the default.

Refs #468
2026-10-06 10:18:06 +08:00
Dariusz Koryto ea759ab092 feat(web): add a keyboard shortcut to show or hide the sidebar (#475)
* feat(web): add a keyboard shortcut to show or hide the sidebar

The notebook sidebar can already collapse into an icon rail, but only
with the mouse. Add a configurable "Show/hide sidebar" shortcut,
Ctrl/⌘+\ by default, next to the existing outline shortcut. It toggles
the same persisted collapsed state, works only in the desktop layout,
and is ignored while a dialog or another view is open. The collapse
button tooltip now shows the shortcut.

Refs #97

* fix(web): ignore the sidebar shortcut while Focus Mode is on

Focus Mode hides the notebook sidebar, so the shortcut used to change
and save its collapsed state without any visible feedback. It now does
nothing while Focus Mode is active, and the saved state is left as it
was when Focus Mode ends.

Refs #97
2026-10-06 10:01:26 +08:00
tianma-if eabd9bbb79 feat(extension): save YouTube and Bilibili watch pages as video notes
Read the current player's captions after one click and write a timestamped note. Summaries use the workspace default model when the token includes ai:generate.
2026-10-06 00:26:10 +08:00
tianma-if 22c5c79056 Clarify dense architecture diagram relations 2026-10-05 00:36:19 +08:00
tianma-if ab23e48f4f Tighten architecture nodes by label length 2026-10-05 00:20:01 +08:00
tianma-if f8233d9f20 fix(diagram): clarify dense architecture connections 2026-10-05 00:10:29 +08:00
tianma-if 43e5675d0a fix(diagram): balance architecture group layouts 2026-10-04 23:46:53 +08:00
tianma-if 940c4d8cde fix(diagram): approach architecture nodes from port direction 2026-10-04 23:37:54 +08:00
tianma-if c72b5b277d fix(diagram): route architecture edges around nodes 2026-10-04 23:23:45 +08:00
tianma-if b64772a46b fix(diagram): balance wide architecture layouts 2026-10-04 23:15:11 +08:00
tianma-if 07cb902dae style(web): compact mind map canvas hints 2026-10-04 19:11:18 +08:00
tianma-if f94001382c fix(web): simplify mind map node editing and show shortcuts 2026-10-04 19:02:56 +08:00
tianma-if 8cecef3360 fix(web): preserve rich table cells during Markdown edits 2026-10-04 17:55:37 +08:00
tianma-if 9fe9547a65 fix: use colons in selection explain prompts 2026-10-03 10:00:41 +08:00
tianma-if aeac1a77e9 fix(ai): infer translation target from conversation language 2026-10-03 09:46:04 +08:00
tianma-if 09e74ea3df fix(ai): choose default translation target from locale 2026-10-03 09:33:53 +08:00
tianma-if 12daebbd08 fix(editor): preserve external links with file-like labels 2026-10-02 22:48:22 +08:00
tianma-if 7a908b401c refactor(web): remove redundant empty state description in AI sidebar 2026-10-02 19:26:35 +08:00
tianma-if 633aa16784 Refine AI sidebar composer styling 2026-10-02 17:02:49 +08:00
tianma-if 0e546ec834 feat: show instance deployment time in system info 2026-10-02 16:29:32 +08:00
tianma-if 88eccaa058 fix(ai): simplify translation replies and preserve paragraphs 2026-10-02 16:10:43 +08:00
tianma-if 8dd73b975b refactor(ai): simplify selection prompts and restrict writes 2026-10-02 16:01:02 +08:00
tianma-if 50d4d5a75b feat(mcp): support creating infographic notes via MCP and companion 2026-10-02 12:33:37 +08:00
tianma-if 2406698c7e refactor(settings): clarify Mermaid diagram theme preference label 2026-10-02 11:24:49 +08:00
tianma-if fc2eab3c35 refactor(settings): refine interface and reading preference copy and layout 2026-10-02 10:08:06 +08:00
tianma-if fde6cf01ef fix(desktop): show infographic icons on desktop list cards
Desktop lists come from the sidecar, which omitted the type flags the shared card uses. List rows now carry the same infographic, diagram, and table metadata as the web list, without the document payload.
2026-10-02 09:14:48 +08:00
LuoQianhong a820b5e2b4 feat(notebooks): add toggle to hide notes from sub-notebooks
Refs #157
2026-10-02 01:08:04 +08:00
tianma-if 2d9d820565 Set new note images to medium display size 2026-10-02 00:30:09 +08:00
tianma-if 540d494a25 feat(editor): convert typed checklists and dollar formulas in rich text
After a bullet is created, a task marker at the start of that item becomes a checkbox. Closed dollar pairs become formulas, while currency amounts stay text.
2026-10-01 22:59:04 +08:00
tianma-if fa1b86a503 Add interactive template gallery and live previews for infographic notes 2026-10-01 20:11:17 +08:00
tianma-if cd59e80803 Clarify WorkBuddy ACP login state without standalone CLI 2026-10-01 17:32:55 +08:00
tianma-if 7a4dce8f86 show ACP login methods for all desktop agents 2026-10-01 17:21:04 +08:00
tianma-if 46dfbeb98d fix desktop WorkBuddy ACP prompt auth refusal 2026-10-01 16:46:22 +08:00
tianma-if cd8083b8f1 refactor(settings): use clean local ACP agent hint without session MCP jargon 2026-10-01 15:32:44 +08:00
tianma-if 5d4cd4386c feat(desktop): support Claude Code OpenClaw and Hermes ACP 2026-10-01 12:40:57 +08:00
tianma-if 578ca26ed8 refactor(settings): simplify local ACP agent hint copy 2026-10-01 12:32:49 +08:00
tianma-if d2513bf909 feat(desktop): grant ACP agents session-scoped note access 2026-10-01 12:18:12 +08:00
tianma-if 17dfff1ad5 feat(web): export infographic notes as pictures
Rasterize the preview onto its sheet so the PNG keeps readable text and solid fills.
2026-10-01 11:16:24 +08:00
tianma-if 9918570868 Add visible progress while copying notes for publishing 2026-10-01 00:31:07 +08:00
tianma-if ebcf78b457 style(ai): compact local agent process details 2026-09-30 23:55:00 +08:00
tianma-if 22b0188837 fix(ai): make current note context optional 2026-09-30 23:29:42 +08:00
tianma-if 0de31ff8e7 fix(ai): persist local agent generated images 2026-09-30 23:22:22 +08:00
tianma-if c97bb7f0ff fix(editor): refine body color palettes 2026-09-30 23:17:21 +08:00
tianma-if 6189a3ec56 test: keep a window object when test globals had none
Linux Bun has document without a window binding. Deleting the test stub
makes ProseMirror throw window is not defined. Leave the stub in place
when there was no previous window.
2026-09-30 21:58:59 +08:00
tianma-if f697ffb7dc test: stop restoring window as an undefined global
Assigning globalThis.window = undefined creates an own property. On Ubuntu
that shadows the host window, so later editor tests throw when ProseMirror
reads window.MutationObserver.
2026-09-30 21:52:02 +08:00