Commit Graph

1386 Commits

Author SHA1 Message Date
DIYgod dd2c933936 chore(ci): format integration URL scheme test 2026-07-28 13:52:45 +08:00
Sebastion bd91b015ee
fix(desktop/ipc): allowlist URL scheme protocols in openURLScheme (#5056)
The 'integration.openURLScheme' IPC method invokes 'shell.openExternal'
with a renderer-supplied string after only checking that it contains
'://'. Electron's documentation explicitly warns that passing untrusted
URLs to 'shell.openExternal' is unsafe: schemes such as 'file://',
'smb://', 'ms-msdt:', 'search-ms:', 'jar:', 'res:', 'javascript:',
'data:' and 'vbscript:' have well-known abuse chains (local file
disclosure, NTLM credential theft over SMB on Windows, MSDT/Follina-style
RCE, etc.). Because the renderer process can also reach this IPC via any
XSS sink in untrusted RSS feed content, the previous validation was not
sufficient.

Replace the substring check with strict URL parsing plus an allowlist of
protocols that match the integration use-cases documented in the UI
(Obsidian, Bear, Drafts, Things, Notion, DEVONthink) plus generic
http/https/mailto. All other protocols are rejected with a clear error.

Adds vitest cases for representative dangerous schemes (verifying that
'shell.openExternal' is never invoked) and for every scheme shipped as a
built-in example, so future regressions on either side are caught.
2026-07-28 13:40:13 +08:00
DIYgod 52f587dacb fix(desktop): dismiss share popover after actions 2026-07-25 20:23:44 +08:00
DIYgod 3d65478fb6 fix(subscription): recover past-due Stripe checkout 2026-07-25 20:22:55 +08:00
DIYgod 22c8a667e6 fix(desktop): restore category chevron rotation 2026-07-25 20:18:50 +08:00
Tony c3e1c26194
fix(desktop): set referrerpolicy on youtube embed iframes (#5039) 2026-07-12 18:07:09 +08:00
DIYgod 1158281f59
chore(deps): update frontend dependencies (#5038)
* chore(deps): update frontend dependencies

* fix(ci): format OTA verification commands
2026-07-10 22:36:12 +08:00
DIYgod 72e289bb3e fix(tracker): sample PostHog events at five percent 2026-07-03 16:46:26 +08:00
DIYgod 43fb8f23a7 fix(desktop): avoid idle Spline AI indicator render 2026-06-22 11:38:31 +08:00
DIYgod 84f692ad35 fix(desktop): keep reading mode content when translated
Refs RSSNext/Folo#5023.
2026-06-22 10:43:34 +08:00
DIYgod 4ab06f42b4 fix(desktop): stabilize streaming tts scheduling 2026-06-22 10:41:54 +08:00
Tony c98f572cf8
fix: dedupe code blocks with nested line divs
fix: dedupe code blocks with nested line divs
2026-06-05 19:44:07 +08:00
DIYgod 73870a8170 fix(desktop): reset social timeline on view change 2026-06-05 11:42:37 +08:00
DIYgod 31c10ea635 fix(desktop): hide empty recent reader spacer 2026-06-02 10:38:16 +08:00
DIYgod 2ed4ac546b fix(timeline): guard mark read during scroll reset 2026-06-02 10:04:30 +08:00
DIYgod fe1fcff315 fix(timeline): scroll to top before refresh 2026-06-01 10:43:23 +08:00
DIYgod df8b8d0670 fix(actions): stabilize rule editor state 2026-05-29 14:00:19 +08:00
DIYgod 69202876ed fix(collection): paginate starred entries by collection time 2026-05-29 11:56:26 +08:00
DIYgod dc43e39711 fix: retry scroll mark-read after revisiting entries 2026-05-26 20:29:52 +08:00
DIYgod a52ff66fb3 fix(desktop): clear stale web context menu 2026-05-26 14:31:53 +08:00
DIYgod 07cbf35de7 fix: batch scroll mark-read requests 2026-05-26 11:55:09 +08:00
DIYgod 27b30e0d47 fix(desktop): pause scroll read on timeline changes 2026-05-22 14:15:49 +08:00
DIYgod 8557b9f158 fix(desktop): scroll timeline to top before refresh 2026-05-21 14:31:56 +08:00
DIYgod 431ab0e0be fix(desktop): preserve native image context menu 2026-05-14 18:55:17 +08:00
DIYgod 444f8e05a5 fix(desktop): prevent duplicate timeline page requests 2026-05-14 15:51:32 +08:00
DIYgod 9bfcfc805b fix(desktop): sanitize Obsidian file path separators 2026-05-14 14:45:50 +08:00
DIYgod a48123476d fix(desktop): improve Obsidian integration metadata 2026-05-14 13:58:30 +08:00
DIYgod 13cc719377 fix(desktop): add Eagle image context menu 2026-05-12 17:14:30 +08:00
DIYgod 4be035d37e fix(desktop): keep tray instance when refreshing menu 2026-05-12 16:43:44 +08:00
DIYgod 98fcb71734 fix(desktop): persist auth cookies with max age 2026-05-12 16:12:34 +08:00
DIYgod 425e8610a3 fix: stabilize scroll mark-read footer boundary 2026-05-07 21:55:30 +08:00
DIYgod 2fa23362c3 fix: allow final entries to scroll past 2026-05-07 21:05:59 +08:00
DIYgod 43186b7ffb fix(desktop): delay feed error indicator 2026-05-01 19:08:29 +08:00
DIYgod 8f56a51b93 fix(desktop): remove connection status indicator 2026-04-30 14:27:39 +08:00
DIYgod 963f3af397 fix(desktop): update desktop download link 2026-04-30 14:25:48 +08:00
DIYgod e1daec3013 feat(power): restrict power usage to wallet 2026-04-30 14:23:23 +08:00
DIYgod 88ad11a2ae fix(desktop): dedupe auth session cookies 2026-04-26 09:57:42 +08:00
DIYgod 18e7f76d61 fix(auth): refresh session cookies on clients 2026-04-24 20:37:32 +08:00
Kieran Cui 1ade942ea8
fix: enter and return via the "discover" route (#4984) 2026-04-24 19:07:16 +08:00
DIYgod d3aa46e358 fix: extend API request timeout 2026-04-24 12:51:05 +08:00
DIYgod 5aba30eb4f fix(desktop): derive MAS review state from OTA versions 2026-04-15 15:57:51 +08:00
DIYgod acfb054bdc fix(desktop): ignore stale cached renderer bundles 2026-04-15 10:10:00 +08:00
DIYgod bfbce383a2
release(desktop): Release v1.6.0 (#4970)
* docs(mobile): prepare release changelog

* release(mobile): release v0.4.1

* fix(ssr): route dist-external assets (#4956)

* fix(cli): close login callback sockets (#4957)

* fix(ci): sync release branches to dev via pull request

* fix(mobile): increase ai summary font size

* fix(desktop): improve pdf export layout and branding

* fix(mobile): refresh social login state

* fix: correct French translation language detection

* build(deps): bump android-actions/setup-android from 3 to 4 (#4929)

Bumps [android-actions/setup-android](https://github.com/android-actions/setup-android) from 3 to 4.
- [Release notes](https://github.com/android-actions/setup-android/releases)
- [Commits](https://github.com/android-actions/setup-android/compare/v3...v4)

---
updated-dependencies:
- dependency-name: android-actions/setup-android
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(ai-chat): show reset date for future credits

* feat: refine spotlight settings and highlighting

* feat: add spotlight settings across desktop and mobile

* build(deps): bump actions/github-script from 8 to 9 (#4961)

Bumps [actions/github-script](https://github.com/actions/github-script) from 8 to 9.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v8...v9)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: '9'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump signpath/github-action-submit-signing-request (#4960)

Bumps [signpath/github-action-submit-signing-request](https://github.com/signpath/github-action-submit-signing-request) from 2.0 to 2.1.
- [Release notes](https://github.com/signpath/github-action-submit-signing-request/releases)
- [Commits](https://github.com/signpath/github-action-submit-signing-request/compare/v2.0...v2.1)

---
updated-dependencies:
- dependency-name: signpath/github-action-submit-signing-request
  dependency-version: '2.1'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(mobile): avoid YouTube embed error on iOS close #4958

* fix(mobile): patch fmt for Xcode 26.4 builds

* build(deps): bump pnpm/action-setup from 4 to 5 (#4922)

Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 4 to 5.
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](https://github.com/pnpm/action-setup/compare/v4...v5)

---
updated-dependencies:
- dependency-name: pnpm/action-setup
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* feat(desktop): migrate tts to folo service

* docs(ota): add OTA service design spec

* feat(ota): scaffold Cloudflare worker app

* fix(ota): align scaffold with task spec

* fix(ota): use standard worker types

* fix(ota): tighten scaffold schema and dev config

* fix(ota): require at least one platform

* fix(ota): use dev env for local wrangler

* docs(ota): add implementation plan and release scoping

* chore(ota): update lockfile for worker deps

* feat(ota): add release selection primitives

* test(ota): cover incompatible newer release selection

* fix(ota): tighten release compatibility checks

* fix(ota): reject empty platform payloads

* feat(ota): add kv helpers and policy logic

* fix(ota): enforce min binary store policy

* feat(ota): fetch OTA releases from GitHub

* fix(ota): return GitHub release etags

* feat(ota): mirror release payloads into R2

* fix(ota): stream mirrored archive extraction

* fix(ota): verify mirrored asset hashes

* feat(ota): serve manifests assets and policy

* fix(ota): harden manifest and policy routes

* fix(ota): validate route semver inputs

* fix(ota): verify manifest pointer version

* feat(ota): add sync orchestration routes

* fix(ota): dedupe concurrent sync passes

* feat(mobile): enable OTA background updates

* fix(mobile): restore OTA provider typecheck

* feat(mobile): add streaming tts playback

* fix(mobile): align OTA provider state

* feat(mobile): add ota policy client and debug controls

* fix(mobile): harden ota policy and debug controls

* test(mobile): cover ota provider helpers

* ci(desktop): automate Mac App Store pkg upload

* feat(ota): generate release assets from mobile export

* test(mobile): fix ota provider test typing

* test(mobile): discover ota script test via explicit config

* fix: tighten OTA release asset metadata handling

* fix: require OTA platform asset arrays

* ci(ota): publish releases and trigger sync

* fix(ci): harden ota publish workflow

* ci(ota): tighten trailer validation

* docs(ota): add rollout and rollback runbook

* feat(mobile): upgrade expo sdk 55 and rnfirebase

* fix(ota): emit expo-compatible update identifiers

* fix(ota): support private GitHub release assets

* fix(mobile): unblock ios archive on expo sdk 55

* build(deps): bump pnpm/action-setup from 5 to 6 (#4962)

Bumps [pnpm/action-setup](https://github.com/pnpm/action-setup) from 5 to 6.
- [Release notes](https://github.com/pnpm/action-setup/releases)
- [Commits](https://github.com/pnpm/action-setup/compare/v5...v6)

---
updated-dependencies:
- dependency-name: pnpm/action-setup
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix(ci): restore ota typing and tailwind config compatibility

* test(mobile): fix ota provider test typing

* chore(ota): persist production cloudflare bindings

* fix(ci): restore semver types and ota test mocks

* feat(release): drive mobile release mode from config files

* fix(ota): sign manifests and pin runtime version

* fix(ci): disable frozen lockfile for local eas builds

* docs(spec): add desktop ota unification design

* feat(ota): unify desktop updates with ota service

* fix(ota): harden desktop sync and updater flow

* docs(skill): update desktop release workflow

* fix(release): repair ota and desktop update flows

* feat: cache storefront versions for ota policy

* feat: expose ota version badges

* feat: expose ota version badges

* fix: backfill github version badges

* fix: backfill github version badges

* docs(skills): align release modes with implementation

* fix: update Discord invite link in README.md

* fix: update macOS and Windows app store links in README.md

* fix: update GitHub badge labels in README.md

* build(deps): bump actions/download-artifact from 5 to 8 (#4969)

Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5 to 8.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v5...v8)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* build(deps): bump softprops/action-gh-release from 2 to 3 (#4968)

Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2 to 3.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2...v3)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* docs(release): prepare desktop and mobile release metadata

* release(desktop): release v1.6.0

* fix(desktop): restore spotlight settings sync

* fix(desktop): apply spotlight highlights in entry rendering

* fix(desktop): extend spotlight highlight coverage

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-14 12:49:15 +08:00
Cocoon-Break b469f07029
fix: use >= for hour-format threshold in PlayerProgress (Closes #4965) (#4966)
Signed-off-by: Cocoon-Break <54054995+kuishou68@users.noreply.github.com>
2026-04-13 15:13:37 +08:00
DIYgod aea74f80a7 chore(sync): merge main into dev
# Conflicts:
#	apps/desktop/layer/renderer/src/modules/settings/tabs/integration/index.tsx
2026-04-03 13:28:15 +08:00
DIYgod 421d50fca8 fix(desktop): restore integration typecheck 2026-04-03 13:15:59 +08:00
wait 20cc43cf16 fix: resolve Obsidian EPERM on macOS by using native folder picker (#4242) (#4924)
- Replace text input with native dialog.showOpenDialog for vault path selection
- Add path validity detection with three-state UI (unselected/valid/invalid)
- Fix YAML frontmatter parsing failure with Chinese/special characters
- Fix ENOENT error when vault subdirectory doesn't exist
- Add AI summary (description) to Obsidian frontmatter export
- Add author fallback to feed title when entry author is empty
- Increase filename truncation limit from 20 to 80 characters for CJK titles

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-03 12:41:59 +08:00
DIYgod b7ccf7b872 fix(desktop): repair auth and cli sync 2026-04-03 12:38:01 +08:00
DIYgod 4cb761a501 fix(desktop): persist two-factor challenge cookies 2026-04-03 11:24:49 +08:00
DIYgod 43b5052b06 fix(desktop): persist session token after 2fa 2026-04-02 22:19:36 +08:00