[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-xorq-labs--xorq":3,"tool-xorq-labs--xorq":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",159267,2,"2026-04-17T11:29:14",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":76,"owner_website":77,"owner_url":78,"languages":79,"stars":98,"forks":99,"last_commit_at":100,"license":101,"difficulty_score":32,"env_os":102,"env_gpu":102,"env_ram":102,"env_deps":103,"category_tags":110,"github_topics":111,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":121,"updated_at":122,"faqs":123,"releases":153},8511,"xorq-labs\u002Fxorq","xorq","Composable expressions for data pipelines","xorq 是一个专为机器学习数据流水线设计的开源工具，旨在通过“可组合表达式”简化从开发到部署的全流程。它核心解决了传统 ML 工程中常见的痛点：不同计算引擎（如 DuckDB、Snowflake）间的代码重写、缺乏统一的缓存机制导致重复计算、以及因环境差异引发的“在我机器上能跑”等问题。\n\nxorq 让开发者只需编写一次声明式代码，即可在多种后端引擎间无缝切换执行，无需编写繁琐的适配胶水代码。其独特亮点在于将每个计算任务转化为结构化的 YAML“清单（Manifest）”，这不仅明确了数据血缘和上下文，还内置了智能缓存系统，自动管理中间结果，避免不必要的重算。此外，xorq 基于 Ibis 构建，利用 Arrow 作为数据传输管道，确保了高效且确定的执行体验。\n\n这款工具非常适合数据工程师、机器学习研究者以及需要构建复杂特征流水线的开发团队使用。如果你希望摆脱碎片化的工具链，追求更高效、可复现且易于维护的数据处理流程，xorq 提供了一个现代化且优雅的解决方案。","\u003Cdiv align=\"center\">\n\n![Xorq Logo](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_readme_0fadb3fdd3ac.png)\n![Xorq Logo](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_readme_2a19984da2f2.png)\n\n![License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fxorq-labs\u002Fxorq)\n![PyPI - Version](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fxorq)\n![CI Status](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fxorq-labs\u002Fxorq\u002Fci-test.yml)\n\n**A compute manifest and composable tools for ML.**\n\n[Documentation](https:\u002F\u002Fdocs.xorq.dev) • [Website](https:\u002F\u002Fwww.xorq.dev)\n\n\u003C\u002Fdiv>\n\n---\n\n# The Problem\n\nYou write a feature pipeline. It works on your laptop with DuckDB. Deploying\nit to Snowflake ends up in a rewrite. Intermediate results should be cached so you add infrastructure and a result naming system. A requirement to track pipeline changes is introduced, so you add a metadata store. Congrats, you're going to production! It's time to add a serving layer ...\n\nSix months later: five tools that don't talk to each other and a pipeline only one person understands\n\n| Pain | Symptom |\n|------|---------|\n| **Glue code everywhere** | Each engine is a silo. Moving between them means rewriting, not composing. |\n| **Runtime Feedback** | Imperative Python code where you can only tell if something will fail while running the job.\n| **Unnecessary recomputations** | No shared understanding of what changed. Everything runs from scratch. |\n| **Opaque Lineages** | Feature logic, metadata, lineage. All in different systems. Debugging means archaeology. |\n| **\"Works on my machine\"** | Environments drift. Reproducing results means reverse engineering someone's setup and interrogating your own. |\n| **Stateful orchestrators** | Retry logic, task states, failure recovery. Another system to manage, another thing that breaks.\n\nFeature stores, Model registries, Orchestrators: Vertical silos that don't\nserve agentic processes, which need context and skills, not categories.\n\n# Xorq\n\n![intro](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_readme_3f0c9bc20c8f.png)\n![intro](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_readme_c9b245ccf34e.png)\n\n**Manifest = Context.** Every ML computation becomes a structured,\ninput-addressed YAML manifest.\n\n**Exprs = Tools.** A catalog to discover. A build system to deterministically\nexecute anywhere with user directed caching.\n\n**Templates = Skills.** Various skills to get started e.g. scikit-learn\npipeline, feature stores, semantic layers etc.\n\n```bash\n$ pip install xorq[examples]\n$ xorq init -t penguins\n```\n\n---\n\n# The Expression\n\nWrite declarative [Ibis](https:\u002F\u002Fibis-project.org) expressions that can be\nrun like a tool. Xorq extends Ibis with caching, multi-engine execution, and\nUDFs.\n\n```python\nimport ibis\nimport xorq.api as xo\nfrom xorq.common.utils.ibis_utils import from_ibis\nfrom xorq.caching import ParquetCache\n\npenguins = ibis.examples.penguins.fetch()\n\npenguins_agg = (\n    penguins\n    .filter(ibis._.species.notnull())\n    .group_by(\"species\")\n    .agg(avg_bill_length=ibis._.bill_length_mm.mean())\n)\n\nexpr = (\n    from_ibis(penguins_agg)\n    .cache(ParquetCache.from_kwargs())\n)\n```\n\nDeclare `.cache()` on any node. Xorq handles the rest. No cache keys to generate or manage,\nno invalidation logic to write.\n\n## Compose across engines\n\nOne expression, many engines. Part of your pipeline runs on DuckDB, part on\nXorq's embedded [DataFusion](https:\u002F\u002Fdatafusion.apache.org) engine, UDFs\nvia Arrow Flight. Xorq systematically handles data transit with low overhead. Bye bye glue code.\n\n```python\nexpr = from_ibis(penguins).into_backend(xo.sqlite.connect())\nexpr.ls.backends\n```\n```\n(\u003Cxorq.backends.sqlite.Backend at 0x7926a815caa0>,\n \u003Cxorq.backends.duckdb.Backend at 0x7926b409faa0>)\n```\n\n## Expressions are tools, Arrow is the pipe\n\nUnix gave us small programs that compose via stdout. Xorq gives you\nexpressions that compose via Arrow.\n\n```\nIn [6]: expr.to_pyarrow_batches()\nOut[6]: \u003Cpyarrow.lib.RecordBatchReader at 0x15dc3f570>\n```\n\n---\n\n# The Manifest\n\nBuild an expression, get a manifest.\n\n```bash\n$ xorq build expr.py\nbuilds\u002F28ecab08754e\n```\n\n```\n$ tree builds\u002F28ecab08754e\nbuilds\u002F28ecab08754e\n├── database_tables\n│   └── f2ac274df56894cb1505bfe8cb03940e.parquet\n├── expr.yaml\n├── metadata.json\n└── profiles.yaml\n```\n\nNo external metadata store. No separate lineage tool. The build directory *is*\nthe versioned, cached, portable artifact.\n\n```yaml\n# Input-addressed, composable, portable\n# Abridged expr.yaml\nnodes:\n  '@read_31f0a5be3771':\n    op: Read\n    name: penguins\n    source: builds\u002F28ecab08754e\u002F...\u002Ff2ac274df56894cb1505bfe8cb03940e.parquet\n\n  '@filter_23e7692b7128':\n    op: Filter\n    parent: '@read_31f0a5be3771'\n    predicates:\n      - NotNull(species)\n\n  '@remotetable_9a92039564d4':\n    op: RemoteTable\n    remote_expr:\n      op: Aggregate\n      parent: '@filter_23e7692b7128'\n      by: [species]\n      metrics:\n        avg_bill_length: Mean(bill_length_mm)\n\n  '@cachednode_e7b5fd7cd0a9':\n    op: CachedNode\n    parent: '@remotetable_9a92039564d4'\n    cache:\n      type: ParquetCache\n      path: parquet\n```\n\n## Reproducible builds\n\nThe manifest is roundtrippable and machine-writeable. Git-diff\nyour pipelines. Code review your features. Track python dependencies. Rebuild from YAML alone.\n\n```bash\n$ xorq uv build expr.py\nbuilds\u002F28ecab08754e\u002F\n\n$ ls builds\u002F28ecab08754e\u002F*.tar.gz\nbuilds\u002F28ecab08754e\u002Fsdist.tar.gz  builds\u002F28ecab08754e\u002Fmy-pipeline-0.1.0.tar.gz\n```\n\nThe build captures everything: expression graph, dependencies, memory tables.\nShare the build that has sdist, get identical results. No \"works on my machine.\"\n\n## Only recompute what changed\n\nThe manifest is input-addressed: same inputs = same hash. Change an input, get a new hash.\n\n```python\nexpr.ls.get_cache_paths()\n```\n```\n(PosixPath('\u002Fhome\u002Fuser\u002F.cache\u002Fxorq\u002Fparquet\u002Fletsql_cache-7c3df7ccce5ed4b64c02fbf8af462e70.parquet'),)\n```\n\nThe hash *is* the cache key. No invalidation logic to debug.\nIf the expression is the same, the hash is the same, and the cache is valid.\nChange an input, get a new hash, trigger recomputation.\n\nTraditional caching asks \"has this expired?\" Input-addressed caching asks \"is\nthis the same computation?\" The second question has a deterministic answer.\n\n---\n\n# The Tools\n\nThe manifest provides context. The tools provide skills: catalog, introspect,\nserve, execute.\n\n## Catalog\n\n```bash\n# Add to catalog\n$ xorq catalog add builds\u002F28ecab08754e\u002F --alias penguins-agg\nAdded build 28ecab08754e as entry a498016e-5bea-4036-aec0-a6393d1b7c0f revision r1\n\n# List entries\n$ xorq catalog ls\nAliases:\npenguins-agg    a498016e-5bea-4036-aec0-a6393d1b7c0f    r1\nEntries:\na498016e-5bea-4036-aec0-a6393d1b7c0f    r1      28ecab08754e\n```\n\n## Run\n\n```bash\n$ xorq run builds\u002F28ecab08754e -o out.parquet\n```\n\n## Serve\n\nServe expressions anywhere via Arrow Flight:\n\n```bash\n$ xorq serve-unbound builds\u002F28ecab08754e\u002F \\\n  --to_unbind_hash 31f0a5be37713fe2c1a2d8ad8fdea69f \\\n  --host localhost --port 9002\n```\n\n```python\nimport xorq.api as xo\n\nbackend = xo.flight.connect(host=\"localhost\", port=9002)\nf = backend.get_exchange(\"default\")\n\ndata = {\n    \"species\": [\"Adelie\", \"Gentoo\", \"Chinstrap\"],\n    \"island\": [\"Torgersen\", \"Biscoe\", \"Dream\"],\n    \"bill_length_mm\": [39.1, 47.5, 49.0],\n    \"bill_depth_mm\": [18.7, 14.2, 18.5],\n    \"flipper_length_mm\": [181, 217, 195],\n    \"body_mass_g\": [3750, 5500, 4200],\n    \"sex\": [\"male\", \"female\", \"male\"],\n    \"year\": [2007, 2008, 2009],\n}\n\nxo.memtable(data).pipe(f).execute()\n```\n\n```\n     species  avg_bill_length\n0     Adelie             39.1\n1  Chinstrap             49.0\n2     Gentoo             47.5\n```\n\n## Debug with confidence\n\nNo more archaeology. Lineage is encoded in the manifest—not scattered across\ntools—and queryable from the CLI.\n\n```bash\n$ xorq lineage penguins-agg\n\nLineage for column 'avg_bill_length':\nField:avg_bill_length #1\n└── Cache xorq_cached_node_name_placeholder #2\n    └── RemoteTable:236af67d399a4caaf17e0bf5e1ac4c0f #3\n        └── Aggregate #4\n            ├── Filter #5\n            │   ├── Read #6\n            │   └── NotNull #7\n            │       └── Field:species #8\n            │           └── ↻ see #6\n            ├── Field:species #9\n            │   └── ↻ see #5\n            └── Mean #10\n                └── Field:bill_length_mm #11\n                    └── ↻ see #5\n```\n\n## Workflows, without state\n\nNo task states. Just retry on failure.\n\nXorq executes expressions as Arrow RecordBatch streams. There's no DAG of tasks\nto checkpoint, just data flowing through operators. If something fails, rerun\nfrom the manifest. Cached nodes resolve instantly; the rest recomputes.\n\n## Scikit-learn Integration\n\nXorq translates `scikit-learn` Pipeline objects to deferred expressions:\n\n```python\nfrom xorq.expr.ml.pipeline_lib import Pipeline\n\nsklearn_pipeline = ...\nxorq_pipeline = Pipeline.from_instance(sklearn_pipeline)\n```\n\n---\n# Templates\n\nReady-to-start code as skills:\n```bash\n$ xorq init -t \u003Ctemplate>\n```\n\n| Template | Description |\n|----------|-------------|\n| `penguins` | Minimal example: caching, aggregation, multi-engine |\n| `sklearn` | Classification pipeline with train\u002Fpredict separation |\n\n\n## Skills for humans\n\nTemplates work as easy to get started components with expressions ready to be\ncomposed with your sources.\n\n## Coming Soon\n\n- `feast` — Feature store integration\n- `boring-semantic-layer` — Metrics and dimensions catalog\n- `dbt` — dbt model composition\n- Feature Selection\n\n---\n\n# The Horizontal Stack\n\nWrite in Python. Catalog as YAML. Compose anywhere via Ibis. Portable compute\nengine built on DataFusion. Universal UDFs via Arrow Flight.\n\n![Architecture](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_readme_54052a9e7c83.png)\n![Architecture](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_readme_8df12b615d15.png)\n\nLineage, caching, and versioning travel with the manifest; cataloged, not locked\nin a vendor's database.\n\n**Integrations:** Ibis • scikit-learn • Feast(wip) • dbt (upcoming)\n\n---\n\n# Learn More\n\n- [Quickstart tutorial](https:\u002F\u002Fdocs.xorq.dev\u002Fgetting_started\u002Fquickstart)\n- [Why Xorq?](https:\u002F\u002Fdocs.xorq.dev\u002F#why-xorq)\n- [Scikit-learn template](https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq-template-sklearn)\n\n---\n\nPre-1.0. Expect breaking changes with migration guides.\n","\u003Cdiv align=\"center\">\n\n![Xorq Logo](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_readme_0fadb3fdd3ac.png)\n![Xorq Logo](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_readme_2a19984da2f2.png)\n\n![License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fxorq-labs\u002Fxorq)\n![PyPI - Version](https:\u002F\u002Fimg.shields.io\u002Fpypi\u002Fv\u002Fxorq)\n![CI Status](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fxorq-labs\u002Fxorq\u002Fci-test.yml)\n\n**面向机器学习的计算清单与可组合工具。**\n\n[文档](https:\u002F\u002Fdocs.xorq.dev) • [官网](https:\u002F\u002Fwww.xorq.dev)\n\n\u003C\u002Fdiv>\n\n---\n\n# 问题\n\n你编写了一个特征流水线，在本地使用 DuckDB 能正常运行。但当部署到 Snowflake 上时，却不得不重新改写代码。为了缓存中间结果，你又引入了额外的基础设施和结果命名机制。随后，由于需要追踪流水线的变化，你还搭建了一个元数据存储系统。恭喜你，终于将模型上线了！接下来该添加推理服务层了……\n\n然而，仅仅六个月后，你就拥有了五个互不相通的工具，而这条流水线只有你自己才完全理解。\n\n| 痛点 | 表现 |\n|------|---------|\n| **到处都是胶水代码** | 每个计算引擎都像孤岛一样独立运作，跨引擎迁移意味着重写而非组合。 |\n| **运行时反馈不足** | 使用的是命令式 Python 代码，只有在作业运行时才能发现潜在的错误。 |\n| **不必要的重复计算** | 对于哪些部分发生了变化缺乏统一的认知，导致每次都要从头开始执行。 |\n| **血缘关系不透明** | 特征逻辑、元数据和血缘关系分散在不同的系统中，调试起来如同考古一般。 |\n| **“在我机器上能跑”** | 环境会逐渐漂移，想要复现结果就必须逆向工程别人的配置，并不断调整自己的环境。 |\n| **有状态的编排工具** | 重试逻辑、任务状态、失败恢复……这些都需要额外的管理，也增加了出错的可能性。\n\n特征存储、模型注册表、工作流编排工具：这些都是垂直化的孤岛，无法支持需要上下文和技能的自主型流程，而不仅仅是按类别划分。\n\n# Xorq\n\n![intro](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_readme_3f0c9bc20c8f.png)\n![intro](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_readme_c9b245ccf34e.png)\n\n**清单 = 上下文。** 每次机器学习计算都会被转化为一个结构化、以输入为地址的 YAML 清单。\n\n**表达式 = 工具。** 它们构成了一个目录，可以被发现；同时也是一个构建系统，能够在任何地方以确定性的方式执行，并支持用户自定义的缓存策略。\n\n**模板 = 技能。** 提供多种开箱即用的技能，例如 scikit-learn 流水线、特征存储、语义层等。\n\n```bash\n$ pip install xorq[examples]\n$ xorq init -t penguins\n```\n\n---\n\n# 表达式\n\n编写声明式的 [Ibis](https:\u002F\u002Fibis-project.org) 表达式，就像使用工具一样轻松运行。Xorq 在 Ibis 的基础上扩展了缓存功能、多引擎执行能力以及用户自定义函数的支持。\n\n```python\nimport ibis\nimport xorq.api as xo\nfrom xorq.common.utils.ibis_utils import from_ibis\nfrom xorq.caching import ParquetCache\n\npenguins = ibis.examples.penguins.fetch()\n\npenguins_agg = (\n    penguins\n    .filter(ibis._.species.notnull())\n    .group_by(\"species\")\n    .agg(avg_bill_length=ibis._.bill_length_mm.mean())\n)\n\nexpr = (\n    from_ibis(penguins_agg)\n    .cache(ParquetCache.from_kwargs())\n)\n```\n\n只需在任意节点上调用 `.cache()` 方法，剩下的工作就由 Xorq 自动完成。无需手动生成或管理缓存键，也不需要编写失效逻辑。\n\n## 跨引擎组合\n\n一份表达式，可在多个引擎上运行。你的流水线的一部分可以在 DuckDB 上执行，另一部分则利用 Xorq 内置的 [DataFusion](https:\u002F\u002Fdatafusion.apache.org) 引擎，通过 Arrow Flight 执行 UDF。Xorq 以低开销的方式系统化地处理数据传输，告别胶水代码。\n\n```python\nexpr = from_ibis(penguins).into_backend(xo.sqlite.connect())\nexpr.ls.backends\n```\n```\n(\u003Cxorq.backends.sqlite.Backend at 0x7926a815caa0>,\n \u003Cxorq.backends.duckdb.Backend at 0x7926b409faa0>)\n```\n\n## 表达式是工具，Arrow 是管道\n\nUnix 让我们通过标准输出实现小工具之间的组合，而 Xorq 则让你的表达式通过 Arrow 实现组合。\n\n```\nIn [6]: expr.to_pyarrow_batches()\nOut[6]: \u003Cpyarrow.lib.RecordBatchReader at 0x15dc3f570>\n```\n\n---\n\n# 清单\n\n构建一个表达式，就能得到一份清单。\n\n```bash\n$ xorq build expr.py\nbuilds\u002F28ecab08754e\n```\n\n```\n$ tree builds\u002F28ecab08754e\nbuilds\u002F28ecab08754e\n├── database_tables\n│   └── f2ac274df56894cb1505bfe8cb03940e.parquet\n├── expr.yaml\n├── metadata.json\n└── profiles.yaml\n```\n\n无需外部的元数据存储，也不需要单独的血缘追踪工具。构建目录本身就是版本化、可缓存且便于移植的产物。\n\n```yaml\n# 以输入为地址，可组合且便携\n# expr.yaml 摘录\nnodes:\n  '@read_31f0a5be3771':\n    op: Read\n    name: penguins\n    source: builds\u002F28ecab08754e\u002F...\u002Ff2ac274df56894cb1505bfe8cb03940e.parquet\n\n  '@filter_23e7692b7128':\n    op: Filter\n    parent: '@read_31f0a5be3771'\n    predicates:\n      - NotNull(species)\n\n  '@remotetable_9a92039564d4':\n    op: RemoteTable\n    remote_expr:\n      op: Aggregate\n      parent: '@filter_23e7692b7128'\n      by: [species]\n      metrics:\n        avg_bill_length: Mean(bill_length_mm)\n\n  '@cachednode_e7b5fd7cd0a9':\n    op: CachedNode\n    parent: '@remotetable_9a92039564d4'\n    cache:\n      type: ParquetCache\n      path: parquet\n```\n\n## 可复现的构建\n\n清单是可往返且机器可写的。你可以用 Git diff 来比较不同版本的流水线，进行代码审查，跟踪 Python 依赖项，甚至仅凭 YAML 文件就能重新构建。\n\n```bash\n$ xorq uv build expr.py\nbuilds\u002F28ecab08754e\u002F\n\n$ ls builds\u002F28ecab08754e\u002F*.tar.gz\nbuilds\u002F28ecab08754e\u002Fsdist.tar.gz  builds\u002F28ecab08754e\u002Fmy-pipeline-0.1.0.tar.gz\n```\n\n构建过程会捕获所有内容：表达式图、依赖关系以及内存表。分享包含 sdist 的构建文件，就能获得完全一致的结果，不再出现“在我机器上能跑”的情况。\n\n## 只重新计算发生变化的部分\n\n清单是以输入为地址的：相同的输入会产生相同的哈希值。一旦输入发生改变，就会生成新的哈希值。\n\n```python\nexpr.ls.get_cache_paths()\n```\n```\n(PosixPath('\u002Fhome\u002Fuser\u002F.cache\u002Fxorq\u002Fparquet\u002Fletsql_cache-7c3df7ccce5ed4b64c02fbf8af462e70.parquet'),)\n```\n\n这个哈希值就是缓存的键。无需再调试失效逻辑。只要表达式相同，哈希值就相同，缓存自然有效。一旦输入发生变化，就会产生新的哈希值，从而触发重新计算。\n\n传统的缓存机制会问：“这个是否过期了？”而基于输入地址的缓存机制则会问：“这是不是同一份计算？”后者的问题有着确定性的答案。\n\n---\n\n# 工具\n\n清单提供了上下文，而工具则赋予了具体的技能：目录管理、自我检查、服务提供和执行。\n\n## 目录\n\n```bash\n# 添加到目录\n$ xorq catalog add builds\u002F28ecab08754e\u002F --alias penguins-agg\n已将构建 28ecab08754e 添加为条目 a498016e-5bea-4036-aec0-a6393d1b7c0f，修订版 r1\n\n# 列出条目\n$ xorq catalog ls\n别名：\npenguins-agg    a498016e-5bea-4036-aec0-a6393d1b7c0f    r1\n条目：\na498016e-5bea-4036-aec0-a6393d1b7c0f    r1      28ecab08754e\n```\n\n## 运行\n\n```bash\n$ xorq run builds\u002F28ecab08754e -o out.parquet\n```\n\n## 服务\n\n通过 Arrow Flight 在任何地方提供表达式：\n\n```bash\n$ xorq serve-unbound builds\u002F28ecab08754e\u002F \\\n  --to_unbind_hash 31f0a5be37713fe2c1a2d8ad8fdea69f \\\n  --host localhost --port 9002\n```\n\n```python\nimport xorq.api as xo\n\nbackend = xo.flight.connect(host=\"localhost\", port=9002)\nf = backend.get_exchange(\"default\")\n\ndata = {\n    \"species\": [\"Adelie\", \"Gentoo\", \"Chinstrap\"],\n    \"island\": [\"Torgersen\", \"Biscoe\", \"Dream\"],\n    \"bill_length_mm\": [39.1, 47.5, 49.0],\n    \"bill_depth_mm\": [18.7, 14.2, 18.5],\n    \"flipper_length_mm\": [181, 217, 195],\n    \"body_mass_g\": [3750, 5500, 4200],\n    \"sex\": [\"male\", \"female\", \"male\"],\n    \"year\": [2007, 2008, 2009],\n}\n\nxo.memtable(data).pipe(f).execute()\n```\n\n```\n     species  avg_bill_length\n0     Adelie             39.1\n1  Chinstrap             49.0\n2     Gentoo             47.5\n```\n\n## 放心调试\n\n不再需要繁琐的溯源工作。 lineage 被编码在清单中，而不是分散在各个工具中，并且可以通过 CLI 查询。\n\n```bash\n$ xorq lineage penguins-agg\n\nLineage for column 'avg_bill_length':\nField:avg_bill_length #1\n└── Cache xorq_cached_node_name_placeholder #2\n    └── RemoteTable:236af67d399a4caaf17e0bf5e1ac4c0f #3\n        └── Aggregate #4\n            ├── Filter #5\n            │   ├── Read #6\n            │   └── NotNull #7\n            │       └── Field:species #8\n            │           └── ↻ see #6\n            ├── Field:species #9\n            │   └── ↻ see #5\n            └── Mean #10\n                └── Field:bill_length_mm #11\n                    └── ↻ see #5\n```\n\n## 无状态的工作流\n\n没有任务状态。只需在失败时重试即可。\n\nXorq 将表达式作为 Arrow RecordBatch 流来执行。不存在需要检查点的 DAG 任务图，只有数据在算子间流动。如果某处失败，只需从清单重新运行。缓存节点会立即解析，其余部分则会重新计算。\n\n## scikit-learn 集成\n\nXorq 可以将 `scikit-learn` Pipeline 对象转换为延迟表达式：\n\n```python\nfrom xorq.expr.ml.pipeline_lib import Pipeline\n\nsklearn_pipeline = ...\nxorq_pipeline = Pipeline.from_instance(sklearn_pipeline)\n```\n\n---\n# 模板\n\n作为技能的开箱即用代码：\n```bash\n$ xorq init -t \u003Ctemplate>\n```\n\n| 模板 | 描述 |\n|----------|-------------|\n| `penguins` | 极简示例：缓存、聚合、多引擎 |\n| `sklearn` | 分类流水线，训练与预测分离 |\n\n## 人类友好的技能\n\n模板是易于上手的组件，其中包含可与您的数据源组合的现成表达式。\n\n## 即将推出\n\n- `feast` — 特征存储集成\n- `boring-semantic-layer` — 指标和维度目录\n- `dbt` — dbt 模型组合\n- 特征选择\n\n---\n\n# 水平堆栈\n\n使用 Python 编写。以 YAML 形式编目。通过 Ibis 在任何地方进行组合。基于 DataFusion 构建的可移植计算引擎。通过 Arrow Flight 实现通用 UDF。\n\n![架构](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_readme_54052a9e7c83.png)\n![架构](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_readme_8df12b615d15.png)\n\nLineage、缓存和版本控制随清单一起传递；被编目而非锁定在某个供应商的数据库中。\n\n**集成：** Ibis • scikit-learn • Feast（开发中）• dbt（即将推出）\n\n---\n\n# 了解更多\n\n- [快速入门教程](https:\u002F\u002Fdocs.xorq.dev\u002Fgetting_started\u002Fquickstart)\n- [为什么选择 Xorq？](https:\u002F\u002Fdocs.xorq.dev\u002F#why-xorq)\n- [scikit-learn 模板](https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq-template-sklearn)\n\n---\n\n1.0 版本之前，可能会有破坏性变更，并提供迁移指南。","# Xorq 快速上手指南\n\nXorq 是一个面向机器学习的计算清单（Manifest）和组合工具集。它基于 Ibis 构建，支持声明式表达式、多引擎执行（如 DuckDB, Snowflake, DataFusion）、自动缓存以及可复现的流水线构建，旨在解决 ML 工程中胶水代码多、环境不一致和血缘不透明等痛点。\n\n## 环境准备\n\n*   **操作系统**: Linux, macOS 或 Windows (WSL 推荐)\n*   **Python 版本**: Python 3.9 或更高版本\n*   **前置依赖**:\n    *   `pip` 包管理工具\n    *   建议安装 `uv` (可选，用于更快的依赖管理和构建)，但非必须。\n\n## 安装步骤\n\n### 1. 基础安装\n使用 pip 安装核心库及示例依赖：\n\n```bash\npip install \"xorq[examples]\"\n```\n\n> **提示**：国内用户若遇到下载缓慢问题，可使用清华或阿里镜像源加速：\n> ```bash\n> pip install \"xorq[examples]\" -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple\n> ```\n\n### 2. 初始化项目\n安装完成后，可以使用 `xorq` 命令行工具初始化一个示例项目（例如经典的企鹅数据集示例）：\n\n```bash\nxorq init -t penguins\n```\n\n这将生成包含基本表达式逻辑的 `expr.py` 文件及相关配置。\n\n## 基本使用\n\nXorq 的核心工作流分为三个阶段：**编写表达式 (Expression)** -> **构建清单 (Build)** -> **执行\u002F服务 (Run\u002FServe)**。\n\n### 1. 编写声明式表达式\n创建一个 Python 文件（如 `expr.py`），使用 Ibis 语法定义数据处理逻辑。Xorq 扩展了 Ibis，支持 `.cache()` 自动缓存和多后端切换。\n\n```python\nimport ibis\nimport xorq.api as xo\nfrom xorq.common.utils.ibis_utils import from_ibis\nfrom xorq.caching import ParquetCache\n\n# 获取示例数据\npenguins = ibis.examples.penguins.fetch()\n\n# 定义处理逻辑：过滤空值并按物种聚合平均喙长\npenguins_agg = (\n    penguins\n    .filter(ibis._.species.notnull())\n    .group_by(\"species\")\n    .agg(avg_bill_length=ibis._.bill_length_mm.mean())\n)\n\n# 将 Ibis 表达式转换为 Xorq 表达式并启用自动缓存\nexpr = (\n    from_ibis(penguins_agg)\n    .cache(ParquetCache.from_kwargs())\n)\n```\n\n### 2. 构建计算清单 (Build)\n使用 CLI 将表达式编译为不可变的、版本化的构建产物（Manifest）。该目录包含所有依赖、缓存数据和执行图，确保“一次构建，到处运行”。\n\n```bash\nxorq build expr.py\n```\n\n输出示例：\n```text\nbuilds\u002F28ecab08754e\n```\n此时生成的 `builds\u002F\u003Chash>` 目录即为你的便携式工件，包含 `expr.yaml` (清单), `metadata.json` 和缓存数据。\n\n### 3. 执行与查看结果\n直接运行构建好的清单，输出结果到指定文件：\n\n```bash\nxorq run builds\u002F28ecab08754e -o out.parquet\n```\n\n或者在 Python 中交互式执行：\n\n```python\nimport xorq.api as xo\n\n# 加载构建好的表达式\nexpr = xo.load(\"builds\u002F28ecab08754e\")\n\n# 执行并转换为 PyArrow 格式\nresult = expr.execute()\nprint(result)\n```\n\n### 4. 高级功能：跨引擎组合与服务\nXorq 允许同一个表达式在不同后端间无缝切换，或通过 Arrow Flight 提供服务。\n\n**切换后端示例**：\n```python\n# 将部分计算卸载到 SQLite，其余在 DuckDB 运行\nexpr = from_ibis(penguins).into_backend(xo.sqlite.connect())\nprint(expr.ls.backends)\n```\n\n**启动服务 (Serve)**：\n通过 Arrow Flight 暴露表达式接口，供其他应用调用：\n```bash\nxorq serve-unbound builds\u002F28ecab08754e\u002F \\\n  --to_unbind_hash 31f0a5be37713fe2c1a2d8ad8fdea69f \\\n  --host localhost --port 9002\n```\n\n### 5. 查看数据血缘\n无需查阅分散的文档，直接通过 CLI 查看完整的计算血缘图：\n\n```bash\nxorq lineage penguins-agg\n```\n\n这将以树状结构展示从原始数据到最终指标的完整转换路径，便于调试和审计。","某电商数据团队正在构建用户特征管道，需将本地开发的 DuckDB 原型迁移至 Snowflake 生产环境并支持实时服务。\n\n### 没有 xorq 时\n- **重复造轮子**：从 DuckDB 迁移到 Snowflake 需重写大量胶水代码，不同计算引擎间无法直接复用逻辑。\n- **盲目运行**：只能在任务执行时才发现错误，缺乏运行前的静态验证与反馈机制。\n- **无效重算**：因无法精准识别数据或逻辑变更，每次部署都全量重跑，浪费算力且耗时。\n- **链路黑盒**：特征逻辑、元数据和血缘分散在不同系统，排查问题如同“考古”，效率极低。\n- **环境漂移**：本地能跑的代码在生产报错，复现结果需反向工程他人配置，维护成本高昂。\n\n### 使用 xorq 后\n- **一次编写，多端运行**：基于声明式 Ibis 表达式构建管道，xorq 自动处理 DuckDB 到 Snowflake 的引擎切换，无需重写代码。\n- **编译期洞察**：xorq 将计算逻辑转化为结构化 Manifest，在运行前即可验证完整性，提前拦截潜在错误。\n- **智能缓存**：通过 `.cache()` 声明节点，xorq 自动管理缓存键与失效逻辑，仅重算变更部分，大幅缩短迭代时间。\n- **统一血缘视图**：所有逻辑、元数据与血缘信息内建于 Manifest 中，调试时可一键追溯完整数据链路。\n- **确定性复现**：环境差异被屏蔽，任何人在任何机器上均可通过同一 Manifest 精确复现计算结果。\n\nxorq 通过将 ML 计算转化为可组合的表达式与标准化清单，彻底消除了数据管道中的引擎孤岛与运维摩擦。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fxorq-labs_xorq_c6c8287e.png","xorq-labs","Xorq","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fxorq-labs_1347001d.png","Compute as Code",null,"https:\u002F\u002Fxorq.dev","https:\u002F\u002Fgithub.com\u002Fxorq-labs",[80,84,88,92,95],{"name":81,"color":82,"percentage":83},"Python","#3572A5",98.8,{"name":85,"color":86,"percentage":87},"Nix","#7e7eff",1,{"name":89,"color":90,"percentage":91},"Shell","#89e051",0.1,{"name":93,"color":94,"percentage":91},"Just","#384d54",{"name":96,"color":94,"percentage":97},"Dockerfile",0,504,27,"2026-04-17T00:14:56","Apache-2.0","未说明",{"notes":104,"python":102,"dependencies":105},"该工具是一个基于 Ibis 的声明式计算清单和组合工具，支持多引擎（DuckDB, SQLite, DataFusion）执行。通过 pip install xorq[examples] 安装。核心特性包括基于输入的自动缓存、可复现的构建（生成 YAML manifest）以及通过 Arrow Flight 进行 UDF 和服务化部署。目前处于 1.0 之前版本，可能存在破坏性更新。",[106,107,108,109],"ibis-framework","pyarrow","scikit-learn","datafusion",[16,14],[112,113,114,115,116,117,118,119,120],"sklearn","multi-engine","arrow","dataframe","machine-learning","python","sql","data-pipeline","data-transformations","2026-03-27T02:49:30.150509","2026-04-18T00:45:26.313586",[124,129,134,139,144,149],{"id":125,"question_zh":126,"answer_zh":127,"source_url":128},38093,"如何列出表达式（Expr）的哈希值以便解绑？","官方不推荐添加专门的命令来列出哈希值。首选方案是让用户在定义表达式时使用标签（tags）进行标记和管理，而不是依赖自动生成的哈希值列表。","https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fissues\u002F1332",{"id":130,"question_zh":131,"answer_zh":132,"source_url":133},38094,"DuckDB Flight Reader 的计数为什么不更新？","该问题在 v0.1.16 版本中存在，但在 main 分支中已修复。如果您遇到此问题，请确保升级到最新的开发版本。此外，相关的 AttributeError 错误也已在 #695 PR 中修复。","https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fissues\u002F694",{"id":135,"question_zh":136,"answer_zh":137,"source_url":138},38095,"运行 mcp_flight_server 示例时出现 ValueError 错误怎么办？","该错误是由于传递了 PyArrow schema 而非 Ibis schema 导致的。解决方案是应用 #1037 PR 中的修复：在调用相关函数时，确保传递的是 ibis schema 对象。您可以尝试更新到包含此修复的最新版本。","https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fissues\u002F1028",{"id":140,"question_zh":141,"answer_zh":142,"source_url":143},38096,"pip install xorq 安装后缺少 requests 或 duckdb 模块怎么办？","这是已知问题，requests 和 duckdb 未被包含在主安装包的核心依赖中。如果您需要使用 `flight_udtf_example` 或 `xorq.flight.exchanger.UrlOperatorExchange` 等功能，需要手动安装这些缺失的依赖：`pip install requests duckdb`。","https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fissues\u002F696",{"id":145,"question_zh":146,"answer_zh":147,"source_url":148},38097,"为什么两个缓存类型不同的表达式会生成相同的构建哈希（build hash）？","这是一个已知的设计问题。目前如果两个表达式逻辑相同但缓存策略不同（例如一个使用默认缓存，另一个使用 ParquetCache），它们可能会生成相同的构建哈希，导致在目录（catalog）中发生冲突。预期行为是它们应该拥有不同的哈希值以区分不同的缓存操作。建议关注后续版本对此问题的修复。","https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fissues\u002F1570",{"id":150,"question_zh":151,"answer_zh":152,"source_url":128},38098,"在使用 Snowflake 连接时，如何禁用 UDF 对象创建以避免权限问题？","在较新的版本（如 commit df01e91 之后）中，您可以在连接配置中设置 `create_object_udfs=False` 来禁用自动创建 UDF 对象。请注意，旧版本（如 3ee8c67）的连接函数可能不支持此参数，因此需要升级 xorq 版本才能使用此配置选项。",[154,159,164,169,174,179,184,189,194,199,204,209,214,219,224,229,234,239,244,249],{"id":155,"version":156,"summary_zh":157,"released_at":158},306243,"v0.3.19","## 变更\n\n- XOR-253 添加表达式构建器往返功能，适配 BSL (#1801)\n- 杂项（依赖）：放宽 attrs 依赖约束 (#1496)\n\n## ✨ 增强功能\n\n- 功能（TUI）：添加 DataViewScreen，用于全屏数据探索 (#1797)\n- 功能（元数据）：在 ExprMetadata 中添加 cache_keys（XOR-281）(#1783)\n- 功能（TUI）：用 Tree 小部件替换目录 DataTable，并新增视图切换功能 (#1791)\n- 功能（血缘关系）：将扁平链结构替换为完整的 DAG 数据模型 (#1788)\n\n## 🐞 错误修复\n\n- 修复（打包）：从 VCS 扫描中排除 env_templates (#1825)\n- 修复（开发）：处理工作树设置\u002F清理过程中父目录缺失的问题 (#1806)\n- 修复（OpenTelemetry）：收集器探针 (#1813)\n- 修复（目录）：防止在附件内容缺失且无远程仓库时出现挂起 (#1812)\n- 修复（ibis_yaml）：绑定默认参数时跳过 _MISSING 标记 (#1793)\n- 修复（开发）：改进工作树设置 (#1795)\n- 修复（缓存）：SnapshotStrategy 在使用 HashingTagNode 时会失败 (#1786)\n- 修复（打包）：将 env_templates 包含在 wheel 中，并在 otel_utils 中提供回退方案 (#1785)\n\n## 📦 构建系统\n\n- 杂项（CLI）：将 uv 拆分为独立的子命令组（XOR-287）(#1818)\n- CI：添加 faulthandler_timeout、详细输出和步骤超时设置 (#1811)\n- 杂项：添加工作流 (#1804)\n- 杂项：移除 CLAUDE.md (#1802)\n\n感谢所有贡献者使本次发布成为可能！\n@dlovell、@ghoersti、@hussainsultan、@mesejo、[renovate[bot]](https:\u002F\u002Fgithub.com\u002Fapps\u002Frenovate)\n","2026-04-14T13:14:06",{"id":160,"version":161,"summary_zh":162,"released_at":163},306244,"v0.3.18","## 变更\n\n## 🚀 性能改进\n\n- perf(ibis_yaml): 在 translate.py 中延迟导入 sklearn (#1792)\n\n## ✨ 功能增强\n\n- feat(cli): 向 run_cached_command 和 catalog run 添加 RunLogger (#1778)\n- feat(catalog): 添加 embed-readonly 命令，用于验证并嵌入只读… (#1779)\n- feat(catalog): 重放、annex 目标支持以及 enableremote 修复 (#1774)\n- feat(tui): 类似 lazygit 的水平布局，包含 SQL、信息和内联面板 (#1755)\n- feat: Parquet 嵌入式溯源信息 (#1777)\n- feat(catalog): CatalogBackend 抽象层，可选 Git Annex 支持 (#1752)\n\n## 🐞 错误修复\n\n- feat(catalog): 重放、annex 目标支持以及 enableremote 修复 (#1774)\n- fix(flake): 在 Darwin 系统上使用 Git Annex (#1776)\n- fix: 在跨数据库表达式构建中使用命名空间感知的表查找 (#1773)\n\n## 🛠️ 其他改进\n\n- ref(packager): 全面重构 sdist 构建流程 (#1781)\n\n感谢所有贡献者使本次发布成为可能！\n@dlovell, @hussainsultan, @mesejo\n","2026-04-07T10:38:19",{"id":165,"version":166,"summary_zh":167,"released_at":168},306245,"v0.3.17","## 变更内容\n* 修复(缓存)：避免在没有后端的情况下包装 Expr，由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1731 中完成\n* 新增(TUI)：延迟加载表达式，由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1720 中完成\n* 重构(CLI)：简化 xorq run 命令，在 replace_cache_table 中使用 match 语句，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1745 中完成\n* 修复(TUI)：使 test_j_k_moves_cursor 测试对 CI 运行较慢的情况更具鲁棒性，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1746 中完成\n* 重构(图)：提取 replace_unbound 工具函数并简化 exchanger 模块，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1742 中完成\n* 新增(目录)：添加 bind()、ExprComposer 和 Catalog.source\u002Fbind 方法，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1748 中完成\n* 修复(TUI)：消除 test_j_k_moves_cursor 测试中的竞态条件，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1749 中完成\n* 新增(目录)：添加 ExprComposer.from_expr 方法，用于从 ta… 恢复 Composer 实例，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1750 中完成\n* 重构(目录)：将 _add_zip 中的工作移出同步上下文，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1756 中完成\n* 重构：使用 pyyaml-12，由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1718 中完成\n* 新增(目录)：支持组合和运行命令，由 @hussainsultan 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1753 中完成\n* 新增(direnv)：添加 worktree 辅助脚本和 envrcs 文档，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1760 中完成\n* 修复(CLI)：恢复 catalog 命令的 --pdb 行为，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1762 中完成\n* 杂项：将 adbc-driver-gizmosql 版本从 >=1.1.3 升级至 >=1.1.5，由 @prmoore77 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1763 中完成\n* 新增(目录)：为数据库后端合并目录源包装器，由 @hussainsultan 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1761 中完成\n* 新增：添加 xorq 参数，由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1747 中完成\n* 发布：0.3.17，由 @hussainsultan 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1764 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fcompare\u002Fv0.3.16...v0.3.17","2026-04-01T02:36:10",{"id":170,"version":171,"summary_zh":172,"released_at":173},306246,"v0.3.16","## 变更\n\n## 🚀 性能改进\n\n- perf(build): 规范化顺序 ID，以获得确定性的构建哈希值 (#1728)\n\n## ✨ 功能增强\n\n- feat(catalog): 添加目录模式 (XOR-241) (#1686)\n- feat(expr): 添加 ExprKind.Source，用于区分源表达式与转换后的表达式 (#1727)\n- feat: 添加 LazyBackend (#1655)\n\n## 🐞 错误修复\n\n- fix(ibis yaml): 稳定内存读取 YAML 文件 (#1739)\n- fix(hash): 稳定跨进程的 ScalarUDF 规范化 (#1738)\n- fix(defer_utils): 为跨后端操作规范化 Read 节点中的 path 关键字参数… (#1730)\n- fix(tui): 处理 _entry_info 中的标量表达式 (#1726)\n- fix(ibis_yaml): 使用类型化缓存，防止在 translate_from_yaml 中出现 int\u002Fbool 冲突 (#1725)\n\n## 📦 构建系统\n\n- chore: 扩展 ci-benchmark 以覆盖所有基准测试，并移除 codspeed (#1724)\n\n## 🛠️ 其他改进\n\n- ref(ExprMetadata): 提取显式字段，移除对 expr 的依赖 (#1740)\n- ref(hash): 对 UDF SQL 名称使用 __func_name__，并提取规范化的… (#1735)\n- feat: 添加 LazyBackend (#1655)\n\n感谢所有贡献者使本次发布成为可能！\n@dlovell、@ghoersti、@hussainsultan 和 @mesejo","2026-03-24T15:47:01",{"id":175,"version":176,"summary_zh":177,"released_at":178},306247,"v0.3.15","## 变更\n\n## 🚀 性能优化\n\n- perf(catalog)：将 catalog 和 download_utils 的打包格式从 tgz 切换为 zip (#1717)\n- perf(packager)：将 sdist 打包格式从 tgz 切换为 zip (#1716)\n\n## ✨ 功能增强\n\n- feat(catalog)：允许在 Catalog 初始化时选择不启用 assert_consistency 检查 (#1714)\n- feat(catalog)：添加 Expr 类型（XOR-244）(#1682)\n- feat(ml)：重映射器 (#1708)\n\n## 🐞 问题修复\n\n- fix：不要将 None 值传递给 span.add_event (#1709)\n- fix(lint)：从方法中移除 functools.cache (#1684)\n- fix：解决测试中的 DeprecationWarning 和 FutureWarning 警告 (#1706)\n\n## 📦 构建系统\n\n- chore：移除 __main__ (#1719)\n- chore：使用 ruff 进行代码格式化 (#1704)\n\n感谢所有贡献者让本次发布成为可能！\n@dependabot、@dlovell、@mesejo、@renovate","2026-03-17T10:41:01",{"id":180,"version":181,"summary_zh":182,"released_at":183},306248,"v0.3.14","## 变更内容\n* 修复(ibis_yaml): 延迟导入 xorq.ibis_yaml.translate，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1689 中完成\n* 性能(otel): 将 OTLP 导出器的导入延迟到首次使用时，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1690 中完成\n* 重构(测试): 将测试类转换为独立函数，由 @ghoersti 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1667 中完成\n* 新功能(expr): 添加用于贡献哈希的元数据标签节点，由 @hussainsultan 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1681 中完成\n* 清理(ibis yaml): 移除冗余处理器，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1692 中完成\n* 修复: 确保 Python 3.10 兼容性，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1693 中完成\n* 杂项(模板): 更新模板的提交哈希值，由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1695 中完成\n* 新功能(ci): 添加带有 PR 回归告警的基准测试工作流，由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1694 中完成\n* 修复(目录): 当 CLI 没有子命令时显示帮助信息，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1696 中完成\n* 杂项(ci): 将 actionlint 添加到 pre-commit 配置中，由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1699 中完成\n* 修复: 解决 TUI 刷新时的竞态条件，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1697 中完成\n* 新功能(ml): 通过结构化标签元数据添加管道内省功能，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1691 中完成\n* 发布: 0.3.14，由 @hussainsultan 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1703 中完成\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fcompare\u002Fv0.3.13...v0.3.14","2026-03-09T20:34:51",{"id":185,"version":186,"summary_zh":187,"released_at":188},306249,"v0.3.13","## 变更内容\n* 修复(parse)：由 @gmurro 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1668 中实现，处理来自 Postgres `VARCHAR` 列的 `string(N)` 长度限定符。\n* 功能(run)：由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1631 中实现，持久化结构化的运行日志。\n* 修复(ml)：由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1675 中实现，修正了针对结构体和嵌套类型的 `do_into_backend` 条件。\n* 杂项(gizmosql)：由 @prmoore77 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1659 中实现，更新依赖、简化 DDL\u002FDML 执行，并启用 OAuth\u002FSSO。\n* 修复(ml)：由 @ghoersti 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1676 中实现，允许在没有目标的情况下使用 `Pipeline.fit` 进行 `ClusterMixin` 的预测步骤。\n* 杂项(lint)：由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1677 中实现，启用 PLC0415 规则，以强制在测试中使用模块级别的导入。\n* 修复(ibis_yaml)：由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1671 中实现，去重 YAML 输出并简化序列化过程。\n* 杂项：由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1680 中实现，更新模板。\n* CI：由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1679 中实现，每个后端任务仅启动所需的 Docker 服务。\n* 测试(bench)：由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1678 中实现，对目录 CLI 进行基准测试。\n* 重构：由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1654 中实现。\n* 修复(ml)：由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1670 中实现，选择融合优化。\n* 性能(lineage)：由 @paddymul 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1685 中实现，修复了 `build_column_trees` 中的二次哈希回归问题。\n* 杂项(ci)：由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1687 中实现，将 CodSpeed 模式从插桩切换为模拟。\n* 发布：0.3.13 版本，由 @hussainsultan 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1688 中发布。\n\n## 新贡献者\n* @gmurro 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1668 中完成了首次贡献。\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fcompare\u002Fv0.3.12...v0.3.13","2026-03-06T19:09:28",{"id":190,"version":191,"summary_zh":192,"released_at":193},306250,"v0.3.12","## 变更\n\n- 修复（TUI）：在数据预览中将浮点数值四舍五入到小数点后两位 (#1632)\n- George\u002F修复：文件锁并发读取问题 (#1636)\n- CI（release-drafter）：为规范化的提交信息添加自动标签功能 (#1634)\n- 修复（ibis_yaml）：为 bytes 类型添加翻译 (#1625)\n- CI：升级运行器以修复失败的测试 (#1629)\n- CI：添加 release-drafter 工作流 (#1622)\n- 功能（目录）：添加带有 Textual DataTable 查看器的 TUI 标志 (#1611)\n- 修复（缓存）：延迟读取时的哈希冲突问题 (#1621)\n- 功能（CLI）：向 run_command 添加结构化日志记录和遥测功能 (#1615)\n- 杂项（CI）：启用并行测试，并将 Trino 后端加入矩阵测试 (#1614)\n- 修复 build_column_trees 中的指数级遍历问题 (gh-1618) (#1619)\n- 功能（CLI）：添加 run-cached 命令 (#1613)\n\n## ✨ 改进\n\n- 功能（CLI）：向 xorq run 添加 --alias 和 --name 标志 (#1638)\n- 功能（目录）：在断言语句中添加描述性消息 (#1639)\n- 功能（CLI）：添加 catalog list-aliases 命令 (#1633)\n\n## 🐞 错误修复\n\n- 修复（机器学习）：提升宽表达式的性能 (#1669)\n- 修复（机器学习）：避免在 score_expr 和 Scorer.from_spec 中过早执行模型 (#1660)\n- 修复（ibis YAML）：修复 MemTable 的相等性比较 (#1644)\n- 修复（CLI）：移除重复的 run_cached_command 定义 (#1624)\n\n## 📖 文档\n\n- 文档：更新 Catalog 参考文件名和包路径 (#1630)\n\n## 📦 构建系统\n\n- 杂项（代码检查）：添加 ruff C4 和 FURB 规则并修复违规 (#1664)\n- 杂项（代码检查）：添加 ruff B（flake8-bugbear）规则并修复违规 (#1658)\n- CI：跳过拉取请求上的安装测试 (#1641)\n- CI：移除 py3.10 的慢速级别 1 测试 (#1635)\n\n感谢所有贡献者使本次发布成为可能！\n@dlovell、@ghoersti、@hussainsultan、@mesejo、@paddymul","2026-03-04T10:06:43",{"id":195,"version":196,"summary_zh":197,"released_at":198},306251,"v0.3.11","## 变更内容\n* 功能（gizmosql）：添加 GizmoSQL 后端（基于 Arrow Flight SQL 的 DuckDB），由 @prmoore77 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1586 中实现\n* 修复（flight）：修正未绑定节点的替换问题，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1591 中完成\n* George\u002F功能：添加 CV 功能，由 @ghoersti 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1592 中实现\n* 重构（api）：添加缓存类，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1594 中完成\n* 修复：为 gen_downstream 添加记忆化机制，以防止指数级遍历，由 @hussainsultan 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1515 中完成\n* 杂项：从 lineage_utils 中移除 rich，由 @hussainsultan 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1595 中完成\n* 重构（cli）：将参数解析方式从 argparse 转换为 click，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1596 中完成\n* 功能（catalog）：添加新目录，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1597 中实现\n* 修复（process_utils）：同时清空两个管道以避免死锁，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1601 中完成\n* 修复（uv）：由于 pyarrow 的问题，要求 Python 版本低于 3.14，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1602 中完成\n* 性能优化：修复深度 FittedPipeline 表达式中 build_expr 的指数级扩展问题，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1604 中完成\n* 修复（docs）：更新文档以反映当前代码，由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1607 中完成\n* 修复：为裸露的异常抛出添加实质性错误信息，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1606 中完成\n* 杂项（deps）：将依赖 uv 更新至 v0.9.6 [安全]，由 @renovate[bot] 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1543 中完成\n* 杂项（deps）：将 pre-commit 钩子 astral-sh\u002Fruff-pre-commit 更新至 v0.15.2，由 @renovate[bot] 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1549 中完成\n* 杂项（deps）：将 pre-commit 钩子 astral-sh\u002Fuv-pre-commit 更新至 v0.10.4，由 @renovate[bot] 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1550 中完成\n* 杂项（deps）：将依赖 mcp 更新至 v1.23.0 [安全]，由 @renovate[bot] 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1544 中完成\n* 修复（ibis_yaml）：uv_tool_run：支持设置 Python 版本，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1603 中完成\n* 修复（ci）：为 ibis 兼容性测试使用 datafusion\u003C52.0.0，由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1609 中完成\n* 杂项（deps）：将依赖 pip 更新至 v26 [安全]，由 @renovate[bot] 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1545 中完成\n* 杂项（deps）：将依赖 cryptography 更新至 v46 [安全]，由 @renovate[bot] 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1573 中完成\n* 功能（catalog）：添加别名，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1608 中实现\n* 修复：更新模板哈希值，由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1610 中完成\n* 功能（cli）：别名功能，由 @dlovell 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1612 中实现\n* 杂项（test）：移除 xfail 测试，由 @mesejo 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1616 中完成\n* 杂项（deps）：将依赖 black 更新至 v25.12.0，由 @renovate[bot] 在 https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1551 中完成\n* 杂项（deps）：更新依","2026-02-24T16:23:47",{"id":200,"version":201,"summary_zh":202,"released_at":203},306252,"v0.3.10","## 变更\n\n### 新增\n- 为 DateUnit、TimeUnit 和 TimestampUnit 添加 YAML 序列化 (#1577)\n- 为 ParquetTTLSnapshotCache 和 SourceSnapshot 添加 YAML 序列化 (#1578)\n- `xorq.ibis_yaml.{build_expr,load_expr}` (#1574)\n- `attr_utils.{convert_sorted_kwargs_tuple,validate_kwargs_tuple}` (#1585)\n\n### 修改\n- sklearn-non-scorer-metrics (#1576)\n\n### 修复\n- 清理读取名称 (#1581)\n- 可重定位构建 (#1582)\n- 缓存哈希冲突 (#1587)","2026-02-18T04:09:09",{"id":205,"version":206,"summary_zh":207,"released_at":208},306253,"v0.3.9","## What's Changed\r\n* fixed the link to the quickstart in the README by @paddymul in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1559\r\n* feat: sklearn scorers by @ghoersti in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1565\r\n* Chore\u002Ffix example deps by @paddymul in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1564\r\n* release: 0.3.9 by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1571\r\n\r\n## New Contributors\r\n* @paddymul made their first contribution in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1559\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fcompare\u002Fv0.3.8...v0.3.9","2026-02-10T18:15:31",{"id":210,"version":211,"summary_zh":212,"released_at":213},306254,"v0.3.8","## What's Changed\r\n* feat: add grpc otel exporter by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1488\r\n* feat(cli): serve-unbound to accept snapshot hash by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1478\r\n* fix(docs): update quickstart.qmd with valid udxf client by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1503\r\n* Update CONTRIBUTING.md by @ghoersti in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1502\r\n* fix(cli): specify the type of the output format (OutputFormats) by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1504\r\n* chore: update DuckDB backend code by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1351\r\n* docs: update README and add architecture\u002Fintro SVG diagrams by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1473\r\n* feat(ml): sklearn metrics by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1514\r\n* fix(ibis_yaml): properly detect memtables on load by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1520\r\n* docs: fix UI styling and fonts by @Olamideod in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1512\r\n* fix(ibis_yaml): ExprLoader.deferred_read_to_memtables: return an op by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1524\r\n* feat(cli): run-unbound: enable passing file\u002Fstream to read from by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1525\r\n* fix(ibis_yaml): deal with possible exprs in expr scalar udf by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1527\r\n* feat: remove from fitted steps, register : OneHotEncoder, TfIdfVector… by @ghoersti in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1531\r\n* docs: adjust hero heading size and text wrapping by @Olamideod in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1530\r\n* docs: restructure the reference documentation and add a glossary by @Olamideod in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1538\r\n* fix(deps): require sqlglot \u003C28.7.0 by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1542\r\n* fix(backends): connection equivalence by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1556\r\n* refactor: consolidate get_structer_out and clarify KV-encoding proper… by @ghoersti in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1541\r\n* fix(backends): restore ibis Expr._find_backend by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1557\r\n* George\u002Ffeat\u002Fregister compatible scikit by @ghoersti in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1558\r\n* release: 0.3.8 by @ghoersti in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1566\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fcompare\u002Fv0.3.7...v0.3.8","2026-02-06T17:16:45",{"id":215,"version":216,"summary_zh":217,"released_at":218},306255,"v0.3.7","## What's Changed\r\n* feat(cli): add sdist.tar.gz as part of build artifacts by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1477\r\n* docs: Restructure documentation IA and populate the Getting Started and Tutorials tabs by @Olamideod in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1451\r\n* fix(nix): remove assert_not_in_nix_shell for uv_tool_run by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1494\r\n* ref(ibis_yaml): refactor expr dump\u002Fload, naming by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1492\r\n* ref(compiler): cleanup translate by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1459\r\n* release: 0.3.7 by @ghoersti in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1497\r\n\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fcompare\u002Fv0.3.6...v0.3.7","2026-01-08T16:59:36",{"id":220,"version":221,"summary_zh":222,"released_at":223},306256,"v0.3.6","## What's Changed\r\n* feat(ibis): use snapshot hash and node refs by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1462\r\n* feat(ibis_yaml): dtype dedup by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1469\r\n* feat(xorq): add new embedded backend ops by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1464\r\n* fix: update snapshot by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1475\r\n* feat(templates): init_templates.py by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1476\r\n* feat(api): add cases by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1480\r\n* fix: enforce order_by arg to first and last in mutate by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1470\r\n* feat: add BinaryView type by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1481\r\n* spike: arrow ipc pipe by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1479\r\n* chore(deps): update dependency pytest to v9.0.2 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1485\r\n* chore(deps): update actions\u002Fcreate-github-app-token action to v2.2.1 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1482\r\n* chore(deps): update codecov\u002Fcodecov-action action to v5.5.2 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1483\r\n* chore(deps): update dependency pre-commit to v4.5.1 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1484\r\n* chore(deps): update ruff to 0.14.10 by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1489\r\n* ref: use datafusion default strftime by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1472\r\n\r\n\r\n\r\n**Full Changelog**: [0.3.6](https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fblob\u002Fmain\u002FCHANGELOG.md#036---2026-01-05)","2026-01-05T10:48:26",{"id":225,"version":226,"summary_zh":227,"released_at":228},306257,"v0.3.5","## What's Changed\r\n* chore(docs): add Working with the documentation section by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1392\r\n* docs: added windows installation across tutorials  by @Olamideod in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1402\r\n* docs: added an official style guide by @Olamideod in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1403\r\n* modified the contribution guide to include style guide by @Olamideod in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1405\r\n* fixed conflicting files by @Olamideod in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1408\r\n* fix(cli): remove unused ls command by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1394\r\n* fix: asof_join with different column names by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1414\r\n* docs: update README by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1286\r\n* feat(let): add temporal delta ops compiling by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1399\r\n* chore(doc): added vale linter integration guide to the repo by @Olamideod in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1410\r\n* chore(deps): update dependency blackdoc to v0.4.6 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1421\r\n* chore(deps): update dependency ruff to v0.14.7 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1422\r\n* chore(deps): update pre-commit hook astral-sh\u002Fruff-pre-commit to v0.14.7 - autoclosed by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1423\r\n* chore(deps): update pre-commit hook astral-sh\u002Fuv-pre-commit to v0.9.13 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1424\r\n* chore(deps): update actions\u002Fcreate-github-app-token action to v2.2.0 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1425\r\n* chore(deps): update dependency black to v25.11.0 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1426\r\n* chore(deps): update dependency coverage to v7.12.0 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1427\r\n* chore(deps): update dependency ipython to \u003C9.8.0,>=8.19.0 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1428\r\n* chore(deps): update dependency pre-commit to v4.5.0 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1429\r\n* fix(deps): update dependency fsspec to >=2024.6.1,\u003C2025.10.1 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1431\r\n* chore(deps): update actions\u002Fcheckout action to v6 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1432\r\n* docs: Fix heading display issues and apply sentence case per style guide  by @Olamideod in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1420\r\n* chore(deps): update postgres docker tag to v17.7 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1430\r\n* chore(deps): update astral-sh\u002Fsetup-uv action to v7 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1433\r\n* chore(deps): update dependency ipykernel to v7 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1434\r\n* chore(deps): update dependency pytest to v9 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1435\r\n* feat(compiler): add FillNull and NullIf translations by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1437\r\n* feat(compiler): add missing ops by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1441\r\n* feat(let): add TableUnnest op by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1436\r\n* fix(ibis_yaml): add ParquetSnapshotStorage by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1449\r\n* chore: make walk nodes deterministic by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1453\r\n* fix: make from_ibis handle different ibis versions  by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1444\r\n* fix(docs): example with named memtable by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1458\r\n* feat(caching): parquet ttl cache by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1455\r\n* ref(compiler): simplify translate by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1457\r\n* ref(ibis_yaml): translation context methods by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1460\r\n* fix(caching): patch normalize token retain lazy by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1461\r\n* chore: rename let to xorq by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1450\r\n* fix(cli): SdistBuilder: use untgzed dir as --with arg to uv by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1465\r\n* chore(test): update hexdigest snapshot by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1466\r\n* fix(docs): update caching examples by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1463\r\n\r\n## New Contributors\r\n* @Olamideod made their first contribution in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1402\r\n\r\n**Full Changelog**: [0.3.5](https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fblob\u002Fmain\u002FCHANGELOG.md#035---2025-12-22)","2025-12-22T12:59:52",{"id":230,"version":231,"summary_zh":232,"released_at":233},306258,"v0.3.4","## What's Changed\r\n* chore(docs): correct installation of quickstart by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1379\r\n* feat(let): add strftime function by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1373\r\n* feat(snowflake): add find_in_set by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1375\r\n* chore(docs): automate preview by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1380\r\n* chore(docs): rollback automatic preview of docs by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1383\r\n* fix(collections): fix FrozenDict replacement by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1385\r\n* chore(docs): use xorq[examples] across tutorials by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1388\r\n* chore: remove requirements-dev.txt by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1387\r\n* chore(cli): add help for uv-build and uv-run commands by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1395\r\n* chore: use pyscopg[binary] by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1396\r\n* release: 0.3.4 by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1397\r\n\r\n\r\n**Full Changelog**: [0.3.4](https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fblob\u002Fmain\u002FCHANGELOG.md#034---2025-11-19)","2025-11-19T16:49:40",{"id":235,"version":236,"summary_zh":237,"released_at":238},306259,"v0.3.3","## What's Changed\r\n* chore: enable lock file maintenance in renovatebot by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1370\r\n* chore(deps): update pre-commit hook astral-sh\u002Fuv-pre-commit to v0.9.7 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1367\r\n* chore(deps): update pre-commit hook astral-sh\u002Fruff-pre-commit to v0.14.3 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1366\r\n* chore(deps): update postgres docker tag to v17.6 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1365\r\n* chore: disable setup-python dependency updates by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1371\r\n* chore(deps): update dependency trino to v0.336.0 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1364\r\n* chore(deps): update dependency pytest-codspeed to \u003C4.2.1,>=3.0.0 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1361\r\n* chore(deps): update dependency ruff to v0.14.3 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1363\r\n* fix: add builtin containers in from_ibis by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1369\r\n* refactor: move expr_to_unbound by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1357\r\n* feat(snowflake): add hexdigest function by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1374\r\n* fix(duckdb): support version >= 1.4.1 by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1377\r\n\r\n\r\n**Full Changelog**: [0.3.3](https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fblob\u002Fmain\u002FCHANGELOG.md#033---2025-11-11)","2025-11-11T13:40:41",{"id":240,"version":241,"summary_zh":242,"released_at":243},306260,"v0.3.2","## What's Changed\r\n* chore(test): test weather_lib example by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1254\r\n* fix(cli): timeout peek port by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1255\r\n* fix(pandas): add Multiply and Hash ops by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1183\r\n* feat(xorq): easily uncache by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1256\r\n* fix: skip re.search on Path object in _maybe_glob_pattern by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1261\r\n* fix(ml): add `storage` arg to `Pipeline.fit` by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1257\r\n* chore(test): improve no-extra runner by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1231\r\n* fix(ml): uncached fittedstep model by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1260\r\n* fix(test): use pytest importorskip to sklearn test by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1262\r\n* chore: add better error message for ValueError by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1263\r\n* feat(compiler): Add translation for First and Any ops by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1264\r\n* feat(compiler): add reduction ops by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1265\r\n* fix(caching): _ParquetStorage._put: write to a tmp location by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1268\r\n* feat(cli): better metadata by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1271\r\n* feat(nix): add xorq-psql by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1270\r\n* chore(test): split slow test workflow by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1272\r\n* fix(otel): _transform_deferred_reads: squelch warning re Path by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1275\r\n* fix(xorq): add valid default xorq.expr.udf.agg.pandas_df name by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1278\r\n* feat(examples): add sklearn_classifier_comparison by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1273\r\n* fix(examples): faster do_explode_encode by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1269\r\n* ref(ml): train test split default by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1196\r\n* fix(ml): pipeline infer features by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1274\r\n* fix(ibis): not execute doc code by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1281\r\n* docs: update readme with bottoms-up messaging by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1280\r\n* chore(xorq): update xorq_datafusion version by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1284\r\n* fix(pandas): enable count by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1290\r\n* fix(split lib): train test splits pandas by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1291\r\n* feat: add sqlite backend by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1244\r\n* ref(ml): move tests to the dedicated package by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1293\r\n* chore: add pandas tests by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1295\r\n* chore: move pandas backend out of vendored ibis by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1296\r\n* feat: allow for specifying compiler in to_sql by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1283\r\n* fix(pandas): custom_hash for nameless Series by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1289\r\n* chore: remove vendored ibis conftest.py by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1300\r\n* chore(postgres): improve testing by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1287\r\n* chore(docs): update quickstart.qmd by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1299\r\n* fix(ibis_yaml): Distinct: register from_yaml loader by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1303\r\n* fix(cli): fixup template tests by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1311\r\n* feat: add tagging for ml ops by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1297\r\n* fix(ml): fixup pipeline tagging tests by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1312\r\n* chore: remove commented code by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1313\r\n* chore(deps): update quarto version by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1315\r\n* chore: remove polyfill by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1314\r\n* chore(deps): change Bitnami Catalog (docker images) by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1316\r\n* fix(profiles): default env var reference by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1310\r\n* chore(deps): update pre-commit hook astral-sh\u002Fuv-pre-commit to v0.8.22 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1320\r\n* fix(docs): mermaid diagrams in vignettes by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1327\r\n* chore(deps): update dependency blackdoc to v0.4.3 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1317\r\n* chore(deps): update dependency coverage to v7.10.7 by @renovate[bo","2025-11-03T09:37:09",{"id":245,"version":246,"summary_zh":247,"released_at":248},306261,"v0.3.1","## What's Changed\r\n* chore(nix): add xorq app by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1163\r\n* fix(uv): remove spurious riscv64 entry by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1165\r\n* chore(flake): make xorq cli app to use all deps by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1164\r\n* chore(deps): update pre-commit hook astral-sh\u002Fruff-pre-commit to v0.12.7 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1168\r\n* chore(deps): update dependency ruff to v0.12.7 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1167\r\n* chore(deps): update pre-commit hook astral-sh\u002Fuv-pre-commit to v0.8.4 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1171\r\n* chore(deps): update bitnami\u002Fminio docker tag to v2025.7.23 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1169\r\n* chore(docs): add CLI section in 10_minutes by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1158\r\n* chore(renovate): properly configure pin setup-python by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1177\r\n* chore(deps): update dependency coverage to v7.10.2 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1170\r\n* fix(deps): update dependency datafusion to v48 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1174\r\n* fix(deps): update dependency fsspec to >=2024.6.1,\u003C2025.7.1 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1172\r\n* chore(deps): update dependency pytest-codspeed to v4 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1173\r\n* fix(deps): update dependency pyarrow to v21 by @renovate[bot] in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1175\r\n* fix: ensure preserve_index=False in RecordBatch.from_pandas by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1160\r\n* fix(cli): xorq serve inference by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1176\r\n* chore(nix): fix riscv issuee in nix run by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1185\r\n* ref(flight): remove bind value in FlightURL by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1181\r\n* chore(nix): fix pyarrow 21.0.0 build on darwin by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1192\r\n* fix(xorq): read_record_batches schema mismatch by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1190\r\n* fix: pointing to main of xorq-weather-lib by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1188\r\n* fix(xorq): register with table_name default value by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1182\r\n* fix(nix): update flake inputs by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1191\r\n* docs(quickstart): remove row_number hack for gen_splits by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1193\r\n* add console_metrics, prometheus port to serve-unbound by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1197\r\n* fix: .sql on deferred_read_* nodes by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1184\r\n* feat(build): make deferred read and sql outputs optional in BuildManager by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1199\r\n* fix(cli): rename serve cmd by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1200\r\n* chore(test): improve speed of ibis_yaml package by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1202\r\n* chore(test): move into_backend tests to test_into_backend.py by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1178\r\n* ref(examples): bank marketing uses pipeline lib by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1204\r\n* chore(test): use local files for reducing execution time by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1206\r\n* feat(xorq): add Tag(Node) class, Expr.tag method by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1205\r\n* fix(cli): better serve-unbound con detection by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1212\r\n* ref: delay sklearn import by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1215\r\n* ref: delay pandas import by @dlovell in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1219\r\n* feat: add limit option to run by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1203\r\n* fix: wrong arg limit in serve_unbound_parser by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1226\r\n* fix(docs): use item accessor (square brackets) for tag column by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1227\r\n* chore: remove print in elide_cache_node by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1228\r\n* chore(test): use peek_port in test_serve_command by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1221\r\n* chore(test): reduce combinations and outdated workflows by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1230\r\n* fix(yaml): support group by alias in aggregate by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1224\r\n* chore(test): add runner per backend by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1210\r\n* doc: fix readme broken links by @hussainsultan in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxor","2025-08-30T08:20:17",{"id":250,"version":251,"summary_zh":252,"released_at":253},306262,"v0.3.0","## What's Changed\r\n* chore(docs): add expression format concept page by @mesejo in https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fpull\u002F1159\r\n\r\n\r\n**Full Changelog**: [0.3.0](https:\u002F\u002Fgithub.com\u002Fxorq-labs\u002Fxorq\u002Fblob\u002Fmain\u002FCHANGELOG.md#030---2025-07-28)","2025-07-28T16:24:09"]