merge: 同步 origin/qyqy_develop(风控扫描、知识检索、客服 Agent、协商等)

冲突处理:均为双方各自新增,按并集保留——
- .gitignore:本地 data/logs 忽略项 + 远端 .dsh-drop/
- app/core/config.py:offsite/promotion 与 risk_scan 配置项并存
- app/service/agent/bootstrap.py:场外/推介/风控/NL2SQL/知识检索 工具与 Agent 全部注册
- app/worker/__main__.py:场外邮件 Worker 接线 + runtime 关系服务/投影清理注入并存

收尾:新增 20260911_merge_risk_heads 收敛迁移双 head;按 docs/21 生成 config/jwt/dev 开发密钥。
This commit is contained in:
2026-09-11 17:32:47 +08:00
153 changed files with 16846 additions and 267 deletions
+25 -2
View File
@@ -6,8 +6,11 @@ TIMEZONE=Asia/Shanghai
JWT_ISSUER=jr-local
JWT_AUDIENCE=jr-agent-platform
JWT_ALGORITHM=RS256
JWT_PRIVATE_KEY_PATH=config/jwt/jwt-private.pem
JWT_PUBLIC_KEY_PATH=config/jwt/jwt-public.pem
# 开发专用密钥,由 tools/generate_jwt_keys.py 生成。config/jwt/ 已被 .gitignore 忽略,
# 所以克隆仓库后**必须自己生成一次**,否则服务会因为读不到公钥而启动失败。
# 生产环境:在生产机上单独生成一套,用环境变量覆盖这两行,不要复用开发密钥。
JWT_PRIVATE_KEY_PATH=config/jwt/dev/jwt-private.pem
JWT_PUBLIC_KEY_PATH=config/jwt/dev/jwt-public.pem
JWT_CLOCK_SKEW_SECONDS=30
MYSQL_DSN=mysql+asyncmy://jr_app:change-me@127.0.0.1:3306/jr_agent
@@ -36,6 +39,7 @@ NEO4J_PASSWORD=
MODEL_ROUTER_CONFIG_REF=local
MODEL_DEFAULT_ENDPOINT=
MODEL_FALLBACK_ENDPOINT=
DEEPSEEK_API_KEY=
SSE_HEARTBEAT_SECONDS=15
SSE_MAX_CONNECTION_SECONDS=300
@@ -44,6 +48,25 @@ WORKER_RETRY_LIMIT=3
WORKER_POLL_SECONDS=1
SSE_CHUNK_CHARACTERS=256
RISK_SCAN_SCHEDULE_ENABLED=false
RISK_SCAN_INTERVAL_MINUTES=5
RISK_SCAN_RUN_IMMEDIATELY=false
RISK_SCAN_RETRY_LIMIT=2
RISK_SCAN_POLL_SECONDS=30
RISK_EVIDENCE_DIR=storage/risk_evidence
RISK_EVIDENCE_MAX_FILE_SIZE_MB=10
RISK_DAILY_REPORT_MAIL_ENABLED=false
RISK_DAILY_REPORT_MAIL_DRY_RUN=true
RISK_SMTP_HOST=
RISK_SMTP_PORT=465
RISK_SMTP_USERNAME=
RISK_SMTP_PASSWORD=
RISK_SMTP_SENDER=
RISK_SMTP_USE_SSL=true
RISK_SMTP_TIMEOUT_SECONDS=30
# 限流:按“用户 + 方法 + 路由”在窗口内计数,超限返回 429 RATE_LIMITED + Retry-After。
# 默认 600/60s(10 QPS)是为本机验收与集成测试留足余量的宽松值;生产按真实容量收紧。
# Redis 不可用时自动降级为放行(限流是保护措施,不能因后端故障拒绝正常请求)。