Commit Graph
223 Commits
Author SHA1 Message Date
tianma-if 10b4753955 feat(poster): automatically ensure static thumbnails during development and builds 2026-10-19 18:17:47 +08:00
tianma-if 5f54aeaddc perf(poster): use pregenerated static template thumbnails 2026-10-19 17:57:35 +08:00
LuoQianhong d0db8b128f fix: restore editor mode shortcut round trips (#623) 2026-10-19 17:54:22 +08:00
tianma-if d525d60fc0 fix(poster): bound preview loading and allow failed thumbnails to retry 2026-10-19 17:50:01 +08:00
tianma-if 12b100f680 fix(web): keep memo context menus within the viewport 2026-10-19 17:18:34 +08:00
tianma-if 3519fc9ec3 feat: support SVG image uploads and previews 2026-10-19 16:43:11 +08:00
tianma-if 4c00dbb1df fix: use glass as the default note image theme 2026-10-18 21:16:29 +08:00
tianma-if b58011f76f fix: improve note share image hierarchy and rich content exports 2026-10-18 21:05:16 +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 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 776fc3b566 feat(share): refine image themes and persist settings across clients 2026-10-16 21:57:49 +08:00
Thorsten Ruf 367cb8368d feat(web): add a table context menu with copy and paste (#579)
* feat: add table context menu with copy and paste

* fix(web): preserve native input and test table context menu regressions

* fix: harden table context actions and desktop clipboard
2026-10-16 11:24:46 +08:00
tianma-if 6113e18fff test: isolate ACP cleanup in full regression suite 2026-10-16 01:50:03 +08:00
LuoQianhong 1bb9580007 feat(extension): expand vertical and article platform clipping (#578) 2026-10-15 21:39:41 +08:00
tianma-if 4609f72a85 test: isolate WorkBuddy launcher subprocess checks 2026-10-15 12:42:37 +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 6d9469c058 refactor(web): streamline share dialog layout and password controls 2026-10-14 00:13:07 +08:00
tianma-if 9011a1ce62 feat(plugins): add guarded editing for structured notes 2026-10-13 13:25:16 +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 e66b0d707e fix(desktop): recover transient ACP note access failures 2026-10-12 22:13:37 +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
LuoQianhong eaf68ef3d9 feat(extension): expand social and article platform clipping (#521)
* feat(extension): expand platform clipping and harden readable content capture

* fix(extension): preserve Bluesky links and exclude hidden body text
2026-10-11 21:04:54 +08:00
tianma-if ccc73ab6af feat(markdown): preserve front matter on import and export
Support imported YAML properties without adding a toolbar entry. Keep ordinary single-note exports body-only and retain full metadata for ZIP backups.
2026-10-10 18:42:45 +08:00
LuoQianhongandjingwen.lqh cc18b4329f feat(extension): support Hacker News main-post clipping (#505)
Co-authored-by: jingwen.lqh <jingwen.lqh@dtyunxi.com>
2026-10-09 12:52:08 +08:00
tianma-if 04a6de6b47 test: align mobile metadata save scope with confirmation flow 2026-10-09 10:31:49 +08:00
tianma-if e93c2882b0 fix: align release checks with current note and diagram behavior 2026-10-08 22:51:06 +08:00
tianma-if 08f645686d test: stabilize release regression gates 2026-10-07 23:28:56 +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 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 3e0ec79575 docs(deploy): update AI Agent deployment heading across READMEs and site 2026-10-07 10:33:50 +08: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
tianma-if 0e546ec834 feat: show instance deployment time in system info 2026-10-02 16:29:32 +08:00
tianma-if 21ddc90267 test(markdown): expect medium width for new images 2026-10-02 00:40:57 +08:00
tianma-if 12af0581d2 fix(web): import backups that contain Office attachments
Streaming unzip treated ZIP signatures inside stored .docx, .xlsx, and .pptx files as archive entries. Read each entry from the central directory so existing exports restore.
2026-10-01 22:32:19 +08:00
tianma-if 27d3b1ce96 test(release): stabilize ACP bridge and installer checks 2026-10-01 12:52:16 +08:00
tianma-if 65ef837f45 feat(web): copy a note to WeChat from the card menu
Text-note card menus can copy the note as rich text. The open note uses the editor, including unsaved changes; other notes copy saved content without switching the editor.
2026-09-30 20:12:49 +08:00
tianma-if ae6ae99eeb feat: integrate structured GitHub issue forms and prefilled feedback URLs 2026-09-30 17:49:20 +08:00
tianma-if 1769907288 refactor(settings): polish AI model services card copy and update e2e spec 2026-09-30 12:36:39 +08:00
tianma-if 0c5ce83dad fix: keep release checks green for the note CSS preview and undo test
ParentNode.append is the Workers stream helper under the root typecheck, so the preview attaches DOM nodes with appendChild. The sync queue test restores navigator after forcing onLine, so a later headless TipTap test can still read userAgent.
2026-09-30 02:03:20 +08:00
tianma-if fe90dfa9af fix(web): put the agent source ahead of model settings
Rename the settings tab to 模型与代理 and point model setup copy at that tab. The built-in assistant uses the model configured below.
2026-09-30 00:00:27 +08:00
tianma-if 50bda545a2 fix(web): mark a shared note with a pale gray share button
The header share icon only shifted between two grays, so an active public link was hard to see.
2026-09-29 00:12:57 +08:00
tianma-if 628016729e fix(web): confirm hidden platform copy with an ink toast
The clipboard notice was brand green, then a white card that disappeared on the note. Use a near-black success toast, and show it after copying for WeChat, WordPress, and Substack now that the action sits in the more menu.
2026-09-28 00:23:14 +08:00
tianma-if 594658ccad fix(editor): group consecutive Markdown images into a gallery
A tweet clip with several photos now opens as one gallery, while a single image stays on its own.
2026-09-27 11:16:27 +08:00
tianma-if 1ec4bfc06f fix(editor): use the small image size for Markdown pictures
Tweet clips and other Markdown images had no stored width, so the editor showed them at the large preset. Missing widths now follow the same 35% size used when inserting a picture.
2026-09-27 11:10:07 +08:00
tianma-if aaf3dacfb6 fix(mobile): keep in-note search on one row
The search field, match count, and previous, next, and close controls sit on a single bar.
2026-09-26 18:26:11 +08:00
tianma-if 509d523f00 Merge pull request #435 from sivdead/fix/dev-assets-directory
Create missing Wrangler assets directories before development startup. Add regression coverage for creation before CLI invocation, preservation of existing assets, and non-dev command behavior.

Validation: typecheck, typecheck:mobile, build:web, and all 2244 non-E2E tests passed.
2026-09-26 11:57:51 +08:00
tianma-if d577ed7413 test(web): align chrome assertions with the current workspace 2026-09-26 01:10:52 +08:00
sivdeadandClaude Opus 5.5 25e4a91739 fix(dev): create the Wrangler assets directory before wrangler dev
Wrangler refuses to start `dev` when the configured `[assets].directory`
is missing and offers no option to create it. Local development serves
the web app from Vite, so `apps/web/dist` only exists after a previous
`build:web`; a fresh clone or `git clean` made `bun run dev` fail.

Resolve the directory from the effective Wrangler config (so custom
configs via WRANGLER_CONFIG are honored) and create it for every `dev`
command routed through run-wrangler. Deploy and migration commands are
unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 11:15:28 +08:00