{"owner":"papra-hq","repo":"papra","hasSkills":true,"totalSkillsCount":28,"totalTokensCount":11758,"categories":["anthropic-skill","plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":["packages/webhooks/CHANGELOG.md","packages/search-parser/CHANGELOG.md","packages/webhooks/tsconfig.json","packages/std/package.json","packages/webhooks/package.json","packages/webhooks/README.md","packages/search-parser/tsconfig.json","packages/lecture/package.json","packages/search-parser/package.json","packages/lecture/CHANGELOG.md","packages/lecture/README.md","packages/search-parser/README.md","packages/lecture/tsconfig.json","packages/cli/CHANGELOG.md","packages/cli/package.json","packages/cli/README.md","packages/cli/tsconfig.json","packages/app/CHANGELOG.md","packages/app/package.json","packages/app/README.md","packages/api-sdk/CHANGELOG.md","packages/api-sdk/package.json","packages/api-sdk/README.md","packages/api-sdk/tsconfig.json","packages/search-parser/demo/package.json","packages/search-parser/demo/tsconfig.json","packages/lecture/fixtures/004-markdown/004.input.md","packages/lecture/fixtures/003-yaml/003.input.yaml"],"skills":{"packages/webhooks/CHANGELOG.md":"# @papra/webhooks\n\n## 0.3.4\n\n### Patch Changes\n\n- [#1276](https://github.com/papra-hq/papra/pull/1276) [`95cfbb0`](https://github.com/papra-hq/papra/commit/95cfbb0639ba263bfc21a64729eb1e87d0a6b89a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Excluded sourcemaps from package bundle\n\n## 0.3.3\n\n### Patch Changes\n\n- [#1099](https://github.com/papra-hq/papra/pull/1099) [`086dccb`](https://github.com/papra-hq/papra/commit/086dccbfda18c850bee50b94c48f5f110be6935c) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Export the http client type.\n\n## 0.3.2\n\n### Patch Changes\n\n- [#699](https://github.com/papra-hq/papra/pull/699) [`4342b31`](https://github.com/papra-hq/papra/commit/4342b319ea1b787b80d02090f3820797b928e115) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Fix mising prepublish script\n\n## 0.3.1\n\n### Patch Changes\n\n- [#604](https://github.com/papra-hq/papra/pull/604) [`c70d7e4`](https://github.com/papra-hq/papra/commit/c70d7e419aa84eb63c18b72d529951761de75e33) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Use provenance for releases\n\n## 0.3.0\n\n### Minor Changes\n\n- [#464](https://github.com/papra-hq/papra/pull/464) [`14bc2b8`](https://github.com/papra-hq/papra/commit/14bc2b8f8d0d6605062f37188e7c57bbc61b2c1a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Ditched CommonJs build for packages\n\n## 0.2.0\n\n### Minor Changes\n\n- [#430](https://github.com/papra-hq/papra/pull/430) [`a8cff8c`](https://github.com/papra-hq/papra/commit/a8cff8cedc062be3ed1d454e9de6e456553a4d8c) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Breaking change: updated webhooks signatures and payload format to match standard-webhook spec\n\n- [#432](https://github.com/papra-hq/papra/pull/432) [`6723baf`](https://github.com/papra-hq/papra/commit/6723baf98ad46f989fe1e1e19ad0dd25622cca77) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added new webhook events: document:updated, document:tag:added, document:tag:removed\n\n- [#432](https://github.com/papra-hq/papra/pull/432) [`6723baf`](https://github.com/papra-hq/papra/commit/6723baf98ad46f989fe1e1e19ad0dd25622cca77) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Webhooks invocation is now defered\n\n## 0.1.1\n\n### Patch Changes\n\n- [#379](https://github.com/papra-hq/papra/pull/379) [`6cedc30`](https://github.com/papra-hq/papra/commit/6cedc30716e320946f79a0a9fd8d3b26e834f4db) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Updated dependencies\n\n## 0.1.0\n\n### Minor Changes\n\n- [#280](https://github.com/papra-hq/papra/pull/280) [`85fa5c4`](https://github.com/papra-hq/papra/commit/85fa5c43424d139f5c2752a3ad644082e61d3d67) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added webhook management\n","packages/search-parser/CHANGELOG.md":"# @papra/search-parser\n\n## 0.1.2\n\n### Patch Changes\n\n- [#1276](https://github.com/papra-hq/papra/pull/1276) [`95cfbb0`](https://github.com/papra-hq/papra/commit/95cfbb0639ba263bfc21a64729eb1e87d0a6b89a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Excluded sourcemaps from package bundle\n\n## 0.1.1\n\n### Patch Changes\n\n- [#970](https://github.com/papra-hq/papra/pull/970) [`5900674`](https://github.com/papra-hq/papra/commit/5900674083f4f55733c843b438516c8fdfff687c) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added support for quoted search filters, like `\"warranty date\":>2026`\n\n## 0.1.0\n\n### Minor Changes\n\n- [#773](https://github.com/papra-hq/papra/pull/773) [`78eb1d8`](https://github.com/papra-hq/papra/commit/78eb1d83c71cd8e66ffbce5a4abccb39209dcda6) Thanks [@CorentinTh](https://github.com/CorentinTh)! - AST optimization is activated by default\n\n### Patch Changes\n\n- [#768](https://github.com/papra-hq/papra/pull/768) [`37c3aa9`](https://github.com/papra-hq/papra/commit/37c3aa93acd0a718c0daa6704803a1f555480502) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Fix tokenization issue for negated filters with quoted value\n","packages/webhooks/tsconfig.json":"{\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"moduleDetection\": \"force\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"allowJs\": true,\n    \"strict\": true,\n    \"noImplicitOverride\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noEmit\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"skipLibCheck\": true\n  }\n}\n","packages/std/package.json":"{\n  \"name\": \"@papra/std\",\n  \"version\": \"0.0.1\",\n  \"private\": true,\n  \"description\": \"A collection of utility functions.\",\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/std\"\n  },\n  \"type\": \"module\",\n  \"main\": \"./src/index.ts\",\n  \"exports\": {\n    \".\": \"./src/index.ts\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n","packages/webhooks/package.json":"{\n  \"name\": \"@papra/webhooks\",\n  \"version\": \"0.3.4\",\n  \"description\": \"Webhooks helper library for Papra, the document archiving platform.\",\n  \"keywords\": [\n    \"archiving\",\n    \"document\",\n    \"papra\",\n    \"storage\",\n    \"webhooks\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"AGPL-3.0-or-later\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/webhooks\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"type\": \"module\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"build\": \"tsdown\",\n    \"build:watch\": \"tsdown --watch\",\n    \"dev\": \"pnpm build:watch\",\n    \"prepublishOnly\": \"pnpm run build\"\n  },\n  \"dependencies\": {\n    \"@corentinth/chisels\": \"catalog:\",\n    \"@paralleldrive/cuid2\": \"catalog:\",\n    \"ofetch\": \"catalog:\",\n    \"tsee\": \"^1.3.4\"\n  },\n  \"devDependencies\": {\n    \"standardwebhooks\": \"1.0.0\",\n    \"tsdown\": \"catalog:\",\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n","packages/webhooks/README.md":"# Papra webhooks\n\nThis package is used to trigger and easily consume webhooks from Papra.\n\n## Installation\n\n```bash\n# using pnpm\npnpm add @papra/webhooks\n\n# using npm\nnpm install @papra/webhooks\n\n# using yarn\nyarn add @papra/webhooks\n```\n\n## License\n\nThis project is licensed under the AGPL-3.0 License - see the [LICENSE](./LICENSE) file for details.\n\n## Community\n\nJoin the community on [Papra's Discord server](https://papra.app/discord) to discuss the project, ask questions, or get help.\n\n## Credits\n\nThis project is crafted with ❤️ by [Corentin Thomasset](https://corentin.tech).\nIf you find this project helpful, please consider [supporting my work](https://buymeacoffee.com/cthmsst).\n","packages/search-parser/tsconfig.json":"{\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"moduleDetection\": \"force\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"allowJs\": true,\n    \"strict\": true,\n    \"noImplicitOverride\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noEmit\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"skipLibCheck\": true\n  },\n  \"exclude\": [\"demo\"]\n}\n","packages/lecture/package.json":"{\n  \"name\": \"@papra/lecture\",\n  \"version\": \"0.5.2\",\n  \"description\": \"A simple library to extract text from files\",\n  \"keywords\": [\n    \"content\",\n    \"document\",\n    \"extract\",\n    \"file\",\n    \"lecture\",\n    \"text\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/lecture\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"generate-fixtures\": \"vitest --update\",\n    \"build\": \"tsdown\",\n    \"build:watch\": \"tsdown --watch\",\n    \"dev\": \"pnpm build:watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"prepublishOnly\": \"pnpm run build\"\n  },\n  \"dependencies\": {\n    \"@corentinth/chisels\": \"catalog:\",\n    \"@napi-rs/canvas\": \"^0.1.73\",\n    \"fast-xml-parser\": \"^5.5.10\",\n    \"jszip\": \"^3.10.1\",\n    \"rtf-parser\": \"^1.3.3\",\n    \"sharp\": \"catalog:\",\n    \"tesseract.js\": \"^7.0.0\",\n    \"tinyexec\": \"^1.0.2\",\n    \"unpdf\": \"^1.4.0\"\n  },\n  \"devDependencies\": {\n    \"@papra/std\": \"workspace:*\",\n    \"@types/node\": \"catalog:\",\n    \"@vitest/coverage-v8\": \"catalog:\",\n    \"mime\": \"4.0.7\",\n    \"tsdown\": \"catalog:\",\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n","packages/search-parser/package.json":"{\n  \"name\": \"@papra/search-parser\",\n  \"version\": \"0.1.2\",\n  \"description\": \"A typesafe, dependency-free, error-resilient AST-based search query parser for TypeScript. Supports logical operators, grouping, filters, and more.\",\n  \"keywords\": [\n    \"filter\",\n    \"operator\",\n    \"papra\",\n    \"parser\",\n    \"query\",\n    \"search\"\n  ],\n  \"homepage\": \"https://search-parser.papra.app/\",\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/search-parser\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"build\": \"tsdown\",\n    \"build:watch\": \"tsdown --watch\",\n    \"dev\": \"pnpm build:watch\",\n    \"prepublishOnly\": \"pnpm run build\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"tsdown\": \"catalog:\",\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n","packages/lecture/CHANGELOG.md":"# @papra/lecture\n\n## 0.5.2\n\n### Patch Changes\n\n- [#1469](https://github.com/papra-hq/papra/pull/1469) [`347029d`](https://github.com/papra-hq/papra/commit/347029dbd1ae997dcf537a9d04ab003b06021090) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Fixed OCR extraction for images whose rotation is stored in EXIF metadata.\n\n- [#1470](https://github.com/papra-hq/papra/pull/1470) [`a58b4f0`](https://github.com/papra-hq/papra/commit/a58b4f0e349662218ce3a0a24321d352f3ff199d) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Silenced the content extraction warning about DPI.\n\n## 0.5.1\n\n### Patch Changes\n\n- [#1276](https://github.com/papra-hq/papra/pull/1276) [`95cfbb0`](https://github.com/papra-hq/papra/commit/95cfbb0639ba263bfc21a64729eb1e87d0a6b89a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Excluded sourcemaps from package bundle\n\n- [#1184](https://github.com/papra-hq/papra/pull/1184) [`e2c3aa6`](https://github.com/papra-hq/papra/commit/e2c3aa61fca6bff8c73ce0cc83b3c59390f5088d) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Updated tesseract.js to v7 which should increase extraction performance by 15 to 35% on images, [source](https://github.com/naptha/tesseract.js/releases/tag/v7.0.0).\n\n## 0.5.0\n\n### Minor Changes\n\n- [#953](https://github.com/papra-hq/papra/pull/953) [`db6badb`](https://github.com/papra-hq/papra/commit/db6badbc3cc15d5d2b91b79602eccc3926e564eb) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added content extraction support for scanned PDFs images in 1-bit-per-pixel grayscale format.\n\n- [#948](https://github.com/papra-hq/papra/pull/948) [`725eaff`](https://github.com/papra-hq/papra/commit/725eaff4b0339ce974b91e9eeb4482f716cfa279) Thanks [@CorentinTh](https://github.com/CorentinTh)! - When extracting text from PDF documents, if neither text nor images suitable for OCR are found, the pages are rendered as images and processed with OCR. Adding support for vectorized text.\n\n### Patch Changes\n\n- [#949](https://github.com/papra-hq/papra/pull/949) [`ec740ed`](https://github.com/papra-hq/papra/commit/ec740ed168496a458a3da6a9c71d31e1d8bf2746) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added document content extraction support for .xlsx and .ods files.\n\n## 0.4.0\n\n### Minor Changes\n\n- [#621](https://github.com/papra-hq/papra/pull/621) [`8308e93`](https://github.com/papra-hq/papra/commit/8308e93fdf0c4d52b8ee1de71f1557366d6e622f) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added support for native tesseract cli when available\n\n### Patch Changes\n\n- [#627](https://github.com/papra-hq/papra/pull/627) [`5ccdf44`](https://github.com/papra-hq/papra/commit/5ccdf446f0603467ab8f8833110efbe197bc0f0f) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added logger parameter\n\n## 0.3.1\n\n### Patch Changes\n\n- [#604](https://github.com/papra-hq/papra/pull/604) [`c70d7e4`](https://github.com/papra-hq/papra/commit/c70d7e419aa84eb63c18b72d529951761de75e33) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Use provenance for releases\n\n## 0.3.0\n\n### Minor Changes\n\n- [#580](https://github.com/papra-hq/papra/pull/580) [`1228486`](https://github.com/papra-hq/papra/commit/1228486f28ec28a100665e08cb62ab65e883f952) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added text extraction support for `.docx`, `.odt`, `.rtf`, `.pptx` and `.odp`\n\n## 0.2.0\n\n### Minor Changes\n\n- [#464](https://github.com/papra-hq/papra/pull/464) [`14bc2b8`](https://github.com/papra-hq/papra/commit/14bc2b8f8d0d6605062f37188e7c57bbc61b2c1a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Ditched CommonJs build for packages\n\n## 0.1.0\n\n### Minor Changes\n\n- [#429](https://github.com/papra-hq/papra/pull/429) [`67b3b14`](https://github.com/papra-hq/papra/commit/67b3b14cdfa994874c695b9d854a93160ba6a911) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added support for scanned pdf content extraction\n","packages/lecture/README.md":"# @papra/lecture\n\n`@papra/lecture` is a robust and lightweight library for extracting text content from various file formats. Whether you're processing Document for indexing or for LLM readability, this library simplifies the task of reading text content programmatically.\n\nThis lib is used in the [Papra](https://papra.app) project to extract text from various file formats.\n\n## Features\n\n- **Wide Format Support**: Extract text from PDFs, plain text files, YAML, Markdown, CSV, and all `text/*` MIME types.\n- **Promise-based API**: Designed with asynchronous functions to provide a seamless integration experience.\n- **Extensible and Modular**: Built with future compatibility in mind. Support for more file formats is on the way.\n- **Error Handling**: Provides detailed error information when extraction fails.\n\n## Supported File Formats\n\nCurrently, `@papra/lecture` supports the following file formats:\n\n- **PDF**\n- **Plain Text** (e.g., `.txt`)\n- **YAML** (e.g., `.yaml`, `.yml`)\n- **Markdown** (e.g., `.md`)\n- **CSV**\n- All `text/*` MIME types\n- **Images OCR** (e.g., `.jpg`, `.png`, `.gif`)\n- Coming soon: **Microsoft Office Documents** (e.g., `.docx`, `.xlsx`, `.pptx`)\n- Coming soon: **eBooks** (e.g., `.epub`, `.mobi`)\n\nWe are actively working on adding support for more file formats. Stay tuned for updates!\n\n## Installation\n\nTo install the package, use npm or yarn:\n\n```bash\npnpm install @papra/lecture\n\nnpm install @papra/lecture\n\nyarn add @papra/lecture\n```\n\n## Usage\n\n### Importing the Library\n\nYou can import the library using ES Modules or CommonJS syntax:\n\n```javascript\n// ES Modules\nimport { extractText } from '@papra/lecture';\n// or CommonJS\nconst { extractText } = require('@papra/lecture');\n\nconst { textContent } = await extractText({ arrayBuffer: file, mimeType: 'application/pdf' });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n### Functions\n\n#### `extractText`\n\nExtracts text from an arrayBuffer using its MIME type.\n\n**Example**:\n\n```javascript\nconst file = await fetch('example.pdf').then((res) => res.arrayBuffer());\nconst mimeType = 'application/pdf';\n\nconst { textContent } = await extractText({ arrayBuffer: file, mimeType });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n#### `extractTextFromBlob`\n\nExtracts text from a `Blob` object (e.g., files or data retrieved from APIs).\n\n```javascript\nconst blob = new Blob(['Hello, World!'], { type: 'text/plain' });\n\nconst { textContent } = await extractTextFromBlob({ blob });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n#### `extractTextFromFile`\n\nExtracts text from a file using its MIME type.\n\n```javascript\nconst file = document.querySelector('#file-input').files[0]; // HTML File Input\n\nconst { textContent } = await extractTextFromFile({ file });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n## Contributing\n\nContributions are welcome! Feel free to open issues or submit pull requests. Let's make `@papra/lecture` better together.\n\n## Testing\n\nYou can run the tests with the following command:\n\n```bash\n# one shot\npnpm run test\n\n# watch mode\npnpm run test:watch\n```\n\nAutomated fixtures are run against the [`fixtures`](./fixtures) directory. Add files to this directory in the format `[0-9]{3}.ext` like `001.js` following the incremental pattern. The test runner will automatically pick up the new fixtures and generate a `[0-9]{3}.expected`, adding the expected output.\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for more information.\n\n## Credits and Acknowledgements\n\nThis project is crafted with ❤️ by [Corentin Thomasset](https://corentin.tech).\nIf you find this project helpful, please consider [supporting my work](https://buymeacoffee.com/cthmsst).\n","packages/search-parser/README.md":"# @papra/search-parser\n\nA search query parser library for building GitHub-style search syntax with filters, logical operators, and full-text search.\nYou can play with the parser in the [demo application](https://search-parser.papra.app/).\n\n## Features\n\n- **TypeScript-first**: Fully typed API and AST structures.\n- **Dependency-free**: No external dependencies, lightweight and fast.\n- **Error-resilient**: Best-effort parsing with detailed issue reporting.\n- **Rich syntax support**: Logical operators (AND, OR, NOT), grouping with parentheses, and field-based filters.\n- **Configurable limits**: Control maximum depth and token count to prevent abuse.\n- **Optimization**: Simplifies the parsed expression tree by removing redundancies, and basic boolean algebra simplifications.\n\n## Installation\n\n```bash\npnpm add @papra/search-parser\n# or\nnpm install @papra/search-parser\n# or\nyarn add @papra/search-parser\n```\n\n## Usage\n\n```typescript\nimport { parseSearchQuery } from '@papra/search-parser';\n\n// Simple text search\nparseSearchQuery({ query: 'foobar' });\n// { expression: { type: 'text', value: 'foobar' }, issues: [] }\n\n// Filter query\nparseSearchQuery({ query: 'tag:invoice' });\n// { expression: { type: 'filter', field: 'tag', operator: '=', value: 'invoice' }, issues: [] }\n\n// Complex query with operators\nparseSearchQuery({ query: '(tag:invoice OR tag:receipt) AND createdAt:>2024-01-01' });\n// {\n//   expression: {\n//     type: 'and',\n//     operands: [\n//       {\n//         type: 'or',\n//         operands: [\n//           { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//           { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },\n//         ],\n//       },\n//       { type: 'filter', field: 'createdAt', operator: '>', value: '2024-01-01' },\n//     ],\n//   },\n//   issues: [],\n// }\n```\n\n## Query Syntax\n\n### Text Search\n\n```\nmy invoice\n\"quoted text\"\n```\n\n### Filters\n\n```\ntag:invoice                # Equality (same as tag:=invoice)\ncreatedAt:>2024-01-01      # Comparison operators: >, <, >=, <=, =\n```\n\n### Logical Operators\n\n```\ntag:invoice AND status:active\ntag:invoice OR tag:receipt\nNOT tag:personal\n-tag:personal              # Negation shorthand\n```\n\n### Grouping\n\n```\n(tag:invoice OR tag:receipt) AND status:active\n```\n\n### Optimization\n\nYou can enable optimization to simplify the parsed expression tree:\n\n```typescript\n// The query has redundant ANDs and double negations\nconst query = 'tag:invoice AND (tag:receipt AND (tag:invoice AND NOT (NOT foo)))';\n\nparseSearchQuery({ query, optimize: false });\n// {\n//   expression: {\n//     type: 'and',\n//     operands: [\n//       { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//       {\n//         type: 'and',\n//         operands: [\n//           { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },\n//           {\n//             type: 'and',\n//             operands: [\n//               { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//               {\n//                  type: 'not',\n//                  operand: {\n//                   type: 'not',\n//                   operand: { type: 'text', value: 'foo' },\n//                 },\n//               },\n//             ],\n//           },\n//         ],\n//       },\n//     ],\n//   },\n//   issues: [],\n// }\n\nparseSearchQuery({ query, optimize: true });\n// {\n//   expression: {\n//     type: 'and',\n//     operands: [\n//       { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//       { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },\n//       { type: 'text', value: 'foo' },\n//     ],\n//   },\n//   issues: [],\n// }\n```\n\n## API\n\n```typescript\nfunction parseSearchQuery(options: {\n  query: string;\n  maxDepth?: number; // Default: 10\n  maxTokens?: number; // Default: 200\n  optimize?: boolean; // Default: true\n}): ParsedQuery;\n\ntype ParsedQuery = {\n  expression: Expression;\n  issues: Issue[];\n};\n```\n\n## Error Handling\n\nThe parser returns issues for malformed queries while doing best-effort parsing:\n\n```typescript\nimport { ERROR_CODES } from '@papra/search-parser';\n\nconst result = parseSearchQuery({ query: '(tag:invoice' });\n// {\n//   expression: { type: 'filter', ... },\n//   issues: [{ code: 'unmatched-opening-parenthesis', message: '...' }]\n// }\n```\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.\n\n## Credits\n\nThis project is crafted with ❤️ by [Corentin Thomasset](https://corentin.tech).\nIf you find this project helpful, please consider [supporting my work](https://buymeacoffee.com/cthmsst).\n","packages/lecture/tsconfig.json":"# Lecture Skill\n\nPath: `packages/lecture/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/tsconfig.json)","packages/cli/CHANGELOG.md":"# Cli Skill\n\nPath: `packages/cli/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/CHANGELOG.md)","packages/cli/package.json":"# Cli Skill\n\nPath: `packages/cli/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/package.json)","packages/cli/README.md":"# cli Documentation\n\nPath: `packages/cli/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/README.md)","packages/cli/tsconfig.json":"# Cli Skill\n\nPath: `packages/cli/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/tsconfig.json)","packages/app/CHANGELOG.md":"# App Skill\n\nPath: `packages/app/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/CHANGELOG.md)","packages/app/package.json":"# App Skill\n\nPath: `packages/app/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/package.json)","packages/app/README.md":"# app Documentation\n\nPath: `packages/app/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/README.md)","packages/api-sdk/CHANGELOG.md":"# Api-sdk Skill\n\nPath: `packages/api-sdk/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/CHANGELOG.md)","packages/api-sdk/package.json":"# Api-sdk Skill\n\nPath: `packages/api-sdk/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/package.json)","packages/api-sdk/README.md":"# api-sdk Documentation\n\nPath: `packages/api-sdk/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/README.md)","packages/api-sdk/tsconfig.json":"# Api-sdk Skill\n\nPath: `packages/api-sdk/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/tsconfig.json)","packages/search-parser/demo/package.json":"# Demo Skill\n\nPath: `packages/search-parser/demo/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/demo/package.json)","packages/search-parser/demo/tsconfig.json":"# Demo Skill\n\nPath: `packages/search-parser/demo/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/demo/tsconfig.json)","packages/lecture/fixtures/004-markdown/004.input.md":"# 004-markdown Skill\n\nPath: `packages/lecture/fixtures/004-markdown/004.input.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/fixtures/004-markdown/004.input.md)","packages/lecture/fixtures/003-yaml/003.input.yaml":"# 003-yaml Skill\n\nPath: `packages/lecture/fixtures/003-yaml/003.input.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/fixtures/003-yaml/003.input.yaml)"},"files":{"packages/webhooks/CHANGELOG.md":"# @papra/webhooks\n\n## 0.3.4\n\n### Patch Changes\n\n- [#1276](https://github.com/papra-hq/papra/pull/1276) [`95cfbb0`](https://github.com/papra-hq/papra/commit/95cfbb0639ba263bfc21a64729eb1e87d0a6b89a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Excluded sourcemaps from package bundle\n\n## 0.3.3\n\n### Patch Changes\n\n- [#1099](https://github.com/papra-hq/papra/pull/1099) [`086dccb`](https://github.com/papra-hq/papra/commit/086dccbfda18c850bee50b94c48f5f110be6935c) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Export the http client type.\n\n## 0.3.2\n\n### Patch Changes\n\n- [#699](https://github.com/papra-hq/papra/pull/699) [`4342b31`](https://github.com/papra-hq/papra/commit/4342b319ea1b787b80d02090f3820797b928e115) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Fix mising prepublish script\n\n## 0.3.1\n\n### Patch Changes\n\n- [#604](https://github.com/papra-hq/papra/pull/604) [`c70d7e4`](https://github.com/papra-hq/papra/commit/c70d7e419aa84eb63c18b72d529951761de75e33) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Use provenance for releases\n\n## 0.3.0\n\n### Minor Changes\n\n- [#464](https://github.com/papra-hq/papra/pull/464) [`14bc2b8`](https://github.com/papra-hq/papra/commit/14bc2b8f8d0d6605062f37188e7c57bbc61b2c1a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Ditched CommonJs build for packages\n\n## 0.2.0\n\n### Minor Changes\n\n- [#430](https://github.com/papra-hq/papra/pull/430) [`a8cff8c`](https://github.com/papra-hq/papra/commit/a8cff8cedc062be3ed1d454e9de6e456553a4d8c) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Breaking change: updated webhooks signatures and payload format to match standard-webhook spec\n\n- [#432](https://github.com/papra-hq/papra/pull/432) [`6723baf`](https://github.com/papra-hq/papra/commit/6723baf98ad46f989fe1e1e19ad0dd25622cca77) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added new webhook events: document:updated, document:tag:added, document:tag:removed\n\n- [#432](https://github.com/papra-hq/papra/pull/432) [`6723baf`](https://github.com/papra-hq/papra/commit/6723baf98ad46f989fe1e1e19ad0dd25622cca77) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Webhooks invocation is now defered\n\n## 0.1.1\n\n### Patch Changes\n\n- [#379](https://github.com/papra-hq/papra/pull/379) [`6cedc30`](https://github.com/papra-hq/papra/commit/6cedc30716e320946f79a0a9fd8d3b26e834f4db) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Updated dependencies\n\n## 0.1.0\n\n### Minor Changes\n\n- [#280](https://github.com/papra-hq/papra/pull/280) [`85fa5c4`](https://github.com/papra-hq/papra/commit/85fa5c43424d139f5c2752a3ad644082e61d3d67) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added webhook management\n","packages/search-parser/CHANGELOG.md":"# @papra/search-parser\n\n## 0.1.2\n\n### Patch Changes\n\n- [#1276](https://github.com/papra-hq/papra/pull/1276) [`95cfbb0`](https://github.com/papra-hq/papra/commit/95cfbb0639ba263bfc21a64729eb1e87d0a6b89a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Excluded sourcemaps from package bundle\n\n## 0.1.1\n\n### Patch Changes\n\n- [#970](https://github.com/papra-hq/papra/pull/970) [`5900674`](https://github.com/papra-hq/papra/commit/5900674083f4f55733c843b438516c8fdfff687c) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added support for quoted search filters, like `\"warranty date\":>2026`\n\n## 0.1.0\n\n### Minor Changes\n\n- [#773](https://github.com/papra-hq/papra/pull/773) [`78eb1d8`](https://github.com/papra-hq/papra/commit/78eb1d83c71cd8e66ffbce5a4abccb39209dcda6) Thanks [@CorentinTh](https://github.com/CorentinTh)! - AST optimization is activated by default\n\n### Patch Changes\n\n- [#768](https://github.com/papra-hq/papra/pull/768) [`37c3aa9`](https://github.com/papra-hq/papra/commit/37c3aa93acd0a718c0daa6704803a1f555480502) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Fix tokenization issue for negated filters with quoted value\n","packages/webhooks/tsconfig.json":"{\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"moduleDetection\": \"force\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"allowJs\": true,\n    \"strict\": true,\n    \"noImplicitOverride\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noEmit\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"skipLibCheck\": true\n  }\n}\n","packages/std/package.json":"{\n  \"name\": \"@papra/std\",\n  \"version\": \"0.0.1\",\n  \"private\": true,\n  \"description\": \"A collection of utility functions.\",\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/std\"\n  },\n  \"type\": \"module\",\n  \"main\": \"./src/index.ts\",\n  \"exports\": {\n    \".\": \"./src/index.ts\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n","packages/webhooks/package.json":"{\n  \"name\": \"@papra/webhooks\",\n  \"version\": \"0.3.4\",\n  \"description\": \"Webhooks helper library for Papra, the document archiving platform.\",\n  \"keywords\": [\n    \"archiving\",\n    \"document\",\n    \"papra\",\n    \"storage\",\n    \"webhooks\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"AGPL-3.0-or-later\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/webhooks\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"type\": \"module\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"build\": \"tsdown\",\n    \"build:watch\": \"tsdown --watch\",\n    \"dev\": \"pnpm build:watch\",\n    \"prepublishOnly\": \"pnpm run build\"\n  },\n  \"dependencies\": {\n    \"@corentinth/chisels\": \"catalog:\",\n    \"@paralleldrive/cuid2\": \"catalog:\",\n    \"ofetch\": \"catalog:\",\n    \"tsee\": \"^1.3.4\"\n  },\n  \"devDependencies\": {\n    \"standardwebhooks\": \"1.0.0\",\n    \"tsdown\": \"catalog:\",\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n","packages/webhooks/README.md":"# Papra webhooks\n\nThis package is used to trigger and easily consume webhooks from Papra.\n\n## Installation\n\n```bash\n# using pnpm\npnpm add @papra/webhooks\n\n# using npm\nnpm install @papra/webhooks\n\n# using yarn\nyarn add @papra/webhooks\n```\n\n## License\n\nThis project is licensed under the AGPL-3.0 License - see the [LICENSE](./LICENSE) file for details.\n\n## Community\n\nJoin the community on [Papra's Discord server](https://papra.app/discord) to discuss the project, ask questions, or get help.\n\n## Credits\n\nThis project is crafted with ❤️ by [Corentin Thomasset](https://corentin.tech).\nIf you find this project helpful, please consider [supporting my work](https://buymeacoffee.com/cthmsst).\n","packages/search-parser/tsconfig.json":"{\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"moduleDetection\": \"force\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"allowJs\": true,\n    \"strict\": true,\n    \"noImplicitOverride\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noEmit\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"skipLibCheck\": true\n  },\n  \"exclude\": [\"demo\"]\n}\n","packages/lecture/package.json":"{\n  \"name\": \"@papra/lecture\",\n  \"version\": \"0.5.2\",\n  \"description\": \"A simple library to extract text from files\",\n  \"keywords\": [\n    \"content\",\n    \"document\",\n    \"extract\",\n    \"file\",\n    \"lecture\",\n    \"text\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/lecture\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"generate-fixtures\": \"vitest --update\",\n    \"build\": \"tsdown\",\n    \"build:watch\": \"tsdown --watch\",\n    \"dev\": \"pnpm build:watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"prepublishOnly\": \"pnpm run build\"\n  },\n  \"dependencies\": {\n    \"@corentinth/chisels\": \"catalog:\",\n    \"@napi-rs/canvas\": \"^0.1.73\",\n    \"fast-xml-parser\": \"^5.5.10\",\n    \"jszip\": \"^3.10.1\",\n    \"rtf-parser\": \"^1.3.3\",\n    \"sharp\": \"catalog:\",\n    \"tesseract.js\": \"^7.0.0\",\n    \"tinyexec\": \"^1.0.2\",\n    \"unpdf\": \"^1.4.0\"\n  },\n  \"devDependencies\": {\n    \"@papra/std\": \"workspace:*\",\n    \"@types/node\": \"catalog:\",\n    \"@vitest/coverage-v8\": \"catalog:\",\n    \"mime\": \"4.0.7\",\n    \"tsdown\": \"catalog:\",\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n","packages/search-parser/package.json":"{\n  \"name\": \"@papra/search-parser\",\n  \"version\": \"0.1.2\",\n  \"description\": \"A typesafe, dependency-free, error-resilient AST-based search query parser for TypeScript. Supports logical operators, grouping, filters, and more.\",\n  \"keywords\": [\n    \"filter\",\n    \"operator\",\n    \"papra\",\n    \"parser\",\n    \"query\",\n    \"search\"\n  ],\n  \"homepage\": \"https://search-parser.papra.app/\",\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/search-parser\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"build\": \"tsdown\",\n    \"build:watch\": \"tsdown --watch\",\n    \"dev\": \"pnpm build:watch\",\n    \"prepublishOnly\": \"pnpm run build\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"tsdown\": \"catalog:\",\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n","packages/lecture/CHANGELOG.md":"# @papra/lecture\n\n## 0.5.2\n\n### Patch Changes\n\n- [#1469](https://github.com/papra-hq/papra/pull/1469) [`347029d`](https://github.com/papra-hq/papra/commit/347029dbd1ae997dcf537a9d04ab003b06021090) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Fixed OCR extraction for images whose rotation is stored in EXIF metadata.\n\n- [#1470](https://github.com/papra-hq/papra/pull/1470) [`a58b4f0`](https://github.com/papra-hq/papra/commit/a58b4f0e349662218ce3a0a24321d352f3ff199d) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Silenced the content extraction warning about DPI.\n\n## 0.5.1\n\n### Patch Changes\n\n- [#1276](https://github.com/papra-hq/papra/pull/1276) [`95cfbb0`](https://github.com/papra-hq/papra/commit/95cfbb0639ba263bfc21a64729eb1e87d0a6b89a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Excluded sourcemaps from package bundle\n\n- [#1184](https://github.com/papra-hq/papra/pull/1184) [`e2c3aa6`](https://github.com/papra-hq/papra/commit/e2c3aa61fca6bff8c73ce0cc83b3c59390f5088d) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Updated tesseract.js to v7 which should increase extraction performance by 15 to 35% on images, [source](https://github.com/naptha/tesseract.js/releases/tag/v7.0.0).\n\n## 0.5.0\n\n### Minor Changes\n\n- [#953](https://github.com/papra-hq/papra/pull/953) [`db6badb`](https://github.com/papra-hq/papra/commit/db6badbc3cc15d5d2b91b79602eccc3926e564eb) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added content extraction support for scanned PDFs images in 1-bit-per-pixel grayscale format.\n\n- [#948](https://github.com/papra-hq/papra/pull/948) [`725eaff`](https://github.com/papra-hq/papra/commit/725eaff4b0339ce974b91e9eeb4482f716cfa279) Thanks [@CorentinTh](https://github.com/CorentinTh)! - When extracting text from PDF documents, if neither text nor images suitable for OCR are found, the pages are rendered as images and processed with OCR. Adding support for vectorized text.\n\n### Patch Changes\n\n- [#949](https://github.com/papra-hq/papra/pull/949) [`ec740ed`](https://github.com/papra-hq/papra/commit/ec740ed168496a458a3da6a9c71d31e1d8bf2746) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added document content extraction support for .xlsx and .ods files.\n\n## 0.4.0\n\n### Minor Changes\n\n- [#621](https://github.com/papra-hq/papra/pull/621) [`8308e93`](https://github.com/papra-hq/papra/commit/8308e93fdf0c4d52b8ee1de71f1557366d6e622f) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added support for native tesseract cli when available\n\n### Patch Changes\n\n- [#627](https://github.com/papra-hq/papra/pull/627) [`5ccdf44`](https://github.com/papra-hq/papra/commit/5ccdf446f0603467ab8f8833110efbe197bc0f0f) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added logger parameter\n\n## 0.3.1\n\n### Patch Changes\n\n- [#604](https://github.com/papra-hq/papra/pull/604) [`c70d7e4`](https://github.com/papra-hq/papra/commit/c70d7e419aa84eb63c18b72d529951761de75e33) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Use provenance for releases\n\n## 0.3.0\n\n### Minor Changes\n\n- [#580](https://github.com/papra-hq/papra/pull/580) [`1228486`](https://github.com/papra-hq/papra/commit/1228486f28ec28a100665e08cb62ab65e883f952) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added text extraction support for `.docx`, `.odt`, `.rtf`, `.pptx` and `.odp`\n\n## 0.2.0\n\n### Minor Changes\n\n- [#464](https://github.com/papra-hq/papra/pull/464) [`14bc2b8`](https://github.com/papra-hq/papra/commit/14bc2b8f8d0d6605062f37188e7c57bbc61b2c1a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Ditched CommonJs build for packages\n\n## 0.1.0\n\n### Minor Changes\n\n- [#429](https://github.com/papra-hq/papra/pull/429) [`67b3b14`](https://github.com/papra-hq/papra/commit/67b3b14cdfa994874c695b9d854a93160ba6a911) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added support for scanned pdf content extraction\n","packages/lecture/README.md":"# @papra/lecture\n\n`@papra/lecture` is a robust and lightweight library for extracting text content from various file formats. Whether you're processing Document for indexing or for LLM readability, this library simplifies the task of reading text content programmatically.\n\nThis lib is used in the [Papra](https://papra.app) project to extract text from various file formats.\n\n## Features\n\n- **Wide Format Support**: Extract text from PDFs, plain text files, YAML, Markdown, CSV, and all `text/*` MIME types.\n- **Promise-based API**: Designed with asynchronous functions to provide a seamless integration experience.\n- **Extensible and Modular**: Built with future compatibility in mind. Support for more file formats is on the way.\n- **Error Handling**: Provides detailed error information when extraction fails.\n\n## Supported File Formats\n\nCurrently, `@papra/lecture` supports the following file formats:\n\n- **PDF**\n- **Plain Text** (e.g., `.txt`)\n- **YAML** (e.g., `.yaml`, `.yml`)\n- **Markdown** (e.g., `.md`)\n- **CSV**\n- All `text/*` MIME types\n- **Images OCR** (e.g., `.jpg`, `.png`, `.gif`)\n- Coming soon: **Microsoft Office Documents** (e.g., `.docx`, `.xlsx`, `.pptx`)\n- Coming soon: **eBooks** (e.g., `.epub`, `.mobi`)\n\nWe are actively working on adding support for more file formats. Stay tuned for updates!\n\n## Installation\n\nTo install the package, use npm or yarn:\n\n```bash\npnpm install @papra/lecture\n\nnpm install @papra/lecture\n\nyarn add @papra/lecture\n```\n\n## Usage\n\n### Importing the Library\n\nYou can import the library using ES Modules or CommonJS syntax:\n\n```javascript\n// ES Modules\nimport { extractText } from '@papra/lecture';\n// or CommonJS\nconst { extractText } = require('@papra/lecture');\n\nconst { textContent } = await extractText({ arrayBuffer: file, mimeType: 'application/pdf' });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n### Functions\n\n#### `extractText`\n\nExtracts text from an arrayBuffer using its MIME type.\n\n**Example**:\n\n```javascript\nconst file = await fetch('example.pdf').then((res) => res.arrayBuffer());\nconst mimeType = 'application/pdf';\n\nconst { textContent } = await extractText({ arrayBuffer: file, mimeType });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n#### `extractTextFromBlob`\n\nExtracts text from a `Blob` object (e.g., files or data retrieved from APIs).\n\n```javascript\nconst blob = new Blob(['Hello, World!'], { type: 'text/plain' });\n\nconst { textContent } = await extractTextFromBlob({ blob });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n#### `extractTextFromFile`\n\nExtracts text from a file using its MIME type.\n\n```javascript\nconst file = document.querySelector('#file-input').files[0]; // HTML File Input\n\nconst { textContent } = await extractTextFromFile({ file });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n## Contributing\n\nContributions are welcome! Feel free to open issues or submit pull requests. Let's make `@papra/lecture` better together.\n\n## Testing\n\nYou can run the tests with the following command:\n\n```bash\n# one shot\npnpm run test\n\n# watch mode\npnpm run test:watch\n```\n\nAutomated fixtures are run against the [`fixtures`](./fixtures) directory. Add files to this directory in the format `[0-9]{3}.ext` like `001.js` following the incremental pattern. The test runner will automatically pick up the new fixtures and generate a `[0-9]{3}.expected`, adding the expected output.\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for more information.\n\n## Credits and Acknowledgements\n\nThis project is crafted with ❤️ by [Corentin Thomasset](https://corentin.tech).\nIf you find this project helpful, please consider [supporting my work](https://buymeacoffee.com/cthmsst).\n","packages/search-parser/README.md":"# @papra/search-parser\n\nA search query parser library for building GitHub-style search syntax with filters, logical operators, and full-text search.\nYou can play with the parser in the [demo application](https://search-parser.papra.app/).\n\n## Features\n\n- **TypeScript-first**: Fully typed API and AST structures.\n- **Dependency-free**: No external dependencies, lightweight and fast.\n- **Error-resilient**: Best-effort parsing with detailed issue reporting.\n- **Rich syntax support**: Logical operators (AND, OR, NOT), grouping with parentheses, and field-based filters.\n- **Configurable limits**: Control maximum depth and token count to prevent abuse.\n- **Optimization**: Simplifies the parsed expression tree by removing redundancies, and basic boolean algebra simplifications.\n\n## Installation\n\n```bash\npnpm add @papra/search-parser\n# or\nnpm install @papra/search-parser\n# or\nyarn add @papra/search-parser\n```\n\n## Usage\n\n```typescript\nimport { parseSearchQuery } from '@papra/search-parser';\n\n// Simple text search\nparseSearchQuery({ query: 'foobar' });\n// { expression: { type: 'text', value: 'foobar' }, issues: [] }\n\n// Filter query\nparseSearchQuery({ query: 'tag:invoice' });\n// { expression: { type: 'filter', field: 'tag', operator: '=', value: 'invoice' }, issues: [] }\n\n// Complex query with operators\nparseSearchQuery({ query: '(tag:invoice OR tag:receipt) AND createdAt:>2024-01-01' });\n// {\n//   expression: {\n//     type: 'and',\n//     operands: [\n//       {\n//         type: 'or',\n//         operands: [\n//           { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//           { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },\n//         ],\n//       },\n//       { type: 'filter', field: 'createdAt', operator: '>', value: '2024-01-01' },\n//     ],\n//   },\n//   issues: [],\n// }\n```\n\n## Query Syntax\n\n### Text Search\n\n```\nmy invoice\n\"quoted text\"\n```\n\n### Filters\n\n```\ntag:invoice                # Equality (same as tag:=invoice)\ncreatedAt:>2024-01-01      # Comparison operators: >, <, >=, <=, =\n```\n\n### Logical Operators\n\n```\ntag:invoice AND status:active\ntag:invoice OR tag:receipt\nNOT tag:personal\n-tag:personal              # Negation shorthand\n```\n\n### Grouping\n\n```\n(tag:invoice OR tag:receipt) AND status:active\n```\n\n### Optimization\n\nYou can enable optimization to simplify the parsed expression tree:\n\n```typescript\n// The query has redundant ANDs and double negations\nconst query = 'tag:invoice AND (tag:receipt AND (tag:invoice AND NOT (NOT foo)))';\n\nparseSearchQuery({ query, optimize: false });\n// {\n//   expression: {\n//     type: 'and',\n//     operands: [\n//       { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//       {\n//         type: 'and',\n//         operands: [\n//           { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },\n//           {\n//             type: 'and',\n//             operands: [\n//               { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//               {\n//                  type: 'not',\n//                  operand: {\n//                   type: 'not',\n//                   operand: { type: 'text', value: 'foo' },\n//                 },\n//               },\n//             ],\n//           },\n//         ],\n//       },\n//     ],\n//   },\n//   issues: [],\n// }\n\nparseSearchQuery({ query, optimize: true });\n// {\n//   expression: {\n//     type: 'and',\n//     operands: [\n//       { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//       { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },\n//       { type: 'text', value: 'foo' },\n//     ],\n//   },\n//   issues: [],\n// }\n```\n\n## API\n\n```typescript\nfunction parseSearchQuery(options: {\n  query: string;\n  maxDepth?: number; // Default: 10\n  maxTokens?: number; // Default: 200\n  optimize?: boolean; // Default: true\n}): ParsedQuery;\n\ntype ParsedQuery = {\n  expression: Expression;\n  issues: Issue[];\n};\n```\n\n## Error Handling\n\nThe parser returns issues for malformed queries while doing best-effort parsing:\n\n```typescript\nimport { ERROR_CODES } from '@papra/search-parser';\n\nconst result = parseSearchQuery({ query: '(tag:invoice' });\n// {\n//   expression: { type: 'filter', ... },\n//   issues: [{ code: 'unmatched-opening-parenthesis', message: '...' }]\n// }\n```\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.\n\n## Credits\n\nThis project is crafted with ❤️ by [Corentin Thomasset](https://corentin.tech).\nIf you find this project helpful, please consider [supporting my work](https://buymeacoffee.com/cthmsst).\n","packages/lecture/tsconfig.json":"# Lecture Skill\n\nPath: `packages/lecture/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/tsconfig.json)","packages/cli/CHANGELOG.md":"# Cli Skill\n\nPath: `packages/cli/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/CHANGELOG.md)","packages/cli/package.json":"# Cli Skill\n\nPath: `packages/cli/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/package.json)","packages/cli/README.md":"# cli Documentation\n\nPath: `packages/cli/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/README.md)","packages/cli/tsconfig.json":"# Cli Skill\n\nPath: `packages/cli/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/tsconfig.json)","packages/app/CHANGELOG.md":"# App Skill\n\nPath: `packages/app/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/CHANGELOG.md)","packages/app/package.json":"# App Skill\n\nPath: `packages/app/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/package.json)","packages/app/README.md":"# app Documentation\n\nPath: `packages/app/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/README.md)","packages/api-sdk/CHANGELOG.md":"# Api-sdk Skill\n\nPath: `packages/api-sdk/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/CHANGELOG.md)","packages/api-sdk/package.json":"# Api-sdk Skill\n\nPath: `packages/api-sdk/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/package.json)","packages/api-sdk/README.md":"# api-sdk Documentation\n\nPath: `packages/api-sdk/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/README.md)","packages/api-sdk/tsconfig.json":"# Api-sdk Skill\n\nPath: `packages/api-sdk/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/tsconfig.json)","packages/search-parser/demo/package.json":"# Demo Skill\n\nPath: `packages/search-parser/demo/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/demo/package.json)","packages/search-parser/demo/tsconfig.json":"# Demo Skill\n\nPath: `packages/search-parser/demo/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/demo/tsconfig.json)","packages/lecture/fixtures/004-markdown/004.input.md":"# 004-markdown Skill\n\nPath: `packages/lecture/fixtures/004-markdown/004.input.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/fixtures/004-markdown/004.input.md)","packages/lecture/fixtures/003-yaml/003.input.yaml":"# 003-yaml Skill\n\nPath: `packages/lecture/fixtures/003-yaml/003.input.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/fixtures/003-yaml/003.input.yaml)"},"items":[{"name":"CHANGELOG.md","path":"packages/api-sdk/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/CHANGELOG.md","title":"Api-sdk Skill","category":"anthropic-skill","format":"markdown","content":"# Api-sdk Skill\n\nPath: `packages/api-sdk/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/CHANGELOG.md)","tokens":300,"sizeBytes":169},{"name":"package.json","path":"packages/api-sdk/package.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/package.json","title":"Api-sdk Skill","category":"anthropic-skill","format":"json","content":"# Api-sdk Skill\n\nPath: `packages/api-sdk/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/package.json)","tokens":300,"sizeBytes":169},{"name":"tsconfig.json","path":"packages/api-sdk/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/tsconfig.json","title":"Api-sdk Skill","category":"anthropic-skill","format":"json","content":"# Api-sdk Skill\n\nPath: `packages/api-sdk/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/tsconfig.json)","tokens":300,"sizeBytes":171},{"name":"CHANGELOG.md","path":"packages/app/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/CHANGELOG.md","title":"App Skill","category":"anthropic-skill","format":"markdown","content":"# App Skill\n\nPath: `packages/app/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/CHANGELOG.md)","tokens":300,"sizeBytes":157},{"name":"package.json","path":"packages/app/package.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/package.json","title":"App Skill","category":"anthropic-skill","format":"json","content":"# App Skill\n\nPath: `packages/app/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/package.json)","tokens":300,"sizeBytes":157},{"name":"CHANGELOG.md","path":"packages/cli/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/CHANGELOG.md","title":"Cli Skill","category":"anthropic-skill","format":"markdown","content":"# Cli Skill\n\nPath: `packages/cli/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/CHANGELOG.md)","tokens":300,"sizeBytes":157},{"name":"package.json","path":"packages/cli/package.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/package.json","title":"Cli Skill","category":"anthropic-skill","format":"json","content":"# Cli Skill\n\nPath: `packages/cli/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/package.json)","tokens":300,"sizeBytes":157},{"name":"tsconfig.json","path":"packages/cli/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/tsconfig.json","title":"Cli Skill","category":"anthropic-skill","format":"json","content":"# Cli Skill\n\nPath: `packages/cli/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/tsconfig.json)","tokens":300,"sizeBytes":159},{"name":"CHANGELOG.md","path":"packages/lecture/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/CHANGELOG.md","title":"Lecture Skill","category":"anthropic-skill","format":"markdown","content":"# @papra/lecture\n\n## 0.5.2\n\n### Patch Changes\n\n- [#1469](https://github.com/papra-hq/papra/pull/1469) [`347029d`](https://github.com/papra-hq/papra/commit/347029dbd1ae997dcf537a9d04ab003b06021090) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Fixed OCR extraction for images whose rotation is stored in EXIF metadata.\n\n- [#1470](https://github.com/papra-hq/papra/pull/1470) [`a58b4f0`](https://github.com/papra-hq/papra/commit/a58b4f0e349662218ce3a0a24321d352f3ff199d) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Silenced the content extraction warning about DPI.\n\n## 0.5.1\n\n### Patch Changes\n\n- [#1276](https://github.com/papra-hq/papra/pull/1276) [`95cfbb0`](https://github.com/papra-hq/papra/commit/95cfbb0639ba263bfc21a64729eb1e87d0a6b89a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Excluded sourcemaps from package bundle\n\n- [#1184](https://github.com/papra-hq/papra/pull/1184) [`e2c3aa6`](https://github.com/papra-hq/papra/commit/e2c3aa61fca6bff8c73ce0cc83b3c59390f5088d) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Updated tesseract.js to v7 which should increase extraction performance by 15 to 35% on images, [source](https://github.com/naptha/tesseract.js/releases/tag/v7.0.0).\n\n## 0.5.0\n\n### Minor Changes\n\n- [#953](https://github.com/papra-hq/papra/pull/953) [`db6badb`](https://github.com/papra-hq/papra/commit/db6badbc3cc15d5d2b91b79602eccc3926e564eb) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added content extraction support for scanned PDFs images in 1-bit-per-pixel grayscale format.\n\n- [#948](https://github.com/papra-hq/papra/pull/948) [`725eaff`](https://github.com/papra-hq/papra/commit/725eaff4b0339ce974b91e9eeb4482f716cfa279) Thanks [@CorentinTh](https://github.com/CorentinTh)! - When extracting text from PDF documents, if neither text nor images suitable for OCR are found, the pages are rendered as images and processed with OCR. Adding support for vectorized text.\n\n### Patch Changes\n\n- [#949](https://github.com/papra-hq/papra/pull/949) [`ec740ed`](https://github.com/papra-hq/papra/commit/ec740ed168496a458a3da6a9c71d31e1d8bf2746) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added document content extraction support for .xlsx and .ods files.\n\n## 0.4.0\n\n### Minor Changes\n\n- [#621](https://github.com/papra-hq/papra/pull/621) [`8308e93`](https://github.com/papra-hq/papra/commit/8308e93fdf0c4d52b8ee1de71f1557366d6e622f) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added support for native tesseract cli when available\n\n### Patch Changes\n\n- [#627](https://github.com/papra-hq/papra/pull/627) [`5ccdf44`](https://github.com/papra-hq/papra/commit/5ccdf446f0603467ab8f8833110efbe197bc0f0f) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added logger parameter\n\n## 0.3.1\n\n### Patch Changes\n\n- [#604](https://github.com/papra-hq/papra/pull/604) [`c70d7e4`](https://github.com/papra-hq/papra/commit/c70d7e419aa84eb63c18b72d529951761de75e33) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Use provenance for releases\n\n## 0.3.0\n\n### Minor Changes\n\n- [#580](https://github.com/papra-hq/papra/pull/580) [`1228486`](https://github.com/papra-hq/papra/commit/1228486f28ec28a100665e08cb62ab65e883f952) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added text extraction support for `.docx`, `.odt`, `.rtf`, `.pptx` and `.odp`\n\n## 0.2.0\n\n### Minor Changes\n\n- [#464](https://github.com/papra-hq/papra/pull/464) [`14bc2b8`](https://github.com/papra-hq/papra/commit/14bc2b8f8d0d6605062f37188e7c57bbc61b2c1a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Ditched CommonJs build for packages\n\n## 0.1.0\n\n### Minor Changes\n\n- [#429](https://github.com/papra-hq/papra/pull/429) [`67b3b14`](https://github.com/papra-hq/papra/commit/67b3b14cdfa994874c695b9d854a93160ba6a911) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added support for scanned pdf content extraction\n","isInternal":false,"tokens":1406,"sizeBytes":3898},{"name":"003.input.yaml","path":"packages/lecture/fixtures/003-yaml/003.input.yaml","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/fixtures/003-yaml/003.input.yaml","title":"003-yaml Skill","category":"anthropic-skill","format":"yaml","content":"# 003-yaml Skill\n\nPath: `packages/lecture/fixtures/003-yaml/003.input.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/fixtures/003-yaml/003.input.yaml)","tokens":300,"sizeBytes":210},{"name":"004.input.md","path":"packages/lecture/fixtures/004-markdown/004.input.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/fixtures/004-markdown/004.input.md","title":"004-markdown Skill","category":"anthropic-skill","format":"markdown","content":"# 004-markdown Skill\n\nPath: `packages/lecture/fixtures/004-markdown/004.input.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/fixtures/004-markdown/004.input.md)","tokens":300,"sizeBytes":218},{"name":"package.json","path":"packages/lecture/package.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/package.json","title":"@papra/lecture","category":"anthropic-skill","format":"json","content":"{\n  \"name\": \"@papra/lecture\",\n  \"version\": \"0.5.2\",\n  \"description\": \"A simple library to extract text from files\",\n  \"keywords\": [\n    \"content\",\n    \"document\",\n    \"extract\",\n    \"file\",\n    \"lecture\",\n    \"text\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/lecture\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"generate-fixtures\": \"vitest --update\",\n    \"build\": \"tsdown\",\n    \"build:watch\": \"tsdown --watch\",\n    \"dev\": \"pnpm build:watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"prepublishOnly\": \"pnpm run build\"\n  },\n  \"dependencies\": {\n    \"@corentinth/chisels\": \"catalog:\",\n    \"@napi-rs/canvas\": \"^0.1.73\",\n    \"fast-xml-parser\": \"^5.5.10\",\n    \"jszip\": \"^3.10.1\",\n    \"rtf-parser\": \"^1.3.3\",\n    \"sharp\": \"catalog:\",\n    \"tesseract.js\": \"^7.0.0\",\n    \"tinyexec\": \"^1.0.2\",\n    \"unpdf\": \"^1.4.0\"\n  },\n  \"devDependencies\": {\n    \"@papra/std\": \"workspace:*\",\n    \"@types/node\": \"catalog:\",\n    \"@vitest/coverage-v8\": \"catalog:\",\n    \"mime\": \"4.0.7\",\n    \"tsdown\": \"catalog:\",\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n","frontmatter":{"name":"@papra/lecture","version":"0.5.2","description":"A simple library to extract text from files","keywords":["content","document","extract","file","lecture","text"],"bugs":{"url":"https://github.com/papra-hq/papra/issues"},"license":"MIT","author":"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)","repository":{"type":"git","url":"https://github.com/papra-hq/papra","directory":"packages/lecture"},"files":["dist"],"type":"module","sideEffects":false,"types":"./dist/index.d.ts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"scripts":{"test":"vitest run","test:watch":"vitest watch","generate-fixtures":"vitest --update","build":"tsdown","build:watch":"tsdown --watch","dev":"pnpm build:watch","typecheck":"tsc --noEmit","prepublishOnly":"pnpm run build"},"dependencies":{"@corentinth/chisels":"catalog:","@napi-rs/canvas":"^0.1.73","fast-xml-parser":"^5.5.10","jszip":"^3.10.1","rtf-parser":"^1.3.3","sharp":"catalog:","tesseract.js":"^7.0.0","tinyexec":"^1.0.2","unpdf":"^1.4.0"},"devDependencies":{"@papra/std":"workspace:*","@types/node":"catalog:","@vitest/coverage-v8":"catalog:","mime":"4.0.7","tsdown":"catalog:","typescript":"catalog:","vitest":"catalog:"}},"isInternal":false,"tokens":516,"sizeBytes":1520},{"name":"tsconfig.json","path":"packages/lecture/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/tsconfig.json","title":"Lecture Skill","category":"anthropic-skill","format":"json","content":"# Lecture Skill\n\nPath: `packages/lecture/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/tsconfig.json)","tokens":300,"sizeBytes":171},{"name":"CHANGELOG.md","path":"packages/search-parser/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/CHANGELOG.md","title":"Search-parser Skill","category":"anthropic-skill","format":"markdown","content":"# @papra/search-parser\n\n## 0.1.2\n\n### Patch Changes\n\n- [#1276](https://github.com/papra-hq/papra/pull/1276) [`95cfbb0`](https://github.com/papra-hq/papra/commit/95cfbb0639ba263bfc21a64729eb1e87d0a6b89a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Excluded sourcemaps from package bundle\n\n## 0.1.1\n\n### Patch Changes\n\n- [#970](https://github.com/papra-hq/papra/pull/970) [`5900674`](https://github.com/papra-hq/papra/commit/5900674083f4f55733c843b438516c8fdfff687c) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added support for quoted search filters, like `\"warranty date\":>2026`\n\n## 0.1.0\n\n### Minor Changes\n\n- [#773](https://github.com/papra-hq/papra/pull/773) [`78eb1d8`](https://github.com/papra-hq/papra/commit/78eb1d83c71cd8e66ffbce5a4abccb39209dcda6) Thanks [@CorentinTh](https://github.com/CorentinTh)! - AST optimization is activated by default\n\n### Patch Changes\n\n- [#768](https://github.com/papra-hq/papra/pull/768) [`37c3aa9`](https://github.com/papra-hq/papra/commit/37c3aa93acd0a718c0daa6704803a1f555480502) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Fix tokenization issue for negated filters with quoted value\n","isInternal":false,"tokens":425,"sizeBytes":1159},{"name":"package.json","path":"packages/search-parser/demo/package.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/demo/package.json","title":"Demo Skill","category":"anthropic-skill","format":"json","content":"# Demo Skill\n\nPath: `packages/search-parser/demo/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/demo/package.json)","tokens":300,"sizeBytes":188},{"name":"tsconfig.json","path":"packages/search-parser/demo/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/demo/tsconfig.json","title":"Demo Skill","category":"anthropic-skill","format":"json","content":"# Demo Skill\n\nPath: `packages/search-parser/demo/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/demo/tsconfig.json)","tokens":300,"sizeBytes":190},{"name":"package.json","path":"packages/search-parser/package.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/package.json","title":"@papra/search-parser","category":"anthropic-skill","format":"json","content":"{\n  \"name\": \"@papra/search-parser\",\n  \"version\": \"0.1.2\",\n  \"description\": \"A typesafe, dependency-free, error-resilient AST-based search query parser for TypeScript. Supports logical operators, grouping, filters, and more.\",\n  \"keywords\": [\n    \"filter\",\n    \"operator\",\n    \"papra\",\n    \"parser\",\n    \"query\",\n    \"search\"\n  ],\n  \"homepage\": \"https://search-parser.papra.app/\",\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/search-parser\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"build\": \"tsdown\",\n    \"build:watch\": \"tsdown --watch\",\n    \"dev\": \"pnpm build:watch\",\n    \"prepublishOnly\": \"pnpm run build\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"tsdown\": \"catalog:\",\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n","frontmatter":{"name":"@papra/search-parser","version":"0.1.2","description":"A typesafe, dependency-free, error-resilient AST-based search query parser for TypeScript. Supports logical operators, grouping, filters, and more.","keywords":["filter","operator","papra","parser","query","search"],"homepage":"https://search-parser.papra.app/","bugs":{"url":"https://github.com/papra-hq/papra/issues"},"license":"MIT","author":"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)","repository":{"type":"git","url":"https://github.com/papra-hq/papra","directory":"packages/search-parser"},"files":["dist"],"type":"module","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"scripts":{"test":"vitest run","test:watch":"vitest watch","typecheck":"tsc --noEmit","build":"tsdown","build:watch":"tsdown --watch","dev":"pnpm build:watch","prepublishOnly":"pnpm run build"},"dependencies":{},"devDependencies":{"tsdown":"catalog:","typescript":"catalog:","vitest":"catalog:"}},"isInternal":false,"tokens":369,"sizeBytes":1196},{"name":"tsconfig.json","path":"packages/search-parser/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/tsconfig.json","title":"Search-parser Skill","category":"anthropic-skill","format":"json","content":"{\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"moduleDetection\": \"force\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"allowJs\": true,\n    \"strict\": true,\n    \"noImplicitOverride\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noEmit\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"skipLibCheck\": true\n  },\n  \"exclude\": [\"demo\"]\n}\n","frontmatter":{"compilerOptions":{"target":"ESNext","moduleDetection":"force","module":"esnext","moduleResolution":"bundler","resolveJsonModule":true,"allowJs":true,"strict":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"noEmit":true,"allowSyntheticDefaultImports":true,"esModuleInterop":true,"forceConsistentCasingInFileNames":true,"isolatedModules":true,"verbatimModuleSyntax":true,"skipLibCheck":true},"exclude":["demo"]},"isInternal":false,"tokens":150,"sizeBytes":536},{"name":"package.json","path":"packages/std/package.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/std/package.json","title":"@papra/std","category":"anthropic-skill","format":"json","content":"{\n  \"name\": \"@papra/std\",\n  \"version\": \"0.0.1\",\n  \"private\": true,\n  \"description\": \"A collection of utility functions.\",\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/std\"\n  },\n  \"type\": \"module\",\n  \"main\": \"./src/index.ts\",\n  \"exports\": {\n    \".\": \"./src/index.ts\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n","frontmatter":{"name":"@papra/std","version":"0.0.1","private":true,"description":"A collection of utility functions.","bugs":{"url":"https://github.com/papra-hq/papra/issues"},"license":"MIT","author":"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)","repository":{"type":"git","url":"https://github.com/papra-hq/papra","directory":"packages/std"},"type":"module","main":"./src/index.ts","exports":{".":"./src/index.ts","./package.json":"./package.json"},"scripts":{"test":"vitest run","test:watch":"vitest watch"},"dependencies":{},"devDependencies":{"typescript":"catalog:","vitest":"catalog:"}},"isInternal":false,"tokens":235,"sizeBytes":735},{"name":"CHANGELOG.md","path":"packages/webhooks/CHANGELOG.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/webhooks/CHANGELOG.md","title":"Webhooks Skill","category":"anthropic-skill","format":"markdown","content":"# @papra/webhooks\n\n## 0.3.4\n\n### Patch Changes\n\n- [#1276](https://github.com/papra-hq/papra/pull/1276) [`95cfbb0`](https://github.com/papra-hq/papra/commit/95cfbb0639ba263bfc21a64729eb1e87d0a6b89a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Excluded sourcemaps from package bundle\n\n## 0.3.3\n\n### Patch Changes\n\n- [#1099](https://github.com/papra-hq/papra/pull/1099) [`086dccb`](https://github.com/papra-hq/papra/commit/086dccbfda18c850bee50b94c48f5f110be6935c) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Export the http client type.\n\n## 0.3.2\n\n### Patch Changes\n\n- [#699](https://github.com/papra-hq/papra/pull/699) [`4342b31`](https://github.com/papra-hq/papra/commit/4342b319ea1b787b80d02090f3820797b928e115) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Fix mising prepublish script\n\n## 0.3.1\n\n### Patch Changes\n\n- [#604](https://github.com/papra-hq/papra/pull/604) [`c70d7e4`](https://github.com/papra-hq/papra/commit/c70d7e419aa84eb63c18b72d529951761de75e33) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Use provenance for releases\n\n## 0.3.0\n\n### Minor Changes\n\n- [#464](https://github.com/papra-hq/papra/pull/464) [`14bc2b8`](https://github.com/papra-hq/papra/commit/14bc2b8f8d0d6605062f37188e7c57bbc61b2c1a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Ditched CommonJs build for packages\n\n## 0.2.0\n\n### Minor Changes\n\n- [#430](https://github.com/papra-hq/papra/pull/430) [`a8cff8c`](https://github.com/papra-hq/papra/commit/a8cff8cedc062be3ed1d454e9de6e456553a4d8c) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Breaking change: updated webhooks signatures and payload format to match standard-webhook spec\n\n- [#432](https://github.com/papra-hq/papra/pull/432) [`6723baf`](https://github.com/papra-hq/papra/commit/6723baf98ad46f989fe1e1e19ad0dd25622cca77) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added new webhook events: document:updated, document:tag:added, document:tag:removed\n\n- [#432](https://github.com/papra-hq/papra/pull/432) [`6723baf`](https://github.com/papra-hq/papra/commit/6723baf98ad46f989fe1e1e19ad0dd25622cca77) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Webhooks invocation is now defered\n\n## 0.1.1\n\n### Patch Changes\n\n- [#379](https://github.com/papra-hq/papra/pull/379) [`6cedc30`](https://github.com/papra-hq/papra/commit/6cedc30716e320946f79a0a9fd8d3b26e834f4db) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Updated dependencies\n\n## 0.1.0\n\n### Minor Changes\n\n- [#280](https://github.com/papra-hq/papra/pull/280) [`85fa5c4`](https://github.com/papra-hq/papra/commit/85fa5c43424d139f5c2752a3ad644082e61d3d67) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added webhook management\n","isInternal":false,"tokens":1032,"sizeBytes":2717},{"name":"package.json","path":"packages/webhooks/package.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/webhooks/package.json","title":"@papra/webhooks","category":"anthropic-skill","format":"json","content":"{\n  \"name\": \"@papra/webhooks\",\n  \"version\": \"0.3.4\",\n  \"description\": \"Webhooks helper library for Papra, the document archiving platform.\",\n  \"keywords\": [\n    \"archiving\",\n    \"document\",\n    \"papra\",\n    \"storage\",\n    \"webhooks\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"AGPL-3.0-or-later\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/webhooks\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"type\": \"module\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"build\": \"tsdown\",\n    \"build:watch\": \"tsdown --watch\",\n    \"dev\": \"pnpm build:watch\",\n    \"prepublishOnly\": \"pnpm run build\"\n  },\n  \"dependencies\": {\n    \"@corentinth/chisels\": \"catalog:\",\n    \"@paralleldrive/cuid2\": \"catalog:\",\n    \"ofetch\": \"catalog:\",\n    \"tsee\": \"^1.3.4\"\n  },\n  \"devDependencies\": {\n    \"standardwebhooks\": \"1.0.0\",\n    \"tsdown\": \"catalog:\",\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n","frontmatter":{"name":"@papra/webhooks","version":"0.3.4","description":"Webhooks helper library for Papra, the document archiving platform.","keywords":["archiving","document","papra","storage","webhooks"],"bugs":{"url":"https://github.com/papra-hq/papra/issues"},"license":"AGPL-3.0-or-later","author":"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)","repository":{"type":"git","url":"https://github.com/papra-hq/papra","directory":"packages/webhooks"},"files":["dist"],"type":"module","types":"./dist/index.d.ts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"scripts":{"test":"vitest run","test:watch":"vitest watch","typecheck":"tsc --noEmit","build":"tsdown","build:watch":"tsdown --watch","dev":"pnpm build:watch","prepublishOnly":"pnpm run build"},"dependencies":{"@corentinth/chisels":"catalog:","@paralleldrive/cuid2":"catalog:","ofetch":"catalog:","tsee":"^1.3.4"},"devDependencies":{"standardwebhooks":"1.0.0","tsdown":"catalog:","typescript":"catalog:","vitest":"catalog:"}},"isInternal":false,"tokens":414,"sizeBytes":1257},{"name":"tsconfig.json","path":"packages/webhooks/tsconfig.json","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/webhooks/tsconfig.json","title":"Webhooks Skill","category":"anthropic-skill","format":"json","content":"{\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"moduleDetection\": \"force\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"allowJs\": true,\n    \"strict\": true,\n    \"noImplicitOverride\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noEmit\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"skipLibCheck\": true\n  }\n}\n","frontmatter":{"compilerOptions":{"target":"ESNext","moduleDetection":"force","module":"esnext","moduleResolution":"bundler","resolveJsonModule":true,"allowJs":true,"strict":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"noEmit":true,"allowSyntheticDefaultImports":true,"esModuleInterop":true,"forceConsistentCasingInFileNames":true,"isolatedModules":true,"verbatimModuleSyntax":true,"skipLibCheck":true}},"isInternal":false,"tokens":143,"sizeBytes":513},{"name":"README.md","path":"packages/api-sdk/README.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/README.md","title":"api-sdk Documentation","category":"plugin-manifest","format":"markdown","content":"# api-sdk Documentation\n\nPath: `packages/api-sdk/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/README.md)","tokens":300,"sizeBytes":171},{"name":"README.md","path":"packages/app/README.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/README.md","title":"app Documentation","category":"plugin-manifest","format":"markdown","content":"# app Documentation\n\nPath: `packages/app/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/README.md)","tokens":300,"sizeBytes":159},{"name":"README.md","path":"packages/cli/README.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/README.md","title":"cli Documentation","category":"plugin-manifest","format":"markdown","content":"# cli Documentation\n\nPath: `packages/cli/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/README.md)","tokens":300,"sizeBytes":159},{"name":"README.md","path":"packages/lecture/README.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/README.md","title":"lecture Documentation","category":"plugin-manifest","format":"markdown","content":"# @papra/lecture\n\n`@papra/lecture` is a robust and lightweight library for extracting text content from various file formats. Whether you're processing Document for indexing or for LLM readability, this library simplifies the task of reading text content programmatically.\n\nThis lib is used in the [Papra](https://papra.app) project to extract text from various file formats.\n\n## Features\n\n- **Wide Format Support**: Extract text from PDFs, plain text files, YAML, Markdown, CSV, and all `text/*` MIME types.\n- **Promise-based API**: Designed with asynchronous functions to provide a seamless integration experience.\n- **Extensible and Modular**: Built with future compatibility in mind. Support for more file formats is on the way.\n- **Error Handling**: Provides detailed error information when extraction fails.\n\n## Supported File Formats\n\nCurrently, `@papra/lecture` supports the following file formats:\n\n- **PDF**\n- **Plain Text** (e.g., `.txt`)\n- **YAML** (e.g., `.yaml`, `.yml`)\n- **Markdown** (e.g., `.md`)\n- **CSV**\n- All `text/*` MIME types\n- **Images OCR** (e.g., `.jpg`, `.png`, `.gif`)\n- Coming soon: **Microsoft Office Documents** (e.g., `.docx`, `.xlsx`, `.pptx`)\n- Coming soon: **eBooks** (e.g., `.epub`, `.mobi`)\n\nWe are actively working on adding support for more file formats. Stay tuned for updates!\n\n## Installation\n\nTo install the package, use npm or yarn:\n\n```bash\npnpm install @papra/lecture\n\nnpm install @papra/lecture\n\nyarn add @papra/lecture\n```\n\n## Usage\n\n### Importing the Library\n\nYou can import the library using ES Modules or CommonJS syntax:\n\n```javascript\n// ES Modules\nimport { extractText } from '@papra/lecture';\n// or CommonJS\nconst { extractText } = require('@papra/lecture');\n\nconst { textContent } = await extractText({ arrayBuffer: file, mimeType: 'application/pdf' });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n### Functions\n\n#### `extractText`\n\nExtracts text from an arrayBuffer using its MIME type.\n\n**Example**:\n\n```javascript\nconst file = await fetch('example.pdf').then((res) => res.arrayBuffer());\nconst mimeType = 'application/pdf';\n\nconst { textContent } = await extractText({ arrayBuffer: file, mimeType });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n#### `extractTextFromBlob`\n\nExtracts text from a `Blob` object (e.g., files or data retrieved from APIs).\n\n```javascript\nconst blob = new Blob(['Hello, World!'], { type: 'text/plain' });\n\nconst { textContent } = await extractTextFromBlob({ blob });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n#### `extractTextFromFile`\n\nExtracts text from a file using its MIME type.\n\n```javascript\nconst file = document.querySelector('#file-input').files[0]; // HTML File Input\n\nconst { textContent } = await extractTextFromFile({ file });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n## Contributing\n\nContributions are welcome! Feel free to open issues or submit pull requests. Let's make `@papra/lecture` better together.\n\n## Testing\n\nYou can run the tests with the following command:\n\n```bash\n# one shot\npnpm run test\n\n# watch mode\npnpm run test:watch\n```\n\nAutomated fixtures are run against the [`fixtures`](./fixtures) directory. Add files to this directory in the format `[0-9]{3}.ext` like `001.js` following the incremental pattern. The test runner will automatically pick up the new fixtures and generate a `[0-9]{3}.expected`, adding the expected output.\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for more information.\n\n## Credits and Acknowledgements\n\nThis project is crafted with ❤️ by [Corentin Thomasset](https://corentin.tech).\nIf you find this project helpful, please consider [supporting my work](https://buymeacoffee.com/cthmsst).\n","isInternal":false,"tokens":911,"sizeBytes":3723},{"name":"README.md","path":"packages/search-parser/README.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/README.md","title":"search-parser Documentation","category":"plugin-manifest","format":"markdown","content":"# @papra/search-parser\n\nA search query parser library for building GitHub-style search syntax with filters, logical operators, and full-text search.\nYou can play with the parser in the [demo application](https://search-parser.papra.app/).\n\n## Features\n\n- **TypeScript-first**: Fully typed API and AST structures.\n- **Dependency-free**: No external dependencies, lightweight and fast.\n- **Error-resilient**: Best-effort parsing with detailed issue reporting.\n- **Rich syntax support**: Logical operators (AND, OR, NOT), grouping with parentheses, and field-based filters.\n- **Configurable limits**: Control maximum depth and token count to prevent abuse.\n- **Optimization**: Simplifies the parsed expression tree by removing redundancies, and basic boolean algebra simplifications.\n\n## Installation\n\n```bash\npnpm add @papra/search-parser\n# or\nnpm install @papra/search-parser\n# or\nyarn add @papra/search-parser\n```\n\n## Usage\n\n```typescript\nimport { parseSearchQuery } from '@papra/search-parser';\n\n// Simple text search\nparseSearchQuery({ query: 'foobar' });\n// { expression: { type: 'text', value: 'foobar' }, issues: [] }\n\n// Filter query\nparseSearchQuery({ query: 'tag:invoice' });\n// { expression: { type: 'filter', field: 'tag', operator: '=', value: 'invoice' }, issues: [] }\n\n// Complex query with operators\nparseSearchQuery({ query: '(tag:invoice OR tag:receipt) AND createdAt:>2024-01-01' });\n// {\n//   expression: {\n//     type: 'and',\n//     operands: [\n//       {\n//         type: 'or',\n//         operands: [\n//           { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//           { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },\n//         ],\n//       },\n//       { type: 'filter', field: 'createdAt', operator: '>', value: '2024-01-01' },\n//     ],\n//   },\n//   issues: [],\n// }\n```\n\n## Query Syntax\n\n### Text Search\n\n```\nmy invoice\n\"quoted text\"\n```\n\n### Filters\n\n```\ntag:invoice                # Equality (same as tag:=invoice)\ncreatedAt:>2024-01-01      # Comparison operators: >, <, >=, <=, =\n```\n\n### Logical Operators\n\n```\ntag:invoice AND status:active\ntag:invoice OR tag:receipt\nNOT tag:personal\n-tag:personal              # Negation shorthand\n```\n\n### Grouping\n\n```\n(tag:invoice OR tag:receipt) AND status:active\n```\n\n### Optimization\n\nYou can enable optimization to simplify the parsed expression tree:\n\n```typescript\n// The query has redundant ANDs and double negations\nconst query = 'tag:invoice AND (tag:receipt AND (tag:invoice AND NOT (NOT foo)))';\n\nparseSearchQuery({ query, optimize: false });\n// {\n//   expression: {\n//     type: 'and',\n//     operands: [\n//       { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//       {\n//         type: 'and',\n//         operands: [\n//           { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },\n//           {\n//             type: 'and',\n//             operands: [\n//               { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//               {\n//                  type: 'not',\n//                  operand: {\n//                   type: 'not',\n//                   operand: { type: 'text', value: 'foo' },\n//                 },\n//               },\n//             ],\n//           },\n//         ],\n//       },\n//     ],\n//   },\n//   issues: [],\n// }\n\nparseSearchQuery({ query, optimize: true });\n// {\n//   expression: {\n//     type: 'and',\n//     operands: [\n//       { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//       { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },\n//       { type: 'text', value: 'foo' },\n//     ],\n//   },\n//   issues: [],\n// }\n```\n\n## API\n\n```typescript\nfunction parseSearchQuery(options: {\n  query: string;\n  maxDepth?: number; // Default: 10\n  maxTokens?: number; // Default: 200\n  optimize?: boolean; // Default: true\n}): ParsedQuery;\n\ntype ParsedQuery = {\n  expression: Expression;\n  issues: Issue[];\n};\n```\n\n## Error Handling\n\nThe parser returns issues for malformed queries while doing best-effort parsing:\n\n```typescript\nimport { ERROR_CODES } from '@papra/search-parser';\n\nconst result = parseSearchQuery({ query: '(tag:invoice' });\n// {\n//   expression: { type: 'filter', ... },\n//   issues: [{ code: 'unmatched-opening-parenthesis', message: '...' }]\n// }\n```\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.\n\n## Credits\n\nThis project is crafted with ❤️ by [Corentin Thomasset](https://corentin.tech).\nIf you find this project helpful, please consider [supporting my work](https://buymeacoffee.com/cthmsst).\n","isInternal":false,"tokens":1169,"sizeBytes":4611},{"name":"README.md","path":"packages/webhooks/README.md","rawUrl":"https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/webhooks/README.md","title":"webhooks Documentation","category":"plugin-manifest","format":"markdown","content":"# Papra webhooks\n\nThis package is used to trigger and easily consume webhooks from Papra.\n\n## Installation\n\n```bash\n# using pnpm\npnpm add @papra/webhooks\n\n# using npm\nnpm install @papra/webhooks\n\n# using yarn\nyarn add @papra/webhooks\n```\n\n## License\n\nThis project is licensed under the AGPL-3.0 License - see the [LICENSE](./LICENSE) file for details.\n\n## Community\n\nJoin the community on [Papra's Discord server](https://papra.app/discord) to discuss the project, ask questions, or get help.\n\n## Credits\n\nThis project is crafted with ❤️ by [Corentin Thomasset](https://corentin.tech).\nIf you find this project helpful, please consider [supporting my work](https://buymeacoffee.com/cthmsst).\n","isInternal":false,"tokens":188,"sizeBytes":696}],"systemPromptSnippet":"<yakaai_skills repo=\"papra-hq/papra\">\n<!-- File: packages/api-sdk/CHANGELOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Api-sdk Skill\n\nPath: `packages/api-sdk/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/CHANGELOG.md)\n\n<!-- File: packages/api-sdk/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Api-sdk Skill\n\nPath: `packages/api-sdk/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/package.json)\n\n<!-- File: packages/api-sdk/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Api-sdk Skill\n\nPath: `packages/api-sdk/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/tsconfig.json)\n\n<!-- File: packages/app/CHANGELOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# App Skill\n\nPath: `packages/app/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/CHANGELOG.md)\n\n<!-- File: packages/app/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# App Skill\n\nPath: `packages/app/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/package.json)\n\n<!-- File: packages/cli/CHANGELOG.md (Tokens: ~300 | Category: anthropic-skill) -->\n# Cli Skill\n\nPath: `packages/cli/CHANGELOG.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/CHANGELOG.md)\n\n<!-- File: packages/cli/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Cli Skill\n\nPath: `packages/cli/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/package.json)\n\n<!-- File: packages/cli/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Cli Skill\n\nPath: `packages/cli/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/tsconfig.json)\n\n<!-- File: packages/lecture/CHANGELOG.md (Tokens: ~1406 | Category: anthropic-skill) -->\n# @papra/lecture\n\n## 0.5.2\n\n### Patch Changes\n\n- [#1469](https://github.com/papra-hq/papra/pull/1469) [`347029d`](https://github.com/papra-hq/papra/commit/347029dbd1ae997dcf537a9d04ab003b06021090) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Fixed OCR extraction for images whose rotation is stored in EXIF metadata.\n\n- [#1470](https://github.com/papra-hq/papra/pull/1470) [`a58b4f0`](https://github.com/papra-hq/papra/commit/a58b4f0e349662218ce3a0a24321d352f3ff199d) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Silenced the content extraction warning about DPI.\n\n## 0.5.1\n\n### Patch Changes\n\n- [#1276](https://github.com/papra-hq/papra/pull/1276) [`95cfbb0`](https://github.com/papra-hq/papra/commit/95cfbb0639ba263bfc21a64729eb1e87d0a6b89a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Excluded sourcemaps from package bundle\n\n- [#1184](https://github.com/papra-hq/papra/pull/1184) [`e2c3aa6`](https://github.com/papra-hq/papra/commit/e2c3aa61fca6bff8c73ce0cc83b3c59390f5088d) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Updated tesseract.js to v7 which should increase extraction performance by 15 to 35% on images, [source](https://github.com/naptha/tesseract.js/releases/tag/v7.0.0).\n\n## 0.5.0\n\n### Minor Changes\n\n- [#953](https://github.com/papra-hq/papra/pull/953) [`db6badb`](https://github.com/papra-hq/papra/commit/db6badbc3cc15d5d2b91b79602eccc3926e564eb) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added content extraction support for scanned PDFs images in 1-bit-per-pixel grayscale format.\n\n- [#948](https://github.com/papra-hq/papra/pull/948) [`725eaff`](https://github.com/papra-hq/papra/commit/725eaff4b0339ce974b91e9eeb4482f716cfa279) Thanks [@CorentinTh](https://github.com/CorentinTh)! - When extracting text from PDF documents, if neither text nor images suitable for OCR are found, the pages are rendered as images and processed with OCR. Adding support for vectorized text.\n\n### Patch Changes\n\n- [#949](https://github.com/papra-hq/papra/pull/949) [`ec740ed`](https://github.com/papra-hq/papra/commit/ec740ed168496a458a3da6a9c71d31e1d8bf2746) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added document content extraction support for .xlsx and .ods files.\n\n## 0.4.0\n\n### Minor Changes\n\n- [#621](https://github.com/papra-hq/papra/pull/621) [`8308e93`](https://github.com/papra-hq/papra/commit/8308e93fdf0c4d52b8ee1de71f1557366d6e622f) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added support for native tesseract cli when available\n\n### Patch Changes\n\n- [#627](https://github.com/papra-hq/papra/pull/627) [`5ccdf44`](https://github.com/papra-hq/papra/commit/5ccdf446f0603467ab8f8833110efbe197bc0f0f) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added logger parameter\n\n## 0.3.1\n\n### Patch Changes\n\n- [#604](https://github.com/papra-hq/papra/pull/604) [`c70d7e4`](https://github.com/papra-hq/papra/commit/c70d7e419aa84eb63c18b72d529951761de75e33) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Use provenance for releases\n\n## 0.3.0\n\n### Minor Changes\n\n- [#580](https://github.com/papra-hq/papra/pull/580) [`1228486`](https://github.com/papra-hq/papra/commit/1228486f28ec28a100665e08cb62ab65e883f952) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added text extraction support for `.docx`, `.odt`, `.rtf`, `.pptx` and `.odp`\n\n## 0.2.0\n\n### Minor Changes\n\n- [#464](https://github.com/papra-hq/papra/pull/464) [`14bc2b8`](https://github.com/papra-hq/papra/commit/14bc2b8f8d0d6605062f37188e7c57bbc61b2c1a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Ditched CommonJs build for packages\n\n## 0.1.0\n\n### Minor Changes\n\n- [#429](https://github.com/papra-hq/papra/pull/429) [`67b3b14`](https://github.com/papra-hq/papra/commit/67b3b14cdfa994874c695b9d854a93160ba6a911) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added support for scanned pdf content extraction\n\n<!-- File: packages/lecture/fixtures/003-yaml/003.input.yaml (Tokens: ~300 | Category: anthropic-skill) -->\n# 003-yaml Skill\n\nPath: `packages/lecture/fixtures/003-yaml/003.input.yaml`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/fixtures/003-yaml/003.input.yaml)\n\n<!-- File: packages/lecture/fixtures/004-markdown/004.input.md (Tokens: ~300 | Category: anthropic-skill) -->\n# 004-markdown Skill\n\nPath: `packages/lecture/fixtures/004-markdown/004.input.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/fixtures/004-markdown/004.input.md)\n\n<!-- File: packages/lecture/package.json (Tokens: ~516 | Category: anthropic-skill) -->\n{\n  \"name\": \"@papra/lecture\",\n  \"version\": \"0.5.2\",\n  \"description\": \"A simple library to extract text from files\",\n  \"keywords\": [\n    \"content\",\n    \"document\",\n    \"extract\",\n    \"file\",\n    \"lecture\",\n    \"text\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/lecture\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"type\": \"module\",\n  \"sideEffects\": false,\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"generate-fixtures\": \"vitest --update\",\n    \"build\": \"tsdown\",\n    \"build:watch\": \"tsdown --watch\",\n    \"dev\": \"pnpm build:watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"prepublishOnly\": \"pnpm run build\"\n  },\n  \"dependencies\": {\n    \"@corentinth/chisels\": \"catalog:\",\n    \"@napi-rs/canvas\": \"^0.1.73\",\n    \"fast-xml-parser\": \"^5.5.10\",\n    \"jszip\": \"^3.10.1\",\n    \"rtf-parser\": \"^1.3.3\",\n    \"sharp\": \"catalog:\",\n    \"tesseract.js\": \"^7.0.0\",\n    \"tinyexec\": \"^1.0.2\",\n    \"unpdf\": \"^1.4.0\"\n  },\n  \"devDependencies\": {\n    \"@papra/std\": \"workspace:*\",\n    \"@types/node\": \"catalog:\",\n    \"@vitest/coverage-v8\": \"catalog:\",\n    \"mime\": \"4.0.7\",\n    \"tsdown\": \"catalog:\",\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n\n<!-- File: packages/lecture/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Lecture Skill\n\nPath: `packages/lecture/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/lecture/tsconfig.json)\n\n<!-- File: packages/search-parser/CHANGELOG.md (Tokens: ~425 | Category: anthropic-skill) -->\n# @papra/search-parser\n\n## 0.1.2\n\n### Patch Changes\n\n- [#1276](https://github.com/papra-hq/papra/pull/1276) [`95cfbb0`](https://github.com/papra-hq/papra/commit/95cfbb0639ba263bfc21a64729eb1e87d0a6b89a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Excluded sourcemaps from package bundle\n\n## 0.1.1\n\n### Patch Changes\n\n- [#970](https://github.com/papra-hq/papra/pull/970) [`5900674`](https://github.com/papra-hq/papra/commit/5900674083f4f55733c843b438516c8fdfff687c) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added support for quoted search filters, like `\"warranty date\":>2026`\n\n## 0.1.0\n\n### Minor Changes\n\n- [#773](https://github.com/papra-hq/papra/pull/773) [`78eb1d8`](https://github.com/papra-hq/papra/commit/78eb1d83c71cd8e66ffbce5a4abccb39209dcda6) Thanks [@CorentinTh](https://github.com/CorentinTh)! - AST optimization is activated by default\n\n### Patch Changes\n\n- [#768](https://github.com/papra-hq/papra/pull/768) [`37c3aa9`](https://github.com/papra-hq/papra/commit/37c3aa93acd0a718c0daa6704803a1f555480502) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Fix tokenization issue for negated filters with quoted value\n\n<!-- File: packages/search-parser/demo/package.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Demo Skill\n\nPath: `packages/search-parser/demo/package.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/demo/package.json)\n\n<!-- File: packages/search-parser/demo/tsconfig.json (Tokens: ~300 | Category: anthropic-skill) -->\n# Demo Skill\n\nPath: `packages/search-parser/demo/tsconfig.json`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/search-parser/demo/tsconfig.json)\n\n<!-- File: packages/search-parser/package.json (Tokens: ~369 | Category: anthropic-skill) -->\n{\n  \"name\": \"@papra/search-parser\",\n  \"version\": \"0.1.2\",\n  \"description\": \"A typesafe, dependency-free, error-resilient AST-based search query parser for TypeScript. Supports logical operators, grouping, filters, and more.\",\n  \"keywords\": [\n    \"filter\",\n    \"operator\",\n    \"papra\",\n    \"parser\",\n    \"query\",\n    \"search\"\n  ],\n  \"homepage\": \"https://search-parser.papra.app/\",\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/search-parser\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"type\": \"module\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"build\": \"tsdown\",\n    \"build:watch\": \"tsdown --watch\",\n    \"dev\": \"pnpm build:watch\",\n    \"prepublishOnly\": \"pnpm run build\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"tsdown\": \"catalog:\",\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n\n<!-- File: packages/search-parser/tsconfig.json (Tokens: ~150 | Category: anthropic-skill) -->\n{\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"moduleDetection\": \"force\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"allowJs\": true,\n    \"strict\": true,\n    \"noImplicitOverride\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noEmit\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"skipLibCheck\": true\n  },\n  \"exclude\": [\"demo\"]\n}\n\n<!-- File: packages/std/package.json (Tokens: ~235 | Category: anthropic-skill) -->\n{\n  \"name\": \"@papra/std\",\n  \"version\": \"0.0.1\",\n  \"private\": true,\n  \"description\": \"A collection of utility functions.\",\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"MIT\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/std\"\n  },\n  \"type\": \"module\",\n  \"main\": \"./src/index.ts\",\n  \"exports\": {\n    \".\": \"./src/index.ts\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\"\n  },\n  \"dependencies\": {},\n  \"devDependencies\": {\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n\n<!-- File: packages/webhooks/CHANGELOG.md (Tokens: ~1032 | Category: anthropic-skill) -->\n# @papra/webhooks\n\n## 0.3.4\n\n### Patch Changes\n\n- [#1276](https://github.com/papra-hq/papra/pull/1276) [`95cfbb0`](https://github.com/papra-hq/papra/commit/95cfbb0639ba263bfc21a64729eb1e87d0a6b89a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Excluded sourcemaps from package bundle\n\n## 0.3.3\n\n### Patch Changes\n\n- [#1099](https://github.com/papra-hq/papra/pull/1099) [`086dccb`](https://github.com/papra-hq/papra/commit/086dccbfda18c850bee50b94c48f5f110be6935c) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Export the http client type.\n\n## 0.3.2\n\n### Patch Changes\n\n- [#699](https://github.com/papra-hq/papra/pull/699) [`4342b31`](https://github.com/papra-hq/papra/commit/4342b319ea1b787b80d02090f3820797b928e115) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Fix mising prepublish script\n\n## 0.3.1\n\n### Patch Changes\n\n- [#604](https://github.com/papra-hq/papra/pull/604) [`c70d7e4`](https://github.com/papra-hq/papra/commit/c70d7e419aa84eb63c18b72d529951761de75e33) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Use provenance for releases\n\n## 0.3.0\n\n### Minor Changes\n\n- [#464](https://github.com/papra-hq/papra/pull/464) [`14bc2b8`](https://github.com/papra-hq/papra/commit/14bc2b8f8d0d6605062f37188e7c57bbc61b2c1a) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Ditched CommonJs build for packages\n\n## 0.2.0\n\n### Minor Changes\n\n- [#430](https://github.com/papra-hq/papra/pull/430) [`a8cff8c`](https://github.com/papra-hq/papra/commit/a8cff8cedc062be3ed1d454e9de6e456553a4d8c) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Breaking change: updated webhooks signatures and payload format to match standard-webhook spec\n\n- [#432](https://github.com/papra-hq/papra/pull/432) [`6723baf`](https://github.com/papra-hq/papra/commit/6723baf98ad46f989fe1e1e19ad0dd25622cca77) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added new webhook events: document:updated, document:tag:added, document:tag:removed\n\n- [#432](https://github.com/papra-hq/papra/pull/432) [`6723baf`](https://github.com/papra-hq/papra/commit/6723baf98ad46f989fe1e1e19ad0dd25622cca77) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Webhooks invocation is now defered\n\n## 0.1.1\n\n### Patch Changes\n\n- [#379](https://github.com/papra-hq/papra/pull/379) [`6cedc30`](https://github.com/papra-hq/papra/commit/6cedc30716e320946f79a0a9fd8d3b26e834f4db) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Updated dependencies\n\n## 0.1.0\n\n### Minor Changes\n\n- [#280](https://github.com/papra-hq/papra/pull/280) [`85fa5c4`](https://github.com/papra-hq/papra/commit/85fa5c43424d139f5c2752a3ad644082e61d3d67) Thanks [@CorentinTh](https://github.com/CorentinTh)! - Added webhook management\n\n<!-- File: packages/webhooks/package.json (Tokens: ~414 | Category: anthropic-skill) -->\n{\n  \"name\": \"@papra/webhooks\",\n  \"version\": \"0.3.4\",\n  \"description\": \"Webhooks helper library for Papra, the document archiving platform.\",\n  \"keywords\": [\n    \"archiving\",\n    \"document\",\n    \"papra\",\n    \"storage\",\n    \"webhooks\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/papra-hq/papra/issues\"\n  },\n  \"license\": \"AGPL-3.0-or-later\",\n  \"author\": \"Corentin Thomasset <corentinth@proton.me> (https://corentin.tech)\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/papra-hq/papra\",\n    \"directory\": \"packages/webhooks\"\n  },\n  \"files\": [\n    \"dist\"\n  ],\n  \"type\": \"module\",\n  \"types\": \"./dist/index.d.ts\",\n  \"exports\": {\n    \".\": \"./dist/index.mjs\",\n    \"./package.json\": \"./package.json\"\n  },\n  \"scripts\": {\n    \"test\": \"vitest run\",\n    \"test:watch\": \"vitest watch\",\n    \"typecheck\": \"tsc --noEmit\",\n    \"build\": \"tsdown\",\n    \"build:watch\": \"tsdown --watch\",\n    \"dev\": \"pnpm build:watch\",\n    \"prepublishOnly\": \"pnpm run build\"\n  },\n  \"dependencies\": {\n    \"@corentinth/chisels\": \"catalog:\",\n    \"@paralleldrive/cuid2\": \"catalog:\",\n    \"ofetch\": \"catalog:\",\n    \"tsee\": \"^1.3.4\"\n  },\n  \"devDependencies\": {\n    \"standardwebhooks\": \"1.0.0\",\n    \"tsdown\": \"catalog:\",\n    \"typescript\": \"catalog:\",\n    \"vitest\": \"catalog:\"\n  }\n}\n\n<!-- File: packages/webhooks/tsconfig.json (Tokens: ~143 | Category: anthropic-skill) -->\n{\n  \"compilerOptions\": {\n    \"target\": \"ESNext\",\n    \"moduleDetection\": \"force\",\n    \"module\": \"esnext\",\n    \"moduleResolution\": \"bundler\",\n    \"resolveJsonModule\": true,\n    \"allowJs\": true,\n    \"strict\": true,\n    \"noImplicitOverride\": true,\n    \"noUncheckedIndexedAccess\": true,\n    \"noEmit\": true,\n    \"allowSyntheticDefaultImports\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"isolatedModules\": true,\n    \"verbatimModuleSyntax\": true,\n    \"skipLibCheck\": true\n  }\n}\n\n<!-- File: packages/api-sdk/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# api-sdk Documentation\n\nPath: `packages/api-sdk/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/api-sdk/README.md)\n\n<!-- File: packages/app/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# app Documentation\n\nPath: `packages/app/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/app/README.md)\n\n<!-- File: packages/cli/README.md (Tokens: ~300 | Category: plugin-manifest) -->\n# cli Documentation\n\nPath: `packages/cli/README.md`\n\n[View Raw Content on GitHub](https://raw.githubusercontent.com/papra-hq/papra/HEAD/packages/cli/README.md)\n\n<!-- File: packages/lecture/README.md (Tokens: ~911 | Category: plugin-manifest) -->\n# @papra/lecture\n\n`@papra/lecture` is a robust and lightweight library for extracting text content from various file formats. Whether you're processing Document for indexing or for LLM readability, this library simplifies the task of reading text content programmatically.\n\nThis lib is used in the [Papra](https://papra.app) project to extract text from various file formats.\n\n## Features\n\n- **Wide Format Support**: Extract text from PDFs, plain text files, YAML, Markdown, CSV, and all `text/*` MIME types.\n- **Promise-based API**: Designed with asynchronous functions to provide a seamless integration experience.\n- **Extensible and Modular**: Built with future compatibility in mind. Support for more file formats is on the way.\n- **Error Handling**: Provides detailed error information when extraction fails.\n\n## Supported File Formats\n\nCurrently, `@papra/lecture` supports the following file formats:\n\n- **PDF**\n- **Plain Text** (e.g., `.txt`)\n- **YAML** (e.g., `.yaml`, `.yml`)\n- **Markdown** (e.g., `.md`)\n- **CSV**\n- All `text/*` MIME types\n- **Images OCR** (e.g., `.jpg`, `.png`, `.gif`)\n- Coming soon: **Microsoft Office Documents** (e.g., `.docx`, `.xlsx`, `.pptx`)\n- Coming soon: **eBooks** (e.g., `.epub`, `.mobi`)\n\nWe are actively working on adding support for more file formats. Stay tuned for updates!\n\n## Installation\n\nTo install the package, use npm or yarn:\n\n```bash\npnpm install @papra/lecture\n\nnpm install @papra/lecture\n\nyarn add @papra/lecture\n```\n\n## Usage\n\n### Importing the Library\n\nYou can import the library using ES Modules or CommonJS syntax:\n\n```javascript\n// ES Modules\nimport { extractText } from '@papra/lecture';\n// or CommonJS\nconst { extractText } = require('@papra/lecture');\n\nconst { textContent } = await extractText({ arrayBuffer: file, mimeType: 'application/pdf' });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n### Functions\n\n#### `extractText`\n\nExtracts text from an arrayBuffer using its MIME type.\n\n**Example**:\n\n```javascript\nconst file = await fetch('example.pdf').then((res) => res.arrayBuffer());\nconst mimeType = 'application/pdf';\n\nconst { textContent } = await extractText({ arrayBuffer: file, mimeType });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n#### `extractTextFromBlob`\n\nExtracts text from a `Blob` object (e.g., files or data retrieved from APIs).\n\n```javascript\nconst blob = new Blob(['Hello, World!'], { type: 'text/plain' });\n\nconst { textContent } = await extractTextFromBlob({ blob });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n#### `extractTextFromFile`\n\nExtracts text from a file using its MIME type.\n\n```javascript\nconst file = document.querySelector('#file-input').files[0]; // HTML File Input\n\nconst { textContent } = await extractTextFromFile({ file });\n\nconsole.log('Extracted Text:', textContent);\n```\n\n## Contributing\n\nContributions are welcome! Feel free to open issues or submit pull requests. Let's make `@papra/lecture` better together.\n\n## Testing\n\nYou can run the tests with the following command:\n\n```bash\n# one shot\npnpm run test\n\n# watch mode\npnpm run test:watch\n```\n\nAutomated fixtures are run against the [`fixtures`](./fixtures) directory. Add files to this directory in the format `[0-9]{3}.ext` like `001.js` following the incremental pattern. The test runner will automatically pick up the new fixtures and generate a `[0-9]{3}.expected`, adding the expected output.\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for more information.\n\n## Credits and Acknowledgements\n\nThis project is crafted with ❤️ by [Corentin Thomasset](https://corentin.tech).\nIf you find this project helpful, please consider [supporting my work](https://buymeacoffee.com/cthmsst).\n\n<!-- File: packages/search-parser/README.md (Tokens: ~1169 | Category: plugin-manifest) -->\n# @papra/search-parser\n\nA search query parser library for building GitHub-style search syntax with filters, logical operators, and full-text search.\nYou can play with the parser in the [demo application](https://search-parser.papra.app/).\n\n## Features\n\n- **TypeScript-first**: Fully typed API and AST structures.\n- **Dependency-free**: No external dependencies, lightweight and fast.\n- **Error-resilient**: Best-effort parsing with detailed issue reporting.\n- **Rich syntax support**: Logical operators (AND, OR, NOT), grouping with parentheses, and field-based filters.\n- **Configurable limits**: Control maximum depth and token count to prevent abuse.\n- **Optimization**: Simplifies the parsed expression tree by removing redundancies, and basic boolean algebra simplifications.\n\n## Installation\n\n```bash\npnpm add @papra/search-parser\n# or\nnpm install @papra/search-parser\n# or\nyarn add @papra/search-parser\n```\n\n## Usage\n\n```typescript\nimport { parseSearchQuery } from '@papra/search-parser';\n\n// Simple text search\nparseSearchQuery({ query: 'foobar' });\n// { expression: { type: 'text', value: 'foobar' }, issues: [] }\n\n// Filter query\nparseSearchQuery({ query: 'tag:invoice' });\n// { expression: { type: 'filter', field: 'tag', operator: '=', value: 'invoice' }, issues: [] }\n\n// Complex query with operators\nparseSearchQuery({ query: '(tag:invoice OR tag:receipt) AND createdAt:>2024-01-01' });\n// {\n//   expression: {\n//     type: 'and',\n//     operands: [\n//       {\n//         type: 'or',\n//         operands: [\n//           { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//           { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },\n//         ],\n//       },\n//       { type: 'filter', field: 'createdAt', operator: '>', value: '2024-01-01' },\n//     ],\n//   },\n//   issues: [],\n// }\n```\n\n## Query Syntax\n\n### Text Search\n\n```\nmy invoice\n\"quoted text\"\n```\n\n### Filters\n\n```\ntag:invoice                # Equality (same as tag:=invoice)\ncreatedAt:>2024-01-01      # Comparison operators: >, <, >=, <=, =\n```\n\n### Logical Operators\n\n```\ntag:invoice AND status:active\ntag:invoice OR tag:receipt\nNOT tag:personal\n-tag:personal              # Negation shorthand\n```\n\n### Grouping\n\n```\n(tag:invoice OR tag:receipt) AND status:active\n```\n\n### Optimization\n\nYou can enable optimization to simplify the parsed expression tree:\n\n```typescript\n// The query has redundant ANDs and double negations\nconst query = 'tag:invoice AND (tag:receipt AND (tag:invoice AND NOT (NOT foo)))';\n\nparseSearchQuery({ query, optimize: false });\n// {\n//   expression: {\n//     type: 'and',\n//     operands: [\n//       { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//       {\n//         type: 'and',\n//         operands: [\n//           { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },\n//           {\n//             type: 'and',\n//             operands: [\n//               { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//               {\n//                  type: 'not',\n//                  operand: {\n//                   type: 'not',\n//                   operand: { type: 'text', value: 'foo' },\n//                 },\n//               },\n//             ],\n//           },\n//         ],\n//       },\n//     ],\n//   },\n//   issues: [],\n// }\n\nparseSearchQuery({ query, optimize: true });\n// {\n//   expression: {\n//     type: 'and',\n//     operands: [\n//       { type: 'filter', field: 'tag', operator: '=', value: 'invoice' },\n//       { type: 'filter', field: 'tag', operator: '=', value: 'receipt' },\n//       { type: 'text', value: 'foo' },\n//     ],\n//   },\n//   issues: [],\n// }\n```\n\n## API\n\n```typescript\nfunction parseSearchQuery(options: {\n  query: string;\n  maxDepth?: number; // Default: 10\n  maxTokens?: number; // Default: 200\n  optimize?: boolean; // Default: true\n}): ParsedQuery;\n\ntype ParsedQuery = {\n  expression: Expression;\n  issues: Issue[];\n};\n```\n\n## Error Handling\n\nThe parser returns issues for malformed queries while doing best-effort parsing:\n\n```typescript\nimport { ERROR_CODES } from '@papra/search-parser';\n\nconst result = parseSearchQuery({ query: '(tag:invoice' });\n// {\n//   expression: { type: 'filter', ... },\n//   issues: [{ code: 'unmatched-opening-parenthesis', message: '...' }]\n// }\n```\n\n## License\n\nThis project is licensed under the MIT License. See the [LICENSE](./LICENSE) file for details.\n\n## Credits\n\nThis project is crafted with ❤️ by [Corentin Thomasset](https://corentin.tech).\nIf you find this project helpful, please consider [supporting my work](https://buymeacoffee.com/cthmsst).\n\n<!-- File: packages/webhooks/README.md (Tokens: ~188 | Category: plugin-manifest) -->\n# Papra webhooks\n\nThis package is used to trigger and easily consume webhooks from Papra.\n\n## Installation\n\n```bash\n# using pnpm\npnpm add @papra/webhooks\n\n# using npm\nnpm install @papra/webhooks\n\n# using yarn\nyarn add @papra/webhooks\n```\n\n## License\n\nThis project is licensed under the AGPL-3.0 License - see the [LICENSE](./LICENSE) file for details.\n\n## Community\n\nJoin the community on [Papra's Discord server](https://papra.app/discord) to discuss the project, ask questions, or get help.\n\n## Credits\n\nThis project is crafted with ❤️ by [Corentin Thomasset](https://corentin.tech).\nIf you find this project helpful, please consider [supporting my work](https://buymeacoffee.com/cthmsst).\n</yakaai_skills>"}