717 Commits
Author SHA1 Message Date
edgeever-updater[bot] 507cb892ad chore: update EdgeEver from v2.19.0
EdgeEver-Upstream-Commit: a80d9bfda1aad846e20882813758a59fe27bf8ca
2026-11-04 09:13:22 +00:00
edgeever-updater[bot] 67cf5297de chore: update EdgeEver from v2.18.0
EdgeEver-Upstream-Commit: 4235f3f2f1f68ad94802612362d1daea6dabb3cb
2026-11-03 09:33:32 +00:00
edgeever-updater[bot] eaf37b4aeb chore: update EdgeEver from v2.16.1
EdgeEver-Upstream-Commit: 6e79c1bd81a3678b1d0d01f5476564cfecdd40d8
2026-10-31 08:26:31 +00:00
edgeever-updater[bot] d78620caaa chore: update EdgeEver from v2.15.0
EdgeEver-Upstream-Commit: e052ac3b54bdcba4b2c452e6b06c091b1e2c70f4
2026-10-30 08:39:50 +00:00
edgeever-updater[bot] d04350db18 chore: update EdgeEver from v2.14.0
EdgeEver-Upstream-Commit: 355286814e746828688e6b0de139c39d3ecd2b20
2026-10-29 08:29:49 +00:00
edgeever-updater[bot] 55a447d8f8 chore: update EdgeEver from v2.12.0
EdgeEver-Upstream-Commit: eeaab088f41d0417fbce2266f58ff4adde7f5d76
2026-10-28 08:33:37 +00:00
edgeever-updater[bot] 83a99699c3 chore: update EdgeEver from v2.9.0
EdgeEver-Upstream-Commit: d5c62eeda4ece2affc36c7d5463c87dd7a8a292f
2026-10-27 07:52:48 +00:00
edgeever-updater[bot] 05e53dcba3 chore: update EdgeEver from v2.7.0
EdgeEver-Upstream-Commit: 30fcb3fc65c419000a3e6f8cfb70eca47ae53914
2026-10-26 07:48:43 +00:00
Sergey 7aff06445e feat(i18n): add Russian locale (#668)
Add Russian beside Polish for the web app, the mobile editor, memo templates, and AI prompt seeds. Untranslated strings stay in English. iOS, the browser extension, and the marketing site are unchanged.
2026-10-25 09:55:26 +08:00
tianma-if 8966091920 feat(web): reuse the assistant session menu on infographic notes
Infographic notes use the same chat history and New chat control as other notes. The open graphic stays one row in that menu, and its own turns remain on the note.
2026-10-24 23:17:48 +08:00
tianma-if 667c536958 fix(companion): keep a named diagram topic independent of the open note
A request that names its own subject no longer reads the open note. Requests that convert or diagram the open note still do.
2026-10-24 21:19:44 +08:00
tianma-if cf3435de43 feat(desktop): upload images through a remote PicList
Allow a saved PicGo or PicList address beyond loopback, and send the
optional server key on both the connection check and the upload.
2026-10-24 11:03:24 +08:00
tianma-if f7f10e64ee fix(desktop): open the main window when launching at startup
Drop the tray-only choice and the repeated description. A login launch shows the main window, and an older tray preference is rewritten on the next start. Local web dev still shows the switch for preview only.
2026-10-24 11:01:00 +08:00
tianma-if a092052892 feat(desktop): add a startup launch setting
Packaged Windows and macOS can open EdgeEver after the computer starts.
The switch stays off until the user turns it on, and can open the main window or stay in the tray.
2026-10-24 00:54:29 +08:00
Andy Jarosz e1210c664b feat(editor): add per-gallery fit width and fit height (#655)
Each gallery can keep the cropped tile or show every image whole inside an even tile. Fit width stays the previous look. The choice is saved with that gallery and survives reopening and Markdown edits. Sharing, HTML export, and print follow it. Older galleries stay on fit width.
2026-10-23 22:09:44 +08:00
Andy Jarosz a5bda92e14 feat(editor): add per-image left, center, and right alignment (#654)
Select a standalone image to align it left, center, or right. The choice stays with that image through save, Markdown edits, and reload. Existing images keep their previous layout until an alignment is chosen. Galleries keep their own layout. Native editors apply a saved alignment and do not add a picker in this change.
2026-10-23 18:37:59 +08:00
tianma-if 31d1f6274f feat(editor): tint table surfaces with note prose palettes
- Tint table headers and alternating zebra rows using each palette's subtle surface tint, keeping borders neutral
- Adapt dark mode with subtle accent color-mixing on table surfaces
- Align print appearance and WeChat publishing table backgrounds with the active prose palette
- Soften clay and pink surface tints to maintain quiet, comfortable contrast
2026-10-22 18:32:17 +08:00
tianma-if 2279badb27 fix(web): put reading faces first in the note body font menu
The settings list followed catalog insertion order, so title faces and Latin-only faces sat among reading fonts. Keep one menu and the saved choice, and leave poster and interface lists unchanged.
2026-10-22 14:30:15 +08:00
tianma-if 573b5a6a41 fix(web): match exported PDF styling to the note
Print preview used a separate navy and emerald palette. It now follows the editor's light prose, including account type size, line height, palette accents, custom CSS, and the note font. Saving the preview downloads a PDF with the heading outline.
2026-10-22 12:50:47 +08:00
LuoQianhong 9ae88e3381 feat: 增强公开笔记本站点体验与发布控制 (#634)
公开笔记本站点新增长文导航、正文检索、逐站点排除和站点配置,保留实时分享以及原有 Token、密码和解锁 Cookie。收录只对无密码的别名页生效,Token 页保持完整 noindex。

迁移 0072 为 notebook_shares 增加站点列,并新增排除关系表。先执行迁移再部署。

Closes #591
2026-10-21 23:20:38 +08:00
yulei666andClaude Opus 5.5 00ddaa0fed fix(ai): stop resumed companion turns from asking answered questions again (#638)
Resuming an interrupted companion turn kept the answered questions in
questions_json, and the client-direct runner ended any run with leftover
questions as interrupted. The question form reappeared after the reply.

Clear questions when a turn resumes, as the server-side runner did before
client-direct calls, and only pause when this run actually asks.

Fixes #637

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 23:15:55 +08:00
tianma-if 9f0d18ca54 feat(memos): sort note lists from Z to A
Add a title Z-A option beside title A-Z on web, Android, iOS, the API, and the desktop sidecar. Pinned notes stay first, and same-title tie breaks stay as they were.
2026-10-21 23:09:57 +08:00
yulei666andClaude Opus 5.5 ec8aba7ff7 fix(client): tolerate AbortSignal without throwIfAborted on React Native (#630)
React Native's abort-controller@3 polyfill exposes only `aborted`, so the
direct AI paths threw "undefined is not a function" on Android before any
request was sent. Feature-detect throwIfAborted and fall back to `aborted`.

Fixes #629

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 15:48:09 +08:00
tianma-if d3f51964db fix(ai): distinguish model timeouts from rejected requests
Classify HTTP 408 and 504 as timeouts and other HTTP 5xx responses as server errors. Add localized messages and regression coverage without changing transport or retry behavior.
2026-10-20 07:02:28 +08:00
tianma-if 3cc0b2d0ab fix(ai): restore browser fallback for model network failures
Relay initial browser network and CORS failures through authenticated, workspace-configured model endpoints while keeping native clients direct. Complete failed companion turns so the UI does not keep spinning.

Refs #619
2026-10-20 06:56:49 +08:00
tianma-if b085599af2 fix(ai): enable Anthropic browser-direct model access 2026-10-20 01:16:48 +08:00
tianma-if c25fdf68e5 refactor(ai)!: require client-direct model calls across all platforms 2026-10-20 01:13:40 +08:00
tianma-if b3d0c47977 fix(desktop): connect directly to private AI model endpoints 2026-10-20 00:45:22 +08:00
LuoQianhong e637679290 fix(desktop): 通过服务器调用受直连限制的 AI 模型 (#624)
* fix(desktop): proxy server-local AI model requests

* test(mobile): remove unnecessary regex escape
2026-10-19 20:41:53 +08:00
tianma-if dba620d8e5 fix: repair welcome note Markdown seed
Repair untouched welcome notes with real line breaks, a consistent content hash and revision, and sync notification. Keep first-sign-in localization compatible with both seed versions and cover persisted database upgrades and user-content preservation.

Fixes #622
2026-10-19 19:43:33 +08:00
tianma-if 7d2e54966b feat(poster): guide AI template selection with shared descriptions 2026-10-19 17:33:04 +08:00
tianma-if 3519fc9ec3 feat: support SVG image uploads and previews 2026-10-19 16:43:11 +08:00
tianma-if 0bebd4e542 fix: unify font loading and fallback messages 2026-10-19 11:34:31 +08:00
tianma-if 83fac43d4e fix: show template font fallback and restore fonts after retry 2026-10-19 11:31:51 +08:00
tianma-if 5eecc8df13 perf: reduce bundled fonts and defer startup dependencies
Keep shared offline defaults and download optional fonts into a validated cache with reliable export fallbacks. Prune stale Android DOM assets and refresh the smaller iOS editor bundles.

Preserve lazy startup boundaries through direct shared exports and dependency-aware splitting. Add ESM graph and Chrome startup checks to prevent eager editor and font loading.
2026-10-19 11:10:25 +08:00
tianma-if 8a06c8ca55 test: provide paper texture in book theme font fixture 2026-10-18 22:19:50 +08:00
tianma-if 89000466ad fix: hide note titles in shared images by default 2026-10-18 22:15:21 +08:00
tianma-if f4f307d2a2 fix: show theme font names in image sharing 2026-10-18 21:27:55 +08:00
tianma-if 2d48d02af9 style: give book excerpt images a warm paper background 2026-10-18 21:19:00 +08:00
tianma-if 4c00dbb1df fix: use glass as the default note image theme 2026-10-18 21:16:29 +08:00
tianma-if f4732e3df7 fix: remove generated avatar from note image signatures 2026-10-18 21:12:24 +08:00
tianma-if d885161b3e fix: restore template typography when switching note image themes 2026-10-18 21:09:50 +08:00
tianma-if b58011f76f fix: improve note share image hierarchy and rich content exports 2026-10-18 21:05:16 +08:00
tianma-if 51973cf16e fix: match note image template fonts to their visual styles 2026-10-18 20:07:03 +08:00
Dariusz Korytoandtianma-if df22f55d1c feat(docker): report image build metadata in System information (#602)
Docker instances reported most deployment fields as unknown. Report how
and when the container image was built, separately from how the
instance was deployed:

- Dockerfile: optional EDGE_EVER_BUILD_CREATED_AT, EDGE_EVER_BUILD_TRIGGER
  and EDGE_EVER_BUILD_METHOD build args, empty by default.
- /api/health (self-hosted-bun only): optional buildCreatedAt and
  buildProvenance. deploymentVersionCreatedAt and deployment keep their
  meaning and stay runtime-supplied; Cloudflare responses are unchanged.
- docker-image.yml: official images record the build time and their
  provenance. Draft-release builds dispatched with release_tag are
  github_release, main pushes main_push, other dispatches manual.
  The container test checks the health response for a metadata build
  with runtime overrides and for a default self-build; the post-publish
  audit checks the published image.
- Add an explicit `docker` deployment method. It is never inferred from
  the runtime, and the registry source still comes only from
  EDGE_EVER_CONTAINER_IMAGE.
- Web/desktop show "Image built at" and "Image build source" for Docker;
  Android shows "Image built at". Older clients ignore the new fields.
- Document the build args and runtime variables in both Docker guides.

Co-authored-by: tianma-if <yingwaizhiying@gmail.com>
2026-10-18 11:43:41 +08:00
Dariusz Korytoandtianma-if 5ac19b542b feat(web): show a QR code for note and notebook share links (#610)
Opening a shared note on a phone meant copying the link to another
device. Add a collapsible "QR code" section to the note and notebook
share dialogs that renders the public link as a scannable code.

- Rendered with qrcode.react 4.2.0 (SVG, no dependencies), loaded with
  the share dialogs only.
- Dark modules on a white panel in every theme so phone cameras can
  read it; labelled for screen readers, no native title tooltip.
- Hidden for password-protected links, so the code never replaces the
  password the recipient still has to receive separately.
- Copy in all four catalogs.

Co-authored-by: tianma-if <yingwaizhiying@gmail.com>
2026-10-18 11:39:00 +08:00
Dariusz Korytoandtianma-if d0f441dafa fix(web): localize untitled notes and diagrams on public share pages (#605)
* fix(web): show the localized label for untitled notes everywhere

Untitled notes are stored with the zh-CN default title, and several views
only replaced an empty title, so they showed 无标题笔记 in every locale.
The visible cases were the public share page (heading and browser tab),
the public notebook site, AI companion cards and mentions, the note link
picker, link text inserted for a note, and the title of a duplicated
note.

Add getMemoDisplayTitle() next to DEFAULT_MEMO_TITLE and use it in those
views, matching what MemoCard already does with isDefaultMemoTitle.

* fix(web): localize diagrams and content label on the public share page

The public share page passed zh-CN to read-only diagrams for every
language other than English, so Japanese and Polish visitors saw Chinese
diagram labels. Resolve the locale with resolveSupportedLocale(), which
the diagram renderer already supports for all four languages.

Also translate the note content aria-label, which was hard-coded in
English.

---------

Co-authored-by: tianma-if <yingwaizhiying@gmail.com>
2026-10-18 11:26:50 +08:00
Dariusz Korytoandtianma-if 82dac9b5cb fix: keep share and form links out of search indexes and caches (#608)
Public share and form pages only added a robots meta tag from JavaScript,
so the HTML for /share/* and /form/* was served without any indexing or
caching directive, and the form page had none at all. Error responses
from /api/public/* also lacked X-Robots-Tag.

Send one policy everywhere a token-bearing link is served:

  X-Robots-Tag: noindex, nofollow, noarchive, nosnippet, noimageindex
  Cache-Control: private, no-store
  Referrer-Policy: no-referrer

- /api/public/*: shared middleware in the application, so it applies on
  Cloudflare and Docker, including 404/403 responses. Routes that already
  set Cache-Control keep it.
- /share/* and /form/* HTML: _headers rules for Cloudflare static assets
  and the self-hosted static server.
- Referrer-Policy keeps the share token out of Referer headers sent to
  linked sites.

robots.txt is deliberately not used to block these paths: a disallowed
URL can still be indexed from external links, because crawlers never see
the noindex header.

Co-authored-by: tianma-if <yingwaizhiying@gmail.com>
2026-10-18 11:23:42 +08:00
tianma-if 67f627cc3c feat(fonts): share all 23 poster fonts across typography pickers 2026-10-17 11:10:22 +08:00
Dariusz Koryto ccc5ed3f29 refactor: remove unused code and enforce no-unused-vars (#598)
* refactor: remove unused imports, variables and parameters

Remove the 110 bindings reported by no-unused-vars:

- 78 unused imports. Nine whole value-import statements disappear:
  shadcn/ui input, tooltip, button and switch, MobileWebClipCapture,
  AccountSecurityModal and @/lib/api in plugin-host. None of these
  modules has top-level side effects beyond displayName assignments,
  and @/lib/api is still imported by 60 other web modules. The other
  removals are type-only imports or bindings from modules that stay
  imported, so module evaluation is unchanged.
- Dead helpers: appendResourceMarkdown, handleTogglePin (mobile),
  CheckCircleCheck, moveTargetTitle, moveTargetSelectRef,
  handleMoveTargetSelectKeyDown (memo list), copiedLabel (share
  dialog), and an unused palette and flowchart in the diagram editor.
- Component props that are passed but never read are dropped from the
  destructuring only. Their prop types and call sites are unchanged,
  so no caller changes behaviour.
- Tests: iterate Object.values() where keys were unused, and drop
  unused fixture bindings and callback parameters.

* ci: enforce no-unused-vars in oxlint

Turn the rule on with the conventional escapes: names starting with an
underscore and rest siblings used to omit a property
(`({ id, ...item }) => item`) are allowed.
2026-10-17 01:11:05 +08:00