# ===== Python =====
__pycache__/
*.py[cod]
*$py.class
*.so
*.egg-info/
.eggs/
build/
dist/
develop-eggs/
downloads/
eggs/
parts/
sdist/
var/
wheels/
.installed.cfg
*.egg
MANIFEST

# ===== 虚拟环境 =====
.venv/
.venv-*/
venv/
env/
ENV/
.codex-service-deps/

# ===== 测试 / 静态检查 =====
.pytest_cache/
.pytest-basetemp*/
.pytest-tmp*/
.mypy_cache/
.ruff_cache/
!tests/
!tests/test_audio_adapter.py
.tox/
nox/
.coverage
.coverage.*
htmlcov/
coverage.xml
*.cover

# ===== Web 控制台构建 / E2E =====
web/node_modules/
web/dist/
web/test-results/
web/playwright-report/

# ===== 本地 E2E 测试产物 =====
node_modules/
package-lock.json
package.json
*.png
check_*.mjs

# ===== 缓存与产物 =====
*.octx
.octx-workspace/
.service-data/
tasks/
GIT_COMMIT_HOOK.md

# ===== 环境变量 / 密钥 =====
.env
.env.*
!.env.example
config.test.toml
config.prod.toml

# ===== 本地配置文件（含密钥，不入库）=====
config.local.toml
*.local.toml
# 钉钉（dws）登录令牌：含 access_token，只在本地保留
dws_auth_token.json
tests/fixtures/dws_auth_token.json
.local/

# ===== 本地 Agent/编辑器状态 =====
.zcode/

# 开发机的全局 gitignore 会忽略 scripts 目录，项目脚本必须入库（测试会直接引用），
# 因此这里显式取反。**不要**再写 `scripts/*` 之类的排除：那会让新增脚本被静默忽略，
# 而对应测试已入库，CI 在收集阶段直接失败——`scripts/update_dws_auth_token.py` 与
# `scripts/zhipin_recommend_resume_wasm.py` 就是这样丢失的（tests/ 下仍留着它们的用例）。
# 含密钥的本地文件由上面的 `dws_auth_token.json` 等显式规则排除，不依赖目录级排除。
!scripts/

# ===== 企业微信会话内容存档 C SDK（随包分发，需入库）=====
!src/zleap_parser/connector/sources/core/wxwork_sdk/
!src/zleap_parser/connector/sources/core/wxwork_sdk/*.so

# ===== IDE / 编辑器 / 系统 =====
.idea/
.vscode/
*.swp
*.swo
.DS_Store
Thumbs.db

# ===== 本地临时产物 =====
# 接入体检的 JSON 产物（`scripts/*_intake.py --json .tmp/...`）；Markdown 报告才入库
# （`docs/adapter-intake.md`、`docs/route-contract-diff.md`）。
.tmp/
