- 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>
* feat(cli): deep integration with desktop client
- Package CLI binary with desktop app via extraResource in Electron Forge
- Sync desktop login session to ~/.folo/config.json automatically on login/logout
- Add CliService IPC with install/uninstall methods supporting macOS (osascript), Linux (pkexec), Windows (.cmd wrapper)
- Add CLI settings tab in desktop app for install status and management
- Create prepare-cli build script to compile and bundle CLI before packaging
- Add i18n strings for CLI UI (English and Chinese)
The CLI now shares the desktop app's authentication session without requiring separate login.
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
* fix(cli): fix CI failures in auth service and forge config
- Pass `undefined` explicitly to syncSessionToCliConfig() to satisfy TS arity check
- Make resources/cli conditional in extraResource so packaging doesn't fail when CLI bundle is absent
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(cli): make syncSessionToCliConfig token param optional
Avoids TS2554 when called without arguments on signOut, while also
satisfying the lint rule that strips explicit `undefined` arguments.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* fix(cli): address PR review feedback
- Fix $@ shell expansion in privileged install path by writing to a
temp file first, then using admin cp (Comment #1)
- Check .cmd extension on Windows for install status and uninstall
guard so the CLI is correctly detected and removed (Comment #2)
- Wire prepare:cli into build:electron-vite instead of build:electron
so all CI packaging paths (vite + forge) include CLI (Comment #3)
- Add CLI i18n strings for ja, fr-FR, zh-TW locales (Comment #4)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
* fix(mobile): complete full mobile audit improvements
* chore: remove mobile audit planning artifacts
* fix(mobile): stabilize editable row keys in settings actions
* chore: Update Japanese translations for new features and errors
Added and updated multiple Japanese locale strings across AI, app, errors, external, settings, and shortcuts modules. Changes include new labels, descriptions, error messages, and UI text for features such as scheduling, token usage, inbox management, toolbar customization, and quick search.
* Add Japanese README documentation
Introduces README-ja.md with comprehensive information about Folo, including features, installation instructions, community links, contribution guidelines, code signing policies, and license details for Japanese-speaking users.
* Update formatting in Japanese README
Corrected the admonition marker from '[!重要]' to '[!IMPORTANT]' for consistency and made minor formatting adjustments in the README-ja.md file.
* Update community section in Japanese README
Revised wording and formatting in the community participation section of README-ja.md for improved clarity and consistency.
* Remove Japanese README file
Deleted README-ja.md to reduce duplication or outdated documentation. All relevant information should now be referenced from the main README or other documentation files.
* feat: add French (fr-FR) localization
* fix: sort imports in default-resource.ts to resolve lint error
* feat: add missing French translations for mobile/default, native, and external locales
* feat: add French language filter to discovery/recommended feeds
* docs: update changelog for French localization
* feat(i18n): merge PR #4597/#4774 and finish localization audit
---------
Co-authored-by: dai <dosada@gmail.com>
Co-authored-by: Anthony Mahé <snpepito@gmail.com>
Co-authored-by: Anthony Mahé <104373430+AnthonyMahe@users.noreply.github.com>
Remove the checkNew query and related state management that periodically checked for new entries in the timeline. The hasUpdate state and related UI indication (refresh button highlighting) have been removed while preserving fetchedTime for mark-all-read filtering.
* refactor: remove entry tags support
* fix: remove remaining tags references from entry selectors
Follow-up to 9ea61dbfd - these files were missed in the entry tags removal.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
* feat: optimize Stripe subscription management UI
- Replace static billing portal link with dynamic Stripe Billing Portal Session API
- Allow canceled subscriptions to display status and expiration date
- Show subscription status indicator with color coding (green/blue/yellow)
- Move status info above manage button for better layout
- Update UI for both desktop and mobile platforms
- Add translations for subscription status messages
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
* fix: use authenticated API client for billing portal on mobile
Replace raw fetch with followClient.request() to properly inject
authentication cookie and required headers on React Native.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Haiku 4.5 <noreply@anthropic.com>
- Added a responsive select component to filter feeds by type (All, RSSHub).
- Implemented logic to count and display RSSHub feeds.
- Updated feed selection and sorting functionality to respect the selected filter.
- Enhanced localization files to include new filter labels in English, Japanese, Simplified Chinese, and Traditional Chinese.
Signed-off-by: Innei <tukon479@gmail.com>
- Introduced DiscoveryContent and UnifiedDiscoverForm components for better organization and functionality in the discover module.
- Updated existing components to remove unnecessary max-width constraints for improved responsiveness.
- Enhanced the Trending component with a view selector and improved layout handling.
- Updated localization files to include new tool descriptions and tips for user guidance.
Signed-off-by: Innei <tukon479@gmail.com>
- Updated layout and styling for the LoginModalContent component to improve visual hierarchy and user experience.
- Added new benefits and subtitles to the login interface, enhancing clarity for users.
- Introduced a quick start hint for new users and a demo view button for better engagement.
- Updated localization files for English, Japanese, Simplified Chinese, and Traditional Chinese to reflect new content.
Signed-off-by: Innei <tukon479@gmail.com>
- Added a segment control to allow users to toggle between viewing entries from the current feed or all feeds.
- Integrated translation support for the new segment labels in English, Japanese, Simplified Chinese, and Traditional Chinese.
- Updated the useEntryTagsQuery hook to enable fetching based on the selected feed scope.
Signed-off-by: Innei <tukon479@gmail.com>
- Bumped the version of '@folo-services/ai-tools' to 0.2.65 in pnpm-lock.yaml and pnpm-workspace.yaml.
- Refactored the TokenUsagePill component to improve structure and added localization support for token usage information.
- Introduced new model info and provider info sections for better user clarity.
Signed-off-by: Innei <tukon479@gmail.com>
- Introduced a new SelectedTextNode to handle selected text within the AI chat editor.
- Added a TextSelectionToolbar for user interaction with selected text, including copy and AI query options.
- Updated the editor plugins to include the SelectedTextPlugin for managing selected text insertion.
- Enhanced text selection event handling to capture and process selected text with associated metadata.
- Refactored related components and styles for improved user experience and integration.
Signed-off-by: Innei <tukon479@gmail.com>
- Updated versions for '@follow-app/client-sdk' to 0.3.89 and '@folo-services/ai-tools' to 0.2.61 in pnpm-lock.yaml and pnpm-workspace.yaml.
- Introduced ManageMemoryCard component for managing user memory in AI chat.
- Enhanced AIMessageParts to include ManageMemoryCard and updated related translations for memory actions.
Signed-off-by: Innei <tukon479@gmail.com>
* feat: implement BYOK (Bring Your Own Key) feature for AI providers
- Added BYOK section in AI settings to manage custom API keys.
- Introduced components for adding, editing, and deleting BYOK providers.
- Updated translations for BYOK-related UI elements.
- Modified existing components to support new BYOK functionality.
Signed-off-by: Innei <tukon479@gmail.com>
* feat: enhance BYOK provider support and update UI elements
- Added support for the "OpenRouter" BYOK provider in relevant components.
- Updated translations for security-related UI elements to reflect new descriptions.
- Adjusted styling in settings components for improved visual consistency.
Signed-off-by: Innei <tukon479@gmail.com>
* feat: refine BYOK provider management and enhance UI
- Introduced a new constants file for BYOK provider options.
- Updated the ByokProviderModalContent to filter available providers based on configured ones.
- Enhanced the ByokSection to manage provider addition and editing more effectively.
- Adjusted table styling in the PlanComparisonTable for improved readability.
- Added new translation keys for "AI Bring Your Own Key" in multiple languages.
Signed-off-by: Innei <tukon479@gmail.com>
---------
Signed-off-by: Innei <tukon479@gmail.com>
* feat(ai-onboarding): implement AI onboarding modal and related components
- Added AI onboarding modal with step-by-step guidance for new users.
- Introduced components for feed selection, import steps, and chat interface.
- Integrated animations and user interactions for a smoother onboarding experience.
- Updated localization files to support new onboarding dialog texts.
Signed-off-by: Innei <tukon479@gmail.com>
* feat(app-tip): enhance onboarding experience with next step functionality
- Added 'hasNextStep' prop to AppTip and AppTipDialog components to manage step navigation.
- Updated button actions to reflect the new step logic, allowing users to proceed or finish the onboarding.
- Introduced new localization strings for onboarding descriptions and actions in multiple languages.
- Added a button in the settings about tab to trigger the AI onboarding experience.
Signed-off-by: Innei <tukon479@gmail.com>
* refactor(app-tip): remove video placeholder and related constants for a cleaner onboarding experience
- Eliminated video placeholder text and associated constants from AppTipMediaPreview and constants.ts.
- Updated useAppTipController to remove media references, streamlining the onboarding steps.
- Revised localization strings to reflect the new onboarding narrative without video references.
Signed-off-by: Innei <tukon479@gmail.com>
* refactor(ai-onboarding): streamline onboarding flow and enhance UI components
- Removed the DiscoverImportStep and PreFinish components to simplify the onboarding process.
- Updated step management in the onboarding modal to focus on essential steps.
- Enhanced the AIChatPane and FeedsSelectionList components with improved layout and animations.
- Introduced new localization strings for empty feed selection scenarios.
- Updated modal transitions for a smoother user experience.
Signed-off-by: Innei <tukon479@gmail.com>
* feat(app-tip): enhance media preview component to support image and video types
- Added support for distinguishing between video and image media types in AppTipMediaPreview.
- Updated rendering logic to conditionally display video or image elements based on media type.
- Introduced a fallback icon for error handling based on media type.
- Enhanced state management for video playback and replay functionality.
Signed-off-by: Innei <tukon479@gmail.com>
* feat(renderer): add support for Markdown rendering in ArticleLayout
- Introduced EntryContentMarkdownRenderer for handling Markdown content.
- Updated ArticleLayout to conditionally render HTML or Markdown based on entry type.
- Refactored EntryContentHTMLRenderer to use a shared props type for better type safety.
- Added types for entry content renderer props to improve code clarity.
This enhancement allows for more flexible content rendering in the application.
Signed-off-by: Innei <tukon479@gmail.com>
* feat(entry-actions): integrate onboarding entry checks into action configurations
- Added `isOnboardingEntryUrl` utility to identify onboarding entries based on their URL.
- Updated `useEntryActions` to disable specific actions when the entry is an onboarding entry.
- Enhanced `MoreActions` and `HeaderActions` components to support the disabled state for actions based on onboarding status.
- Refactored `ArticleLayout` to utilize the new onboarding entry check for rendering logic.
This update improves user experience by preventing certain actions on onboarding entries.
Signed-off-by: Innei <tukon479@gmail.com>
* feat(app-tip): enhance onboarding experience with new user guide state management
- Introduced `useNewUserGuideState` for managing the state of the new user onboarding guide.
- Added `APP_TIP_DISMISS_EVENT` constant for handling dismissal events.
- Refactored `useAppTipController` to utilize the new state management, improving clarity and functionality.
- Updated `EntryColumnContent` to integrate new user guide navigation logic.
This update streamlines the onboarding process and enhances user experience by providing better state management for onboarding tips.
Signed-off-by: Innei <tukon479@gmail.com>
* feat(app-tip): enhance media rendering in AppTipDialog and introduce OpmlAbstractGraphic
- Updated AppTipDialog to conditionally render a custom React node for media previews.
- Added reactNode property to AppTipStepMedia type for improved media handling.
- Introduced OpmlAbstractGraphic component for enhanced visual representation in onboarding tips.
- Updated useAppTipController to utilize the new OpmlAbstractGraphic in onboarding media.
These changes improve the onboarding experience by providing more dynamic media content.
Signed-off-by: Innei <tukon479@gmail.com>
* feat(OpmlAbstractGraphic): implement animated paths and dynamic rendering
- Added a new OpmlAbstractGraphic component to visually represent RSS readers with animated paths.
- Introduced deterministic pseudo-random path generation for smoother animations.
- Enhanced component responsiveness with layout effects and resize handling.
- Implemented hand-drawn style connector lines to improve visual appeal.
These changes enhance the onboarding experience by providing a more engaging and dynamic visual representation of RSS readers.
Signed-off-by: Innei <tukon479@gmail.com>
* feat(app-tip): add extra content support in AppTipDialog and enhance useAppTipController
- Updated AppTipDialog to render additional content through the new `extra` property in AppTipStep.
- Modified AppTipStep type to include an optional `extra` field for custom React nodes.
- Introduced AiSplineIndicatorToggle component in useAppTipController for toggling AI settings.
These changes improve the flexibility of the AppTipDialog and enhance the onboarding experience by allowing for dynamic content rendering.
Signed-off-by: Innei <tukon479@gmail.com>
* feat(app-tip): implement useAppTipController for enhanced onboarding experience
- Introduced useAppTipController to manage the onboarding flow and user guide interactions.
- Added state management for active steps, dismissal handling, and AI guide toggling.
- Integrated AiSplineIndicatorToggle for dynamic AI settings within the onboarding process.
- Enhanced event handling for debugging onboarding steps through custom events.
These changes improve the onboarding experience by providing a structured and interactive guide for new users.
Signed-off-by: Innei <tukon479@gmail.com>
* feat(app-tip): introduce AICopilotMedia component for enhanced AI interaction
- Added AICopilotMedia component to facilitate dynamic AI-driven conversations and recommendations.
- Integrated chat script for user-assistant interactions, showcasing AI capabilities in real-time.
- Updated useAppTipController to include AICopilotMedia in the onboarding flow, enhancing user engagement.
These changes improve the onboarding experience by providing interactive AI content that guides users through relevant information and resources.
Signed-off-by: Innei <tukon479@gmail.com>
* fix: update hoverMarkUnread setting to false for consistency
* feat: implement onboarding feed and entry detection
- Added utility functions to identify onboarding feeds and entries.
- Updated various components to display onboarding feeds distinctly.
- Enhanced sorting logic to prioritize onboarding feeds in lists.
- Added localization strings for onboarding feed messages.
Signed-off-by: Innei <tukon479@gmail.com>
* feat: add OverviewMedia component for enhanced onboarding visuals
- Introduced a new OverviewMedia component to display animated connections between onboarding elements.
- Integrated OverviewMedia into the app tip controller to enrich the new user dialog experience.
- Implemented responsive path calculations and animations for a dynamic visual presentation.
Signed-off-by: Innei <tukon479@gmail.com>
---------
Signed-off-by: Innei <tukon479@gmail.com>
Co-authored-by: DIYgod <i@diygod.me>
- Introduced a new NotLoggedInNotice component to prompt users to log in for syncing subscriptions.
- Updated English, Japanese, and Chinese localization files to include the new notice message.
- Removed commented-out code related to data prefetching in SubscriptionList component for cleaner code.
Signed-off-by: Innei <tukon479@gmail.com>
- Replaced the warning icon with a sad face emoji for better visual representation.
- Removed unnecessary commented-out code in the subscription limit warning.
- Cleaned up the localization message by removing the emoji from the string.
Signed-off-by: Innei <tukon479@gmail.com>
- Updated the subscription limit warning to use the Trans component for better localization support.
- Modified the warning message in the localization file to include HTML elements for improved readability.
Signed-off-by: Innei <tukon479@gmail.com>
- Introduced CategoryUnsubscribeDialogContent for unsubscribing from feeds within a category.
- Added RenameCategoryForm for renaming categories.
- Updated FeedCategory to include options for unsubscribing and renaming categories in the context menu.
- Enhanced localization files to support new dialog messages for unsubscribe and rename actions.
Signed-off-by: Innei <tukon479@gmail.com>