aboutsummaryrefslogtreecommitdiffstats
path: root/packages (follow)
Commit message (Collapse)AuthorAgeFilesLines
* feat: Add bookmark sources statistics section (#2110)Mohamed Bassem2025-11-093-1/+52
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * feat: add bookmark sources statistics to usage stats page Add a new section to the usage statistics page that displays stats about bookmark sources (mobile, extension, web, API, CLI, etc). Changes: - Add bookmarksBySource field to user stats response schema - Implement backend query to fetch bookmarks grouped by source - Add new "Bookmark Sources" card to stats page UI - Add helper function to format source names for display * refactor: use stricter enum type for bookmark sources in stats API Replace generic string type with zBookmarkSourceSchema enum for better type safety and autocomplete. This ensures the API contract matches the database schema definition. Changes: - Import and use zBookmarkSourceSchema in user stats response - Define BookmarkSource type alias in frontend - Update formatSourceName to use stricter type and return non-nullable - Remove fallback case since all enum values are now handled * refactor: use shared BookmarkSource type and add i18n support - Replace local BookmarkSource type with canonical type from shared package using z.infer<typeof zBookmarkSourceSchema> - Add translation support for "Bookmark Sources" title and empty state - Add bookmark_sources.title and bookmark_sources.empty keys to English locale file This ensures type consistency across the codebase and prepares for future localization of the bookmark sources feature. * fix icons --------- Co-authored-by: Claude <noreply@anthropic.com>
* tests: fix crawling and search e2e tests (#2105)Mohamed Bassem2025-11-087-42/+106
| | | | | | | * tests: Attempt to fix flaky tests * fix internal address * fix assets tests
* feat(mobile): add custom headers configuration in sign-in screen (#2103)Mohamed Bassem2025-11-081-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | * 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>
* tests: Fix failing testMohamed Bassem2025-11-081-12/+16
|
* feat: Add support for user uploaded files (#2100)Mohamed Bassem2025-11-088-5/+40
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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>
* refactor: consolidate multiple karakeep plugins into one package (#2101)Mohamed Bassem2025-11-0828-120/+15
| | | | | | | | | | | | | | | | | | | | | | | | * 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>
* deps: Upgrade react-query to 5.90MohamedBassem2025-11-028-57/+57
|
* feat(rss): Add import tags from RSS feed categories (#2031)Mohamed Bassem2025-11-026-0/+2520
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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>
* feat: Make search job timeout configurableMohamed Bassem2025-11-022-0/+4
|
* fix: Stricter SSRF validation (#2082)Mohamed Bassem2025-11-021-1/+24
| | | | | | | | | | | | | | | | | | | * 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
* fix: browser service connection check using dns instead. Fixes #2080Mohamed Bassem2025-11-021-6/+8
|
* feat: Allow configuring inline asset size thresholdMohamed Bassem2025-10-261-0/+2
|
* feat: Add admin maintenance job to migrate large inline HTML (#2071)Mohamed Bassem2025-10-261-0/+7
| | | | | | | * Add admin maintenance job to migrate large inline HTML * add cursor * more fixes
* fix(inferance): skip token slicing when content is already witin max lengthMohamed Bassem2025-10-261-0/+3
|
* refactor: generalize tidy assets queue into admin maintenance (#2059)Mohamed Bassem2025-10-263-22/+37
| | | | | * refactor: generalize admin maintenance queue * more fixes
* fix: update OpenAI API to use max_completion_tokens instead of max_tokens ↵Benjamin Michaelis2025-10-252-2/+8
| | | | | | | | | | (#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
* fix(restate): Fix priority for restate queueMohamed Bassem2025-10-202-7/+8
|
* fix(restate): Ensure that the semaphore and idProvider services are ingress ↵Mohamed Bassem2025-10-192-0/+6
| | | | private
* feat: Add source field to track bookmark creation sources (#2037)Mohamed Bassem2025-10-128-1/+2591
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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>
* feat: support passing multiple proxy values (#2039)Mohamed Bassem2025-10-121-2/+18
| | | | | | | * feat: support passing multiple proxy values * fix typo * trim and filter
* feat: Add service dependency checks in the server overview pageMohamed Bassem2025-10-122-0/+124
|
* fix(api): Return 200 when bookmark already exists instead of 200Mohamed Bassem2025-10-114-4/+31
|
* tests: Add a test for the GET /bookmarks/bookmarkId/lists apiMohamed Bassem2025-10-111-0/+48
|
* fix(api): Document the API for getting lists of a bookmark. fixes #2030Mohamed Bassem2025-10-118-108/+268
|
* fix: Correct grammatical errors in prompts (#2020)atsggx2025-10-111-2/+2
| | | Corrected "who's" to "whose" in buildImagePrompt and buildTextPrompt.
* fix: Disable idempotency keys for searchMohamed Bassem2025-10-051-1/+2
|
* feat: Restate-based queue plugin (#2011)Mohamed Bassem2025-10-0522-11/+991
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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
* feat: Revamp import experience (#2001)Mohamed Bassem2025-10-0414-19/+3163
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * WIP: import v2 * remove new session button * don't redirect after import * store and lint to root list * models + tests * redesign the progress * simplify the import session for ow * drop status from session schema * split the import session page * i18n * fix test * remove pagination * fix some colors in darkmode * one last fix * add privacy filter * privacy check * fix interactivity of import progress * fix test
* feat: recursive list delete (#1989)Mohamed Bassem2025-09-283-11/+392
|
* fix: dont re-enqueue indexing for a bookmark already pending indexingMohamed Bassem2025-09-281-2/+5
|
* feat: Add tag search and pagination (#1987)Mohamed Bassem2025-09-2812-91/+1017
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * feat: Add tag search and use in the homepage * use paginated query in the all tags view * wire the load more buttons * add skeleton to all tags page * fix attachedby aggregation * fix loading states * fix hasNextPage * use action buttons for load more buttons * migrate the tags auto complete to the search api * Migrate the tags editor to the new search API * Replace tag merging dialog with tag auto completion * Merge both search and list APIs * fix tags.list * add some tests for the endpoint * add relevance based sorting * change cursor * update the REST API * fix review comments * more fixes * fix lockfile * i18n * fix visible tags
* fix: optimize memory usage of tag listingMohamed Bassem2025-09-212-51/+137
|
* fix: fix bundling liteque in the workersMohamed Bassem2025-09-142-2/+1
|
* refactor: Move callsites to liteque to be behind a pluginMohamed Bassem2025-09-1424-82/+357
|
* feat: Regen api keysMohamed Bassem2025-09-143-7/+100
|
* feat: Add Create Tag button to tags page (#1942)Mohamed Bassem2025-09-141-0/+14
| | | | | | | | | | | | | | | | | | | | | * feat: add Create Tag button to tags page - Added useCreateTag hook to shared-react/hooks/tags.ts - Created CreateTagModal component for tag creation without bookmark attachment - Added Create Tag button to AllTagsView component - Added necessary translation keys for the new feature Fixes #1937 Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com> * format * localize toasts --------- Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com> Co-authored-by: Mohamed Bassem <MohamedBassem@users.noreply.github.com>
* refactor: strongly type the search plugin interfaceMohamed Bassem2025-09-143-10/+41
|
* feat(search): add title search qualifier (#1940)Mohamed Bassem2025-09-135-2/+123
| | | | | | | * fix(search): include link titles in title matcher * docs(search): add title qualifier * docs: remove title qualifier from v0.27 guide
* fix: Fix ranking of search results. fixes #1922Mohamed Bassem2025-09-131-0/+2
|
* fix: fix migration failing when no user settings are set. fixes #1919 (#1920)Gavin Mogan2025-09-091-6/+6
|
* fix: fix 5xx on invalid api keyMohamed Bassem2025-09-071-1/+5
|
* release(sdk): Release the 0.27 sdkMohamed Bassem2025-09-071-1/+1
|
* fix: fix tag flicker caused by tag sortingMohamed Bassem2025-09-072-4/+14
|
* feat: Add cookie support for browser page accessMohamed Bassem2025-09-071-0/+2
| | | | | | | | | | | * feat: Add cookie support for browser page access Implemented cookie functionality for browser page access, including BROWSER_COOKIE_PATH configuration to specify the cookies JSON file path. * fix the docs --------- Co-authored-by: lizz <lizong1204@gmail.com>
* feat(workers): add worker enable/disable lists (#1885)Mohamed Bassem2025-09-071-0/+20
|
* feat: add gif asset type support (#1876)Drashi2025-09-071-0/+2
| | | | | | | | | * feat: add gif asset type support * skip inference for gis --------- Co-authored-by: Mohamed Bassem <me@mbassem.com>
* refactor: Extract quota logic into its own classMohamed Bassem2025-09-067-84/+114
|
* fix: Reduce polling interval on meilisearch tasksMohamed Bassem2025-09-062-46/+12
|
* fix: Incremental polling interval for ongoing crawlsMohamed Bassem2025-08-312-19/+34
|
* refactor: Move highlights object into modelsMohamed Bassem2025-08-312-131/+188
|