1557 Commits

Author SHA1 Message Date
MohamedBassem
a2203196ff fix(mobile): fix default address not correctly stored in settings 2025-11-08 18:20:22 +00:00
Mohamed Bassem
ec621bf55a feat(mobile): add custom headers configuration in sign-in screen (#2103)
* feat(mobile): add custom headers configuration in sign-in screen

Add ability for mobile app users to configure custom HTTP headers that are
sent with every API request. This enables users to add authentication headers,
proxy headers, or other custom headers required by their server setup.

Changes:
- Add customHeaders field to mobile app settings schema
- Create CustomHeadersModal component for managing headers
- Update sign-in screen with link to configure custom headers
- Modify tRPC provider to merge custom headers with Authorization header

The custom headers are stored securely in the app settings and persist
across sessions.

* fix keyboard

* add custom headers to other callsites

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-08 18:04:46 +00:00
Mohamed Bassem
27ed0a198f tests: Fix failing test 2025-11-08 16:58:00 +00:00
Mohamed Bassem
474f64293e feat: Add what's new modal in the sidebar (#2099)
* Refactor sidebar release modal to use React Query

* fixes

* fix manual server override
2025-11-08 16:05:46 +00:00
Mohamed Bassem
31960fcd11 feat: Add support for user uploaded files (#2100)
* feat: add user file upload support for bookmarks

Add a new "user-uploaded" asset type that allows users to upload and
attach their own files to bookmarks from the attachment box in the
bookmark preview page.

Changes:
- Add USER_UPLOADED asset type to database schema
- Add userUploaded to zAssetTypesSchema for type safety
- Update attachment permissions to allow attaching/detaching user files
- Add fileName field to asset schema for displaying custom filenames
- Add "Upload File" button in AttachmentBox component
- Display actual filename for user-uploaded files
- Allow any file type for user uploads (respects existing upload limits)
- Add Upload icon for user-uploaded files

Fixes #1863 related asset attachment improvements

* fix: ensure fileName is returned and remove edit button for user uploads

- Fix attachAsset mutation to fetch and return complete asset with fileName
  instead of just returning the input (which lacks fileName)
- Remove replace/edit button for user-uploaded files - users can only
  delete and re-upload instead
- This ensures the filename displays correctly in the UI immediately
  after upload

Fixes fileName propagation issue for user-uploaded assets

* fix asset file name

* remove filename from attach asset api

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-08 15:22:14 +00:00
Mohamed Bassem
99413db0e7 refactor: consolidate multiple karakeep plugins into one package (#2101)
* refactor: consolidate plugin packages into single plugins directory

- Create new `packages/plugins` directory with consolidated package.json
- Move queue-liteque, queue-restate, and search-meilisearch to subdirectories
- Update imports in packages/shared-server/src/plugins.ts
- Remove individual plugin package directories
- Update shared-server dependency to use @karakeep/plugins

This reduces overhead of maintaining multiple separate packages for plugins.

* refactor: consolidate plugin config files to root level

- Move .oxlintrc.json to packages/plugins root
- Move vitest.config.ts to packages/plugins root
- Update vitest config paths to work from root
- Remove individual config files from plugin subdirectories

This reduces configuration duplication across plugin subdirectories.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-08 14:50:00 +00:00
Mohamed Bassem
737b03172c fix: metascraper logo to go through proxy if one configured. fixes #1863 2025-11-03 02:08:10 +00:00
qixing-jk
f0b0959efe feat(extension): add tab bookmark badge indicator (#1745)
* feat: add tab bookmark count badge indicator

- implement getApiClient function to create and cache TRPC client
- add tab activation listener to check bookmark count
- display badge with count and appropriate color based on results
- handle errors by showing error indicator in badge

* feat: add show count badge setting to extension

- Add showCountBadge setting to settings schema and default values
- Implement toggle button in OptionsPage for count badge visibility
- Modify background script to respect showCountBadge setting
- Add logging for archive count check in background script

Closes #486

* feat(background): refactor tab badge update logic

- Extract badge setting logic into reusable `setBadge` function
- Create `getTabCount` function to fetch bookmark count and existence
- Implement `checkAndUpdateIcon` function to centralize icon update logic
- Add support for tab updates via `chrome.tabs.onUpdated` listener
- Improve error handling with consistent badge display

* feat(background): implement badge caching system

- Add badge cache initialization and periodic cleanup
- Implement cache get/set operations for badge status
- Update setBadge function to use cached values when available
- Modify badge display logic to check cache before making API calls

* feat(badgeCache): add debug logging for cache operations

- Add console logs to track cache initialization, purging, and operations
- Move debug log in checkAndUpdateIcon to better position

* feat: add badge refresh on bookmark creation and deletion

- implement message types for badge refresh communication
- update background script to handle REFRESH_BADGE messages
- modify SavePage to send message on successful bookmark creation
- modify BookmarkSavedPage to send message on successful deletion
- add clearBadgeStatusSWR utility function import and usage

* perf(badge-cache): decrease purge alarm interval

The badge cache purge alarm was previously set to run every 60
minutes. This change reduces the interval to 10 minutes to ensure
more frequent cache cleanup and better memory management.

* feat(background): clean up API client and badge cache on invalid settings

- add cleanupApiClient function to trpc utils
- modify checkSettingsState to handle async operations
- clear API client and badge status when settings are invalid
- update settings subscription to handle async operations

* feat: reset settings to include showCountBadge flag when logout

When deleting API key, ensure showCountBadge is also reset to false to
maintain consistent state in the options page configuration.

* refactor: use BOOKMARK_REFRESH_BADGE instead of separate created/deleted types

* perf(badgeCache): replace alarm-based purge with on-demand expiration check

- Remove periodic alarm system for cache purging
- Add lastPurgeTimestamp tracking for efficient cache maintenance
- Update manifest to remove unnecessary alarms permission
- Modify background script to use new on-demand purge mechanism
- Clean up related alarm listener and initialization code

* feat: Replace count badge button with toggle switch

- add new Switch component based on Radix UI
- update OptionsPage to use Switch for count badge setting

* feat: Add horizontal rule separator in options page

- Add `<hr />` element between sections for better visual separation
- Improve UI organization in the OptionsPage component

* feat(badgeCache): implement persistent last purge timestamp storage

- Replace in-memory timestamp with chrome.storage persistence
- Add getter/setter functions for last purge timestamp
- Update checkAndPurgeIfNeeded to use persistent storage

* refactor(badgeCache): Improve type safety and storage utilities

- Add BadgeCacheEntry and BadgeCacheStorage types
- Extract storage operations to dedicated utility functions
- Improve code organization and documentation
- Enhance type safety throughout badge cache operations

* feat(extension): add context menu options to clear cache

- introduce new context menu items for cache management
- add clear current site cache functionality
- add clear all cache functionality
- conditionally show cache menu items based on showCountBadge setting
- pass settings to context menu registration/removal functions

* feat(extension): add configurable badge cache expiration time

- introduce `badgeCacheExpireMs` setting with 1-hour default
- update settings schema and default values
- add input field in OptionsPage for cache time configuration
- modify badgeCache to use dynamic expiration time from settings
- improve cache logging for better debugging visibility

* Revert "feat: reset settings to include showCountBadge flag when logout"

This reverts commit cf071e9dd5.

# Conflicts:
#	apps/browser-extension/src/OptionsPage.tsx

* refactor(extension): extract badge cache expiration constant

Extract DEFAULT_BADGE_CACHE_EXPIRE_MS constant to central location in
settings.ts and reuse it across badgeCache.ts and OptionsPage.tsx. Remove
duplicate constant definitions and ensure consistent default value usage.

* refactor(extension): standardize showCountBadge default via shared constant

- introduce DEFAULT_SHOW_COUNT_BADGE in settings schema
- replace hardcoded defaults with constant in schema and OptionsPage
- maintain backward compatibility with existing boolean type

* feat(extension): simplify context menu removal logic

- remove redundant `settings` parameter from `removeContextMenus`
- replace selective menu removal with `chrome.contextMenus.removeAll()`
- update function call to match new signature

* refactor(extension): rename site-related cache terms to page for clarity

- update context menu title from "Clear Current Site Cache" to "Clear Current
  Page Cache"
- rename `clearCurrentSiteCache()` to `clearCurrentPageCache()`
- adjust related comments, logs, and docstrings for consistency

* refactor(extension): improve tab event handler parameter naming

- rename `activeInfo` to `tabActiveInfo` in `onActivated` listener
- rename `changeInfo` to `tabId` in `onUpdated` listener

* refactor(extension): add isHttpUrl utility and refactor server address validation

- introduce reusable `isHttpUrl` function in new `url.ts` utility module
- replace inline protocol check with utility call in NotConfiguredPage

* feat(extension): filter out non-HTTP URLs from badge count updates

- add `isHttpUrl` import and check in badge update validation
- skip badge updates for non-HTTP URLs to prevent invalid requests

* feat(extension): filter out non-HTTP URLs from bookmark creation

Add validation using isHttpUrl utility to ensure only HTTP/HTTPS
URLs are processed when creating bookmarks from current tab.

* chore: remove .ts extension from internal import statements

* feat(extension): validate and trim server address input in NotConfiguredPage

- use trimmed input for validation and state updates
- ensure consistent handling of trailing slashes in server address

* feat(extension): prevent non-HTTP(S) URL bookmark creation with validation

- Add URL validation in background script to filter out non-HTTP(S) URLs
  before creating link-type bookmarks, logging warnings for invalid URLs.

- Enhance SavePage component with explicit error messages for:
  - Missing tab URLs
  - Unsupported URL schemes (non-HTTP(S))

- Improve error display by rendering messages immediately when errors occur
  instead of waiting for status changes.

* feat(extension): clear existing context menus before registration

This ensures no duplicate menu items are created when the extension
reinitializes or settings are updated.

* feat(extension): display "+" suffix for default bookmarks per page count

Add logic to append "+" suffix when badge count matches
DEFAULT_NUM_BOOKMARKS_PER_PAGE to indicate potential overflow.

* fix(extension): ensure API client cleanup on settings state change

Clean up API client before handling settings state to prevent stale
connections when address or API key is missing.

* fix(extension): clear badge text when tab is invalid or incomplete

Ensure badge is reset when URL is non-HTTP or tab status is not complete.

* feat(extension): improve badge revalidation for stale cached data

- simplify badge setting from cached data
- add background revalidation for non-fresh cache
- ensure badge updates when stale cache is detected

* feat(extension): refresh active tab badges after cache clearance

Added logic to update badge icons for all active tabs when clearing
the badge status cache, ensuring UI consistency across the extension.

* feat: add null checks for tab URL and ID in REFRESH_BADGE handler

Add defensive programming to prevent runtime errors when processing
REFRESH_BADGE messages with missing or invalid tab properties.

* feat(extension): replace badge status SWR clear with full cache refresh

Replace selective SWR badge status clearing with a complete cache refresh
to ensure consistent badge state across all active tabs. Updates the
`clearBadgeStatusSWR()` call to use the more comprehensive `clearAllCache()`
method and improves related documentation.

* feat(extension): add validation & error handling for API client

- add null check and error throw in `getTabCount` when API client fails
- ensure badge is cleared when API client is unavailable
- refactor `getApiClient` to use destructured settings
- fix potential undefined access in TRPC client initialization

* feat(extension): replace isExisted with exactMatch for precise bookmark info

- modify getTabCount to return exactMatch instead of isExisted
- update BadgeCacheEntry type to use ZBookmark|null for exactMatch
- adjust setBadge and setBadgeStatusSWR to handle new exactMatch format
- ensure backward compatibility by converting exactMatch to boolean

* refactor(background): rename getTabCount to getBookmarkStatusForUrl

- improve function naming to better reflect return value
- update JSDoc to clarify return object structure
- adjust all function calls to use new name

* feat(extension): add "View page in Karakeep" context menu option

- introduce new `VIEW_PAGE_IN_KARAKEEP` menu item for extension action
- extend `handleContextMenuClick` to support optional tab parameter
- add `searchCurrentUrl` function to handle URL-based searches
- implement exact match and search fallback logic with proper URL encoding
- ensure error handling and validation for invalid URLs

* feat(extension): reorder menu items and extend page context support

- Move 'Add to Karakeep' menu creation before conditional block
- Add 'page' context to 'View this page in Karakeep' menu item

* feat(extension): add toggle to enable/disable badge caching

- introduce `useBadgeCache` setting in schema and defaults
- add switch control in OptionsPage to toggle cache usage
- conditionally render cache expire time input based on toggle
- make badge cache operations respect the toggle setting
- hide cache-related context menu items when caching disabled
- skip cache operations in background when disabled
- prevent cache checks and purges when caching is off

* fix(extension): handle cache miss in bookmark search flow

Previously, the search flow would silently fail (no-op) when the cache missed.
Now, it falls back to fetching the bookmark status directly from the server
when no cached data is available. Also refactored to avoid redundant settings
fetch and improve code readability.

* refactor(badge): implement generic cache utility and refactor badge cache

* Remove dedicated cache type definitions in favor of generic solution
* Create reusable cache utility with L1/L2 (memory/storage) support
* Simplify badge cache implementation using new generic cache
* Remove redundant SWR-specific functions and consolidate logic
* Improve type safety and error handling in cache operations
* Eliminate deprecated cache management functions and types

* refactor(extension): replace custom cache with TanStack Query for badge status

- Remove custom SWR cache implementation
- Add TanStack Query persistence with Chrome storage
- Update badge status logic to use QueryClient
- Add storage persister utility for Chrome
- Update TRPC client initialization with QueryClient
- Add required TanStack Query persistence dependencies

* fix(extension): add missing `useBadgeCache` config and refactor cache logic

- restore accidentally removed `useBadgeCache` setting from refactor
- update cache invalidation logic to include `useBadgeCache` changes
- modify QueryClient config to respect `useBadgeCache` toggle
- improve settings comparison logic for better reuse detection

* fix(extension): use dynamic key for TanStack query cache persistence

Previously used hardcoded string 'TANSTACK_QUERY_CACHE_KEY' instead of the
defined constant, which could lead to inconsistent storage access.

* fix(cache): propagate fetch errors to avoid caching failed badge status

Previously, API errors would return an empty status, causing cache to store
invalid results. Now errors are thrown so the cache treats them as misses.

* fix(extension): guard chrome storage and respect cache disable setting

- use `globalThis.chrome` to avoid runtime errors in non-extension contexts
- skip persistence when `useBadgeCache=false` and clear existing cache
- add `maxAge` and `buster` to prevent stale/incompatible data restoration

* refactor(badgeCache): remove redundant null check for searchBookmarks data

Remove unnecessary if (!data) guard since searchBookmarks query is guaranteed
to return a non-nullable response due to its Zod schema. Use direct access to
data.bookmarks and simplify empty state check with bookmarksLength.

* fix(badgeCache): throw error on misconfiguration instead of caching empty

Prevent cache poisoning by throwing when API client is not configured.
This ensures setup errors are visible rather than silently cached as 0.

* fix(badgeCache): add fallback to fetchBadgeStatus when QueryClient missing

Prevents null returns by falling back to direct fetch when QueryClient
is unavailable, ensuring badge remains responsive.

* feat(extension): add yellow badge for URLs ignoring anchor and trailing slash

- implement partial URL matching logic in badge status calculation
- introduce `BadgeMatchType` enum for different match scenarios
- update badge color scheme (green=exact, yellow=partial, red=none)
- refactor badge status interface and setBadge function signature
- handle edge cases for null badge status in error scenarios

* feat: support partial bookmark matches in badge status check

- use partial match fallback when exact match is unavailable
- update target URL generation to handle both match types
- ensure consistent bookmark ID reference in preview URL

* refactor: improve error handling and badge status logic

* wrap `removeContextMenus()` in try-catch block to prevent crashes
  when context menus API fails
* simplify badge setting logic by removing redundant status check
* fix `getBadgeStatus()` return type to always resolve with `BadgeStatus`
* update import path for `urlsMatchIgnoringAnchorAndTrailingSlash`
* clarify comments for URL matching logic and edge cases

* perf: parallelize active-tab badge refresh after cache clear

Avoid serial waits across windows/tabs by using Promise.all to process
active tab IDs concurrently. Replaces nested loops with flatMap and
filter for cleaner extraction of active tab IDs.

* fix(badge): isolate cache config to badge queries only

Move cache time configuration from global QueryClient to badge-specific
queries to prevent unintended caching in other query operations.

* fix: Invalid configuration check should verify if either field is missing.

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* fix(trpc): include address in cache buster to isolate persisted caches

Prevents restoring stale data from a different server after switching
address by scoping the cache buster to the current backend address.

* feat(trpc): ensure proper client cleanup on config changes

- add client removal from persistent storage when address/apiKey invalid
- ensure cache wipe when switching context with address/apiKey changes
- simplify persister creation by using default chrome.storage.local
- make storage parameter optional in createChromeStorage

* fix bad merge

* simplify badge by dropping the count

* more fixes

* more fix

---------

Co-authored-by: Mohamed Bassem <me@mbassem.com>
2025-11-03 01:28:05 +00:00
Mohamed Bassem
2056582cf6 fix: restore image size in grid layout 2025-11-03 01:17:54 +00:00
MohamedBassem
560900bb59 deps: Upgrade react-query to 5.90 2025-11-02 23:51:42 +00:00
Cédric
393bbd9a64 feat: Support inline toggling for todos. fixes #1931 (#1933)
* [1931] Can now chain the creation of todos from the quick add form

* [1931] Can now toggle todos from the masonry view + added a custom renderer for inputs of type checkbox (required to remove the readonly default attribute)

* handle nested lists and case

---------

Co-authored-by: Cédric <cedric.marinot@elosi.com>
Co-authored-by: Mohamed Bassem <me@mbassem.com>
2025-11-02 21:48:38 +00:00
Mohamed Bassem
085c832c9a fix: fix monolith to respect crawler proxy 2025-11-02 21:00:52 +00:00
Mohamed Bassem
5358682a8c feat(rss): Add import tags from RSS feed categories (#2031)
* feat(feeds): Add import tags from RSS feed categories

- Add importTags boolean field to rssFeedsTable schema (default: false)
- Create database migration 0063_add_import_tags_to_feeds.sql
- Update zod schemas (zFeedSchema, zNewFeedSchema, zUpdateFeedSchema) to include importTags
- Update Feed model to handle importTags in create and update methods
- Update feedWorker to:
  - Read title and categories from RSS parser
  - Attach categories as tags to bookmarks when importTags is enabled
  - Log warnings if tag attachment fails

Resolves #1996

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Mohamed Bassem <MohamedBassem@users.noreply.github.com>

* feat(web): Add importTags option to feed settings UI

- Add importTags toggle to FeedsEditorDialog (create feed)
- Add importTags toggle to EditFeedDialog (edit feed)
- Display as a bordered switch control with descriptive text
- Defaults to false for new feeds

Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com>

* fix migration

* remove extra migration

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com>
2025-11-02 20:48:17 +00:00
Mohamed Bassem
633686b58c fix: fix crash in search input when query contains a percent. fixes #1941 2025-11-02 20:23:23 +00:00
Mohamed Bassem
34d2b48578 feat: Add view options to show tag/title and control image fit. Fixes #1960 2025-11-02 20:13:57 +00:00
Mohamed Bassem
bb00c99678 refactor: improve the userLocalSetting server functions 2025-11-02 19:38:17 +00:00
Mohamed Bassem
965c603de3 feat: Make search job timeout configurable 2025-11-02 19:32:34 +00:00
xuatz
33f4077972 feat: display notes on bookmark card (#2083)
* feat: display notes on bookmark card

* apply styling

* include mobile impl

* apply pr comments

* add display options menu into PR

* put it under app setting

* cleanup

* address pr comments

* change the default for show notes to false

* make the in-card note font lighter

---------

Co-authored-by: Mohamed Bassem <me@mbassem.com>
2025-11-02 19:32:18 +00:00
Mohamed Bassem
b63a49fc39 fix: Stricter SSRF validation (#2082)
* fix: Stricter SSRF validation

* skip dns resolution if running in proxy context

* more fixes

* Add LRU cache

* change the env variable for internal hostnames

* make dns resolution timeout configerable

* upgrade ipaddr

* handle ipv6

* handle proxy bypass for request interceptor
2025-11-02 17:19:28 +00:00
Mohamed Bassem
c6ebceb9f0 fix: correctly handle composition in search input. fixes #2048 2025-11-02 12:44:15 +00:00
Mohamed Bassem
c9c73d411a fix: browser service connection check using dns instead. Fixes #2080 2025-11-02 12:35:45 +00:00
Mohamed Bassem
40d548bd25 fix: More memory optimizations for crawler worker. #1748 2025-10-26 15:19:00 +00:00
Mohamed Bassem
0704b8bb69 fix: fix screenshot filepath in crawler 2025-10-26 15:15:37 +00:00
Christoph Vollmann
bd9c933bc0 docs: Add Azure configuration details for OpenAI-compatible API (#2072)
* docs: Add Azure configuration details for OpenAI-compatible API

* Update docs/docs/14-guides/05-different-ai-providers.md

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-26 15:09:36 +00:00
Mohamed Bassem
8a330dc2da fix: Respect abort signal in admin maintenance jobs 2025-10-26 12:50:32 +00:00
Mohamed Bassem
e43c7e0f1c deps: Upgrade metascraper plugins 2025-10-26 11:28:55 +00:00
Mohamed Bassem
6d234de8c9 deps: Upgrade metascraper-readability 5.49.6 2025-10-26 11:21:35 +00:00
Mohamed Bassem
cf3ffff0a5 feat: Allow configuring inline asset size threshold 2025-10-26 11:17:16 +00:00
Mohamed Bassem
2b769cba82 feat: Add admin maintenance job to migrate large inline HTML (#2071)
* Add admin maintenance job to migrate large inline HTML

* add cursor

* more fixes
2025-10-26 11:03:44 +00:00
Mohamed Bassem
17136006c7 fix(inferance): skip token slicing when content is already witin max length 2025-10-26 09:59:20 +00:00
Mohamed Bassem
6ea5dd194e refactor: generalize tidy assets queue into admin maintenance (#2059)
* refactor: generalize admin maintenance queue

* more fixes
2025-10-26 09:58:51 +00:00
Benjamin Michaelis
046c29dcf1 fix: update OpenAI API to use max_completion_tokens instead of max_tokens (#2000)
* fix: update OpenAI API to use max_completion_tokens instead of max_tokens

The OpenAI API has deprecated max_tokens in favor of max_completion_tokens
for newer models. This change updates both text and image model calls.

* feat: add support for max_completion_tokens in OpenAI inference configuration
2025-10-25 19:12:08 +01:00
Mohamed Bassem
8c0aae33b8 fix(restate): Fix priority for restate queue 2025-10-20 00:44:46 +00:00
Mohamed Bassem
cdf8121338 fix(restate): Ensure that the semaphore and idProvider services are ingress private 2025-10-19 16:27:09 +00:00
Mohamed Bassem
2defc2475f feat: Add source field to track bookmark creation sources (#2037)
* feat: Add source field to track bookmark creation sources

Add a new 'source' field to the bookmarks table to track where bookmarks
were created from. Possible values: api, web, cli, mobile, singlefile, rss.

Changes:
- Add source field to bookmarks table schema
- Update Zod schemas to include source field
- Update tRPC createBookmark procedure to store source
- Update all callsites to pass appropriate source value:
  - api: Default to "api" if not provided
  - singlefile: Set to "singlefile"
  - rss: Set to "rss" in feedWorker
  - cli: Set to "cli"
  - mobile: Set to "mobile" in all mobile app bookmark creation
  - browser-extension: Set to "web"
  - web: Set to "web" in all web app bookmark creation
- Create migration file for database schema change

Fixes #2036

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Mohamed Bassem <MohamedBassem@users.noreply.github.com>

* feat: Add extension source type for browser extension

- Add 'extension' to bookmark source enum
- Update browser extension to use 'extension' instead of 'web'

Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com>

* fix CI

* fix CI

* fix the migration file

* add import source

* make source nullish

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com>
2025-10-12 22:41:56 +01:00
Mohamed Bassem
c14b69346a feat: support passing multiple proxy values (#2039)
* feat: support passing multiple proxy values

* fix typo

* trim and filter
2025-10-12 22:25:29 +01:00
Mohamed Bassem
88a7ffec01 deps: Upgrade oxlint to 1.22 2025-10-12 19:46:05 +00:00
Mohamed Bassem
fda1c851cf feat: Add service dependency checks in the server overview page 2025-10-12 18:29:40 +00:00
Mohamed Bassem
7ee9416e8f fix(web): Add w-full to tags editor to prevent unusable narrow width (#2035)
* fix(web): Add min-width to tags editor to prevent unusable narrow width

When there are no tags, the tags editor input was shrinking to just
1 character width, making the entire component unusably narrow. This
adds a min-w-64 (256px) class to ensure the input field is always
at a usable width.

Fixes #2033

Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com>

* fix

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com>
2025-10-12 19:28:41 +01:00
Mohamed Bassem
f2dec26f30 fix(api): Return 200 when bookmark already exists instead of 200 2025-10-11 18:35:10 +00:00
Mohamed Bassem
d5780388bf tests: Add a test for the GET /bookmarks/bookmarkId/lists api 2025-10-11 18:27:08 +00:00
Mohamed Bassem
7f138b99d4 fix(api): Document the API for getting lists of a bookmark. fixes #2030 2025-10-11 18:16:06 +00:00
Mohamed Bassem
87053d2e76 feat: make list dropdown searchable in Manage Lists modal (#2029)
- Replace simple Select component with searchable Command/Popover component
- Add search input that filters lists as you type (like tags)
- Maintain sidebar ordering using allPaths
- Add visual checkmark for selected list
- Improve UX with keyboard navigation and accessibility

Fixes #2025

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com>
2025-10-11 16:16:50 +01:00
maya doshi
dcddda5653 fix: fix dev script shebang for better compatibility (#2019) 2025-10-11 13:40:39 +01:00
atsggx
f1e8cea21c fix: Correct grammatical errors in prompts (#2020)
Corrected "who's" to "whose" in buildImagePrompt and buildTextPrompt.
2025-10-11 13:40:24 +01:00
Siddharth Doshi
36ffbdf8b5 docs: Add karakeep-sync to community projects (#1994)
Added a new community project for syncing links from Hacker News and Reddit to Karakeep.
2025-10-11 13:40:00 +01:00
Mohamed Bassem
bae8386d36 fix: round feed refresh hour for idempotency (#2013) 2025-10-06 08:28:58 +01:00
Mohamed Bassem
57d731ba18 fix: fix show no bookmark page when there isn't search results 2025-10-05 18:50:48 +00:00
Mohamed Bassem
b6867be423 fix: Disable idempotency keys for search 2025-10-05 18:36:20 +00:00
Mohamed Bassem
74a1f7b6b6 feat: Restate-based queue plugin (#2011)
* WIP: Initial restate integration

* add retry

* add delay + idempotency

* implement concurrency limits

* add admin stats

* add todos

* add id provider

* handle onComplete failures

* add tests

* add pub key and fix logging

* add priorities

* fail call after retries

* more fixes

* fix retries left

* some refactoring

* fix package.json

* upgrade sdk

* some test cleanups
2025-10-05 07:04:29 +01:00