Commit Graph
67 Commits
Author SHA1 Message Date
sivdead 156cd5c574 fix(extension): remove broken Substack image link wrappers 2026-10-19 12:50:50 +08:00
LuoQianhong 545e1ce41d chore(extension): prepare Web Clipper 0.2.0 for store submission (#615) 2026-10-18 17:45:59 +08:00
LuoQianhong 3cc42871e0 fix(extension): 修复 #612 即刻切帖时正文与来源链接错配 (#614)
* fix(extension): prevent Jike post content and source mismatches

* fix(extension): normalize existing mention prefixes on Jike mobile
2026-10-18 15:10:58 +08:00
LuoQianhong 6c4e70262e fix(extension): 完成 #588 跨浏览器与登录态实站验收 (#611)
* fix(extension): correct cross-browser clipping and record live acceptance

* fix(extension): use string prefix check for Jike image URLs
2026-10-18 12:09:07 +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
Dariusz Koryto bec688b91a ci: add oxlint correctness check and resolve its findings (#592)
* refactor: resolve oxlint correctness findings without behavior changes

- Snapshot iterations that mutate their collection with Array.from()
  instead of a spread (live childNodes, self-removing disposers, a Set
  extended inside its own loop).
- Drop empty spread fallbacks, redundant regex escapes, Boolean() casts
  inside negations, a rethrow-only try/catch and statement ternaries.
- Use startsWith/endsWith for anchored literal checks in the extension.
- List U+FE0F explicitly in the mobile attachment emoji class; the
  matched set is unchanged.
- Fix the WeChat copy fixture, where \oint in a template literal lost its
  backslash and the block formula never exercised \oint.
- Document the intentional control-character regexes (filename
  sanitizing and input validation), the throwing provider stream test,
  Astro's generated type reference and the mobile auto-sync finally
  block with narrow inline exceptions.

* ci: run oxlint correctness rules on pull requests

Pin oxlint 1.88.0 and enable only its correctness category across apps/
and packages/, excluding build output, vendored code and the iOS app.
Findings are errors and the script passes --deny-warnings, so CI fails
on any finding. no-unused-vars stays off until unused code is removed
in a dedicated pass.
2026-10-16 21:57:36 +08:00
LuoQianhong 1bb9580007 feat(extension): expand vertical and article platform clipping (#578) 2026-10-15 21:39:41 +08:00
tianma-if 588a23553b fix(extension): verify review source archives before store submission 2026-10-12 23:51:05 +08:00
tianma-if c6bc788dec style(extension): use status colors only for notification icons 2026-10-12 23:36:54 +08:00
tianma-if ab6353f44d refactor(extension): adopt shadcn Sonner component structure 2026-10-12 23:29:47 +08:00
tianma-if 143873b18a style(extension): align clipper colors with the main UI 2026-10-12 23:15:21 +08:00
tianma-if 76596f79e7 refactor(extension): migrate clipper UI to React and Tailwind 2026-10-12 23:10:46 +08:00
tianma-if e4ede1dcd4 fix: upgrade XML and Firefox ZIP dependency chains 2026-10-12 13:13:25 +08:00
tianma-if 67c78b370d ci: submit web clipper asynchronously after stable releases 2026-10-12 11:33:10 +08:00
tianma-if e8c35e0556 test(extension): persist timezone subprocess results 2026-10-11 23:41:32 +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 30762ff8ea test(extension): isolate esbuild from Bun test runner 2026-10-09 22:11:58 +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 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 93b97b6bd5 test(extension): run notebook clip id checks with the extension tests 2026-10-07 16:36:48 +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
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
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 2b519bfc96 test(extension): run capture bundle check in isolated Vite process 2026-10-04 18:35:36 +08:00
tianma-if c32789ee30 chore(extension): bump Web Clipper to 0.1.16
Refs #464
2026-10-04 17:10:35 +08:00
tianma-if 312c4a027b fix(extension): bundle page capture as classic script
Refs #464
2026-10-04 17:07:46 +08:00
tianma-if dbe76323f7 chore(extension): bump Web Clipper to 0.1.15 2026-10-03 20:53:34 +08:00
tianma-if dce5e2bc40 fix(extension): request Firefox host permission during popup click
Preload popup settings before enabling the clip button so the permission request remains in the user action handler. Add a regression test for the request timing.
2026-10-03 20:46:51 +08:00
tianma-if d726122d22 feat(extension): save Reddit posts from context menu 2026-10-03 09:06:34 +08:00
tianma-if 46f0d7de17 chore(extension): replace verbose intro texts with supported platforms and clean settings header 2026-10-03 08:55:47 +08:00
tianma-if e8a982903b chore(extension): refine context menu copy and listing descriptions 2026-10-03 00:20:09 +08:00
tianma-if 7008f369a5 refactor(extension): shorten Xiaohongshu clip menu text 2026-10-02 23:56:56 +08:00
tianma-if 8f08c89c1b fix(extension): stabilize clip menus and clarify Zhihu notes 2026-10-02 23:44:45 +08:00
tianma-if f4cef46855 docs(extension): tighten Chrome Web Store permission disclosures for 0.1.9 2026-10-02 10:07:55 +08:00
tianma-if c58fe81a13 feat(extension): add a manual Web Clipper store submission workflow
Chrome and Firefox uploads were done by hand. Submit Web Clipper now packages the extension and sends it for review without joining the product release.
2026-10-02 00:29:10 +08:00
tianma-if b37a72ac99 feat(extension): save a right-clicked Zhihu answer or article as a note
Right-click the text of a Zhihu answer or article to store the title, author, body, and photos as one web-clip note.
2026-10-01 22:02:18 +08:00
tianma-if 97b1defef2 feat(extension): save a Xiaohongshu note from the context menu
Right-click the note text on Xiaohongshu to store the title, body, author, and photos as one web-clip note.
2026-10-01 20:56:36 +08:00
tianma-if e8e982e1bb feat(extension): save a GitHub repository as a note
Right-click a repository home or code tree to save the address, the About text, and the homepage, language, license, and topics when the page shows them. Issue, file, and discussion pages are left unsaved.
2026-10-01 20:53:25 +08:00
tianma-if 37640cfe40 chore(extension): prepare web clipper 0.1.8 store listings
Record a Google Search image as the search and its keyword in the store copy, and point the package at 0.1.8.
2026-09-28 16:00:08 +08:00
tianma-if 8d70820d8d feat(extension): record Google image saves as the search and keyword
A right-clicked image from Google Search now stores the search and its keyword instead of the long results URL.
2026-09-28 15:53:12 +08:00
tianma-if e825872bdc fix(extension): save a clipped image in the first note version
Create the note and its picture together, and keep a Google image search source down to the query instead of the full tracking URL.
2026-09-27 13:15:04 +08:00
tianma-if c45c845756 chore(extension): prepare web clipper 0.1.7 store listings
Bump the clipper to 0.1.7 and describe selection save, full X posts, and top-level context menus.
2026-09-27 10:41:03 +08:00
tianma-if 7ed8f11f05 fix(extension): keep clip commands on the top-level menu
Show only one EdgeEver action for each right-click so Chrome and Firefox do not fold them into a submenu.
2026-09-27 10:33:28 +08:00
tianma-if 26ebc3304a feat(extension): save selected text from the context menu
Right-click a passage on a page to store that text as a new note, with the source link and without the rest of the page.
2026-09-27 10:16:54 +08:00
tianma-if 59b6ee2c71 fix(extension): save the full text of a folded X post
Expand Show more before reading a timeline post, and read quote authors from the visible name block.
2026-09-27 10:02:39 +08:00
tianma-if b2b661b3a7 fix: use appendChild so DOM nodes pass the root typecheck
Cloudflare workers-types Element.append expects a response body, so ParentNode.append fails tsc for the phone image style and the clipper toast.
2026-09-26 22:11:56 +08:00