Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
4d8c6e2
build: configure ruff formatter with a 100 column limit
MisonL Sep 22, 2026
f87259d
style: apply ruff format across the repository
MisonL Sep 22, 2026
534f334
ci: run quality checks on pull requests and main
MisonL Sep 22, 2026
ed02a28
fix: 修正脱敏正则的驼峰键、误判与掩码吞键回归
MisonL Sep 22, 2026
31f5d73
fix: 修复 Ark 动态资源门禁、脱敏边界与流式 call_id 语义
MisonL Sep 22, 2026
e80f879
test: 补强回归测试的区分度与覆盖缺口
MisonL Sep 22, 2026
9ba7d70
fix: 给启动阶段加异常边界
MisonL Sep 22, 2026
97d750d
fix: 避免发布脚本的循环变量遮蔽平台参数
MisonL Sep 22, 2026
b3827f0
fix: 补齐顶层 item 校验、互斥来源与 custom input 编码
MisonL Sep 22, 2026
fca8a4d
fix: 从 dir() 隐藏资源代理的实现细节
MisonL Sep 22, 2026
ee4c6f0
docs: 在 CHANGELOG 补充本轮修复条目
MisonL Sep 22, 2026
3b4c21e
fix: 修复审查发现的脱敏回归、门禁缺口与资源代理出口
MisonL Sep 22, 2026
54af014
docs: 同步 CHANGELOG 到本轮审查修复
MisonL Sep 22, 2026
5ece7ba
test: 用合成标记替换会触发密钥扫描的测试值
MisonL Sep 22, 2026
101fb14
test: 用带 FAKE 标记的值替换密钥格式的测试夹具
MisonL Sep 22, 2026
02ea25d
fix: 修复审查发现的脱敏漏检、门禁误拦与能力映射不一致
MisonL Sep 22, 2026
128f1fc
docs: 修正资源代理出口的指向说明
MisonL Sep 22, 2026
c300d0b
test: 修复恒真断言、无区分度用例与抖动的时间断言
MisonL Sep 22, 2026
82c4a28
test: 用 FAKE 标记替换密钥形态的测试夹具
MisonL Sep 22, 2026
f2c42ed
fix: 让文本脱敏与配置边界共用同一套键名判定
MisonL Sep 22, 2026
b51f5a4
chore: 清理重构遗留的死常量并收紧异常断言
MisonL Sep 22, 2026
b7c3615
docs: 同步 CHANGELOG 的测试总数到 1061
MisonL Sep 22, 2026
c9bb58a
fix: 修复规划审查发现的许可、脱敏与文档缺陷
MisonL Sep 23, 2026
453d096
fix: 修复 None 字段崩溃、静默枚举与伪造 schema
MisonL Sep 23, 2026
b424bb3
fix: Ark 工具调用补 type 键,数值配置补齐加载期校验
MisonL Sep 23, 2026
0cb770a
refactor: 清理死代码与重复实现,加固发布校验
MisonL Sep 23, 2026
6b515ac
fix: 检索规模上界、bool 绕过校验的真因,以及测试假绿
MisonL Sep 23, 2026
1f9be3d
fix: 收紧配置与快照边界,修正分片失效与 BM25 静默空结果
MisonL Sep 23, 2026
a4f483a
fix: 给 pickle 加载加信任边界,修复 legacy 清理与发布包符号链接
MisonL Sep 23, 2026
b993fc4
fix: 阻止退出钩子删除被误配的 cache_path;忽略本地工作文件
MisonL Sep 23, 2026
c460e33
docs: 同步 CHANGELOG 的测试总数
MisonL Sep 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@
# 聊天模型或 OpenAI 兼容渠道
OPENAI_API_KEY="sk-your-openai-compatible-key"
OPENAI_API_BASE="https://api.openai.com/v1"
DEFAULT_LLM_PROVIDER="openai"
# 默认聊天渠道由 config.toml 的 default_llm_provider 决定(默认 "google")。
# 不要放开下一行:环境变量优先于 config.toml,一旦启用就会覆盖 TOML 里的
# 零凭证默认值,导致「按示例复制即可运行」失效(14 条模型配置因密钥为空串
# 在运行期失败)。若确实要用 OpenAI 兼容渠道,请在 config.toml 中改。
# DEFAULT_LLM_PROVIDER="openai"

# 其他可选模型密钥
ANTHROPIC_API_KEY=""
Expand Down
55 changes: 55 additions & 0 deletions .github/workflows/quality.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: quality

on:
push:
branches: ["main"]
pull_request:
workflow_dispatch:

permissions:
contents: read

jobs:
quality:
runs-on: ubuntu-24.04

steps:
- name: Checkout
uses: actions/checkout@v6.0.2

- name: Setup Python
uses: actions/setup-python@v6.2.0
with:
python-version: "3.11"

- name: Setup uv
uses: astral-sh/setup-uv@v7.6.0

- name: Sync dependencies
run: uv sync --group dev

- name: Check lockfile is up to date
run: uv lock --check

# 格式化检查放在最前:它的失败最容易被后续步骤的输出淹没,
# 而且未格式化的代码会让 lint 的 diff 变得难以阅读。
- name: Check formatting
run: uv run ruff format --check main.py src scripts tests

- name: Lint
run: uv run ruff check main.py src scripts tests

- name: Type check
run: uv run mypy --cache-dir /tmp/pyrag-kit-mypy main.py src

- name: Security scan
run: uv run bandit -r main.py src scripts -ll

- name: Byte-compile
run: uv run python -m compileall -q main.py src scripts tests

- name: Test
run: uv run pytest -q

- name: Check for whitespace errors
run: git diff --check
28 changes: 28 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,34 @@ jobs:
echo "version=${version}" >> "${GITHUB_OUTPUT}"
fi

- name: Validate version metadata
shell: bash
run: |
set -euo pipefail
tag="${{ steps.release_meta.outputs.tag }}"
version="${{ steps.release_meta.outputs.version }}"

# 手动 workflow_dispatch 的 tag/version 是手填的,必须与仓库中的
# 唯一真源交叉校验:否则会发出一个版本号与产物/说明不符的 release。
pyproject_version="$(python -c "import tomllib, pathlib; print(tomllib.loads(pathlib.Path('pyproject.toml').read_text())['project']['version'])")"
if [ "${version}" != "${pyproject_version}" ]; then
echo "版本不匹配: 输入 ${version} vs pyproject.toml ${pyproject_version}" >&2
exit 1
fi

expected_tag="v${pyproject_version}"
if [ "${tag}" != "${expected_tag}" ]; then
echo "标签不匹配: 输入 ${tag} vs 期望 ${expected_tag}" >&2
exit 1
fi

# CHANGELOG 必须已有该版本条目(extract_release_notes 也会检查,
# 但在这里提前失败能给出更清楚的错误位置)。
if ! grep -q "^## \[${pyproject_version}\]" CHANGELOG.md; then
echo "CHANGELOG.md 中未找到版本 ${pyproject_version} 的条目。" >&2
exit 1
fi

- name: Extract release notes
run: python scripts/extract_release_notes.py --version "${{ steps.release_meta.outputs.version }}" --output RELEASE_NOTES.md

Expand Down
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -60,3 +60,9 @@ config.toml

# 缓存目录
.cache/

# 会话/审查中间产物(本地工作文件,不入库)
# HANDOFF.md 可能含 API Key、令牌等敏感信息,只作为本地交接备忘。
HANDOFF.md
# 审查过程生成的复核报告(快照哈希命名,属于一次性产物)
.review-*.html
5 changes: 4 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ uv run python scripts/build_binary_release.py --target macos-arm64 --validate
开发依赖包含 Ruff、Bandit 和 MyPy。提交前可运行:

```bash
uv run ruff format --check main.py src scripts tests
uv run ruff check main.py src scripts tests
uv run bandit -r main.py src scripts -ll
uv run mypy --cache-dir /tmp/pyrag-kit-mypy main.py src
Expand All @@ -40,9 +41,11 @@ git diff --check

MyPy 使用任务专用缓存目录,避免多个进程共享 `.mypy_cache` 造成锁等待;优先修复本次改动引入的问题,并记录未覆盖的历史基线告警。

以上检查由 `.github/workflows/quality.yml` 在每次 PR 与 `main` 推送时执行;本地通过后再提交,避免 CI 往返。

## Coding Style & Naming Conventions

使用 4 个空格缩进、明确的公开函数类型标注和简短客观的 docstring。函数、变量和模块使用 `snake_case`,类使用 `PascalCase`,常量使用 `UPPER_CASE`。项目使用 Ruff 做 lint 检查,未配置独立 formatter;修改时遵循相邻代码风格并运行 `git diff --check`。保持服务、provider、检索和快照边界,不用静默回退或占位结果掩盖失败。
使用 4 个空格缩进、明确的公开函数类型标注和简短客观的 docstring。函数、变量和模块使用 `snake_case`,类使用 `PascalCase`,常量使用 `UPPER_CASE`。项目使用 Ruff 同时做 lint 与格式化,配置见 `pyproject.toml` 的 `[tool.ruff]`(行宽 100、双引号、4 空格);提交前运行 `uv run ruff format main.py src scripts tests`,不要手工对齐或调整引号。保持服务、provider、检索和快照边界,不用静默回退或占位结果掩盖失败。

## Testing Guidelines

Expand Down
Loading