Commit Graph
2019 Commits
Author SHA1 Message Date
tianma-if effd08fed7 fix(desktop): show notebook not empty delete message 2026-10-07 23:29:56 +08:00
tianma-if 08f645686d test: stabilize release regression gates 2026-10-07 23:28:56 +08:00
tianma-if c7a5eb6c30 feat(web): add Markdown outline editing for mind maps (#487) 2026-10-07 23:22:45 +08:00
tianma-if a7f55da099 fix(sync): clear conflicts after confirmed memo deletion 2026-10-07 22:01:49 +08:00
tianma-if 27f3ce7749 feat(web): show transcription inline below media attachments 2026-10-07 22:01:03 +08:00
tianma-if 6b73340d52 feat(plugin-api): transcribe plugin-owned media on client 2026-10-07 21:37:32 +08:00
tianma-if f6aa3d738d feat(web): add bilingual speech service test audio 2026-10-07 21:30:38 +08:00
tianma-if 891909bfb4 Remove bouncy motion from mobile apps 2026-10-07 21:26:53 +08:00
tianma-if 49de42a430 Remove editor block drag handle 2026-10-07 21:26:37 +08:00
tianma-if 2c4f8b4824 Clarify browser speech provider connection failures 2026-10-07 20:50:32 +08:00
tianma-if 1080b39791 Add direct speech service connection test 2026-10-07 20:36:32 +08:00
tianma-if 916b1b35e8 Move note attachment transcription to direct client processing 2026-10-07 20:22:31 +08:00
tianma-if 975cd827f0 fix(web): restore speech settings sidebar entry 2026-10-07 19:43:01 +08:00
tianma-if c494251cd8 fix(mobile): show missing session guidance after login
Preserve the server update hint when login succeeds without a mobile session. Refs #486.
2026-10-07 19:39:03 +08:00
Dariusz Koryto 8c3745c004 i18n(mobile): translate buttons, statuses and errors shown in Chinese (#485)
The Android app translates copy by looking it up in a dictionary. 33
strings had no entry, so English, Japanese and Polish users saw them in
Chinese: the default dialog OK button, the Sign in button, the editor
save statuses (Saving, Local draft, Not saved), revision restore states,
search empty state, and delete, upload, load and connection errors.
Add English, Japanese and Polish entries for them and a test that keeps
them translated.

On iOS, the launch spinner showed "启动中…" for every language; it now
follows the app language.
2026-10-07 19:37:24 +08:00
tianma-if f3b4226555 feat(speech): transcribe note media attachments without external downloads 2026-10-07 19:36:19 +08:00
tianma-if 2e15f325c5 revert: withdraw unreleased video transcription feature 2026-10-07 17:30:14 +08:00
tianma-if 86da442eb4 fix(extension): attach an optional video transcript to image uploads
The cover-image form can carry a transcript job. Callers that omit it
leave the field off the request.
2026-10-07 16:53:43 +08:00
tianma-if 350766cba3 fix(web): quiet the table editor header on wide screens
Hide the back control from the lg breakpoint up, and keep the field type inside the field menu.
2026-10-07 16:36:49 +08:00
tianma-if 93b97b6bd5 test(extension): run notebook clip id checks with the extension tests 2026-10-07 16:36:48 +08:00
tianma-if c1d92c75fa fix(api): return 404 when a new memo names a missing notebook
A bad notebook id used to write orphan content and then fail the read-back as a generic 500.
2026-10-07 16:36:48 +08:00
tianma-if 4c867e4d0b fix(web): drop the extra sentence from community plugin submission
The dialog keeps the repository field and precheck.
2026-10-07 16:34:01 +08:00
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 586501da76 fix(extension): default clips to the inbox notebook
A missing or stale clipper notebook id now resolves to 等待分类
instead of the first notebook or an id the account does not have.
2026-10-07 11:24:57 +08:00
tianma-if 3e0ec79575 docs(deploy): update AI Agent deployment heading across READMEs and site 2026-10-07 10:33:50 +08:00
tianma-if a94786e68d Merge pull request #482 from dkoryto/extension-pl-video
i18n(pl): translate the Web Clipper video-note phrases
2026-10-06 21:41:37 +08:00
Dariusz Koryto 518fafa86e fix(api): report bad request bodies and fractional limits as client errors (#484)
A malformed JSON body, or a body over the route's size limit, made Hono
throw an HTTPException that the API reported as a 500 internal error. In
the companion API the same requests returned 503 "unavailable, please
retry", so clients retried a request that could never succeed. These
now return 400 bad_request and 413 payload_too_large in the API's usual
error shape.

A fractional limit or offset such as ?limit=1.5 was passed to SQLite as
a float and failed with a datatype mismatch. Limits, offsets and cursors
are now truncated to whole numbers, and the two private copies of the
clamp helper reuse the shared one.
2026-10-06 21:39:22 +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 61d8b8cbe4 i18n(pl): translate the Web Clipper video-note phrases
The video-note feature reached main while the Polish locale was in
review, so its 25 phrases were missing from the Polish catalog. Chrome
and Firefox then fall back to English, which put English headings such
as "Summary" and "Transcript" into notes saved with a Polish browser.

Add the Polish phrases and a test that every extension locale ships the
same message keys as English, so a later feature cannot leave a locale
behind.
2026-10-06 11:21:40 +02:00
Dariusz Koryto 40321fe1f8 feat(extension): keep page clip images inside the note (#474)
Copy images in generic page and selection clips into note resources so clips can retain them when source URLs change. Keep remote URLs for images that cannot be copied.

Protect concurrent note edits, parse Markdown image syntax correctly, and bound image transfers by time and size. Add unit and Chromium browser coverage.

Refs #159
2026-10-06 16:24:49 +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 892f472ee6 feat(desktop): add the standard editing context menu (#476)
Right-clicking in the desktop app showed nothing, because the main
process never handled webContents "context-menu". Browsers offer Cut,
Copy, Paste and Paste as plain text there, so desktop users, notably on
Windows, could not paste with the mouse and took the missing menu for
missing rich paste.

Show the native editing menu for editable fields (Cut, Copy, Paste with
formatting, Paste as plain text, Select all, enabled per editFlags),
spelling suggestions and Add to dictionary for misspelled words, Copy
for selected text outside fields, and Copy link address for links. The
main window and windows it opens get the menu; pages that handle their
own contextmenu event are unaffected. No app-specific formatting
commands are added.

Refs #401
2026-10-06 11:16:24 +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 c91271c8bc fix: compact AI sidebar tables 2026-10-05 23:40:01 +08:00
tianma-if 36f60ca429 fix: enable structured table creation in companion agent 2026-10-05 22:52:26 +08:00
tianma-if fecc79ff49 chore: release v1.100.0 [skip ci] 2026-10-05 12:01:32 +08:00
tianma-if 93a650c903 test(diagram): verify demo architecture layout remains stable 2026-10-05 12:00:44 +08:00
tianma-if 8472f19e46 feat(mobile): create notebooks in Android and iOS apps 2026-10-05 11:56:11 +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 3262bd8b16 fix(diagram): attach architecture arrows to node borders 2026-10-04 23:28:09 +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