{"id":"3c55fe9d-2b3d-4773-b2c5-b3b434adc26b","entityType":"agent","slug":"clawhub-419597334-sudo-bidhunter","name":"标讯猎手 BidHunter","canonicalUrl":"https://www.xpersona.co/agent/clawhub-419597334-sudo-bidhunter","canonicalPath":"/agent/clawhub-419597334-sudo-bidhunter","generatedAt":"2026-10-11T11:24:23.547Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T09:03:20.337Z","emptyReason":null},"description":"国央企招投标信息监控与研判技能。自动采集多平台公告，按资质规则比对可投性（可投/不可投/需确认），生成带研判简报并多通道推送。v1.5 起新增：资质匹配度评分(0-100)、投标日历与开标倒计时、金额/地区/行业多维筛选、零代码规则编辑器、诊断中心、示例模式、集中FAQ、统一命令入口；v2.0 本地AI增强（招标文件AI速读+风险条款识别，零云成本）；v2.5 投标策略建议；v3.0 本地开放API+签名webhook；v3.5 合规红线引擎（31条法定废标红线本地扫描、交标前自查清单、多主体串标隔离，零API成本）；v2.7 报价闸门（品类清算价地板、规模换算线性、单位单价、毛利红线，任一道不过即禁止输出结论金额）。★v2.8 覆盖率重写：修复只读前9000字符导致200页标书95%未读的缺陷，改为结构化分片全覆盖并强制标注覆盖率；修复PDF/DOCX扫描静默失效（此前规则命中恒为0）；新增评分点逐项映射与分值守恒校验、待补材料清单（高危红标签字盖章页缺件）、零响应检测（空洞满足/待补占位/跨项目残留/数字型空洞），无AI key也能出完整简报。触发词：抓招投标、今日哪些能投、标讯监控、标书研判、招投标公告、央企招标、投标资质匹配、AI读标书、投标建议、这份标会不会被废、废标风险、交标前检查、合规红线扫描、多主体投标、会不会被认定串标、报价闸门、这个标报多少、报价复核、出价前检查、这个标值不值得投、报价会不会被废、待补材料清单、还差什么材料、零响应检测、评分点、评分表、评分办法、这个分怎么拿、漏项、丢分、扣分项、待补、待提供、准备什么材料、递交清单、应答表、偏离表、评分台账、评分项跟踪、覆盖矩阵、哪些评分项没写、哪条要求没响应。 Skill: 标讯猎手 BidHunter Owner: 419597334-sudo Summary: 国央企招投标信息监控与研判技能。自动采集多平台公告，按资质规则比对可投性（可投/不可投/需确认），生成带研判简报并多通道推送。v1.5 起新增：资质匹配度评分(0-100)、投标日历与开标倒计时、金额/地区/行业多维筛选、零代码规则编辑器、诊断中心、示例模式、集中FAQ、统一命令入口；v2.0 本地AI增强（招标文件AI速读+风险条款识别，零云成本）；v2.5 投标策略建议；v3.0 本地开放API+签名webhook；v3.5 合规红线引擎（31条法定废标红线本地扫描、交标前自查清单、多主体串标隔离，零API成本）；v2.7 报价闸门（品类清算价地板、规模换算线性、单位单价、毛利红线，任一道不过即禁止输出结论金额）。★v2.8 覆盖率重写：修复只读前9000字符导致200页标书95%未读的缺陷，改为结构化分片全覆盖并强制标","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17a4re35sh5y6p33fdzmtdff1865pkx:bidhunter","sourceUrl":"https://clawhub.ai/419597334-sudo/bidhunter","homepage":"https://clawhub.ai/419597334-sudo/skills/bidhunter","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/419597334-sudo/bidhunter","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/419597334-sudo/skills/bidhunter","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"国央企招投标信息监控与研判技能。自动采集多平台公告，按资质规则比对可投性（可投/不可投/需确认），生成带研判简报并多通道推送。v1.5 起新增：资质匹配度评分(0-100)、投标日历与开标倒计时、金额/地区/行业多维筛选、零代码规则编辑器、诊断中心、示例模式、集中FAQ、统一命令入口；v2.0 本地AI增强（招标文件A"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:03:20.337Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:03:20.337Z","emptyReason":null},"stars":null,"forks":null,"downloads":1105,"packageName":null,"latestVersion":"2.9.1","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T09:03:20.328Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T09:03:20.337Z","lastCrawledAt":"2026-10-11T09:03:20.328Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T09:03:20.328Z","lastVerifiedAt":null,"highlights":[{"version":"2.9.1","createdAt":"2026-10-06T09:55:23.773Z","changelog":"v2.9.0 对表：评分点台账（B1）+ 正向覆盖矩阵（B2）。B1 五态状态机（未开始/已写/材料缺/待核/已完成）与四条必报警（分值不守恒、同章节重复锚点、状态回退未确认、距截止3天仍缺项），三查未过不判完成。必须同时传投标文件草稿，否则不判已完成。B2 逐条要求判 A完全/B部分/C未覆盖 非布尔；照抄要求原文或仅写'完全满足'判 B；无响应草稿一律判 C 不猜。真实标书回归发现并修复：最低价法标书不含评分表，工具会误把招标编号、日期、品牌型号抽成评分项——现改为先证明评分表存在再读取。CSV 保底输出，xlsx 有依赖才生成。 另：修正 ClawHub 静态扫描对变量名 need_verify 的误报（该名字配 False 被判为关闭 HTTPS 证书校验），改名 needs_manual。","fileCount":55,"zipByteSize":195464},{"version":"2.9.0","createdAt":"2026-10-06T09:44:31.108Z","changelog":"v2.9.0 对表：评分点台账（B1）+ 正向覆盖矩阵（B2）。B1 五态状态机（未开始/已写/材料缺/待核/已完成）与四条必报警（分值不守恒、同章节重复锚点、状态回退未确认、距截止3天仍缺项），三查未过不判完成。必须同时传投标文件草稿，否则不判已完成。B2 逐条要求判 A完全/B部分/C未覆盖 非布尔；照抄要求原文或仅写'完全满足'判 B；无响应草稿一律判 C 不猜。真实标书回归发现并修复：最低价法标书不含评分表，工具会误把招标编号、日期、品牌型号抽成评分项——现改为先证明评分表存在再读取。CSV 保底输出，xlsx 有依赖才生成。","fileCount":55,"zipByteSize":195457},{"version":"2.8.0","createdAt":"2026-10-06T07:50:27.665Z","changelog":"v2.8 覆盖率重写：修复只读前9000字符导致200页标书95%未读的缺陷，改为结构化分片全覆盖并强制标注覆盖率；修复PDF/DOCX规则扫描静默失效（此前命中恒为0）；新增评分点逐项映射与分值守恒校验、待补材料清单（签字盖章页缺件高危红标）、零响应检测（空洞满足/待补占位/跨项目残留/数字型空洞）；无AI key也能出完整简报。","fileCount":54,"zipByteSize":158841},{"version":"2.7.0","createdAt":"2026-09-22T08:35:33.941Z","changelog":"v2.7 quote gate: pre-bid formula gate, fully local and zero-dependency. Four computed cards - category floor price (local minimum wage x headcount x months x 1.10-1.25 coefficient), scale-conversion linearity check, unit-price band check, margin floor. Plus five manual checklist cards. Iron rule: if any computed card blocks, or any required parameter is missing, the gate refuses to output a conclusion amount - it emits only the cost-model framework and a missing-parameter list. Verified: missing-parameter run prints zero amount digits; blocked run suppresses the conclusion amount; only a fully-passing run echoes the amount. Also: dependency manifest is now schema-conformant with per-capability degradation paths, and internal planning docs were removed from the skill folder.","fileCount":53,"zipByteSize":142221},{"version":"2.6.0","createdAt":"2026-09-14T02:59:03.408Z","changelog":"v2.6.0 onboarding: init wizard (3 questions, free-form industry input - no fixed templates, paste business-scope text and it auto-splits into capability words), paste zero-config fallback (drop a tender file, get a bid-rejection risk report - no AI key, no source config, fully offline), local usage telemetry (writes local file only, never uploaded), source adapter presets (no real sources bundled), doctor E002 upgraded to one-click fix.","fileCount":51,"zipByteSize":128962},{"version":"2.5.3","createdAt":"2026-09-08T09:03:45.858Z","changelog":"v2.5.3: doctor E002 hint now embeds a direct feedback command (bidhunter feedback --type 2), making 'user stuck on rule config' observable - validation hook for the v2.5.2 feedback loop.","fileCount":45,"zipByteSize":112544},{"version":"2.5.2","createdAt":"2026-09-08T08:46:25.397Z","changelog":"v2.5.2: Add zero-cost feedback command (local formatting + clipboard + open platform comment page, no backend/no cloud); SKILL.md adds 'Stuck? Run doctor first' guide at the top; E002 onboarding friction queued for v2.6.","fileCount":45,"zipByteSize":112524},{"version":"2.5.1","createdAt":"2026-09-08T07:13:26.915Z","changelog":"v2.5.1: Add 60-second quickstart guide; report feedback section now states where to send feedback (ClawHub/SkillHub comments), closing the feedback loop.","fileCount":44,"zipByteSize":107196}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17a4re35sh5y6p33fdzmtdff1865pkx:bidhunter","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-419597334-sudo-bidhunter/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-419597334-sudo-bidhunter/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-419597334-sudo-bidhunter/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-419597334-sudo-bidhunter/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-419597334-sudo-bidhunter/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-419597334-sudo-bidhunter/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-11T11:24:23.540Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-419597334-sudo-bidhunter/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-419597334-sudo-bidhunter/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-419597334-sudo-bidhunter/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-419597334-sudo-bidhunter/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T09:03:20.337Z","emptyReason":null},"readme":"Skill: 标讯猎手 BidHunter\n\nOwner: 419597334-sudo\n\nSummary: 国央企招投标信息监控与研判技能。自动采集多平台公告，按资质规则比对可投性（可投/不可投/需确认），生成带研判简报并多通道推送。v1.5 起新增：资质匹配度评分(0-100)、投标日历与开标倒计时、金额/地区/行业多维筛选、零代码规则编辑器、诊断中心、示例模式、集中FAQ、统一命令入口；v2.0 本地AI增强（招标文件AI速读+风险条款识别，零云成本）；v2.5 投标策略建议；v3.0 本地开放API+签名webhook；v3.5 合规红线引擎（31条法定废标红线本地扫描、交标前自查清单、多主体串标隔离，零API成本）；v2.7 报价闸门（品类清算价地板、规模换算线性、单位单价、毛利红线，任一道不过即禁止输出结论金额）。★v2.8 覆盖率重写：修复只读前9000字符导致200页标书95%未读的缺陷，改为结构化分片全覆盖并强制标注覆盖率；修复PDF/DOCX扫描静默失效（此前规则命中恒为0）；新增评分点逐项映射与分值守恒校验、待补材料清单（高危红标签字盖章页缺件）、零响应检测（空洞满足/待补占位/跨项目残留/数字型空洞），无AI key也能出完整简报。触发词：抓招投标、今日哪些能投、标讯监控、标书研判、招投标公告、央企招标、投标资质匹配、AI读标书、投标建议、这份标会不会被废、废标风险、交标前检查、合规红线扫描、多主体投标、会不会被认定串标、报价闸门、这个标报多少、报价复核、出价前检查、这个标值不值得投、报价会不会被废、待补材料清单、还差什么材料、零响应检测、评分点、评分表、评分办法、这个分怎么拿、漏项、丢分、扣分项、待补、待提供、准备什么材料、递交清单、应答表、偏离表、评分台账、评分项跟踪、覆盖矩阵、哪些评分项没写、哪条要求没响应。\n\nTags: latest:2.9.1\n\nVersion history:\n\nv2.9.1 | 2026-10-06T09:55:23.773Z | user\n\nv2.9.0 对表：评分点台账（B1）+ 正向覆盖矩阵（B2）。B1 五态状态机（未开始/已写/材料缺/待核/已完成）与四条必报警（分值不守恒、同章节重复锚点、状态回退未确认、距截止3天仍缺项），三查未过不判完成。必须同时传投标文件草稿，否则不判已完成。B2 逐条要求判 A完全/B部分/C未覆盖 非布尔；照抄要求原文或仅写'完全满足'判 B；无响应草稿一律判 C 不猜。真实标书回归发现并修复：最低价法标书不含评分表，工具会误把招标编号、日期、品牌型号抽成评分项——现改为先证明评分表存在再读取。CSV 保底输出，xlsx 有依赖才生成。 另：修正 ClawHub 静态扫描对变量名 need_verify 的误报（该名字配 False 被判为关闭 HTTPS 证书校验），改名 needs_manual。\n\nv2.9.0 | 2026-10-06T09:44:31.108Z | user\n\nv2.9.0 对表：评分点台账（B1）+ 正向覆盖矩阵（B2）。B1 五态状态机（未开始/已写/材料缺/待核/已完成）与四条必报警（分值不守恒、同章节重复锚点、状态回退未确认、距截止3天仍缺项），三查未过不判完成。必须同时传投标文件草稿，否则不判已完成。B2 逐条要求判 A完全/B部分/C未覆盖 非布尔；照抄要求原文或仅写'完全满足'判 B；无响应草稿一律判 C 不猜。真实标书回归发现并修复：最低价法标书不含评分表，工具会误把招标编号、日期、品牌型号抽成评分项——现改为先证明评分表存在再读取。CSV 保底输出，xlsx 有依赖才生成。\n\nv2.8.0 | 2026-10-06T07:50:27.665Z | user\n\nv2.8 覆盖率重写：修复只读前9000字符导致200页标书95%未读的缺陷，改为结构化分片全覆盖并强制标注覆盖率；修复PDF/DOCX规则扫描静默失效（此前命中恒为0）；新增评分点逐项映射与分值守恒校验、待补材料清单（签字盖章页缺件高危红标）、零响应检测（空洞满足/待补占位/跨项目残留/数字型空洞）；无AI key也能出完整简报。\n\nv2.7.0 | 2026-09-22T08:35:33.941Z | user\n\nv2.7 quote gate: pre-bid formula gate, fully local and zero-dependency. Four computed cards - category floor price (local minimum wage x headcount x months x 1.10-1.25 coefficient), scale-conversion linearity check, unit-price band check, margin floor. Plus five manual checklist cards. Iron rule: if any computed card blocks, or any required parameter is missing, the gate refuses to output a conclusion amount - it emits only the cost-model framework and a missing-parameter list. Verified: missing-parameter run prints zero amount digits; blocked run suppresses the conclusion amount; only a fully-passing run echoes the amount. Also: dependency manifest is now schema-conformant with per-capability degradation paths, and internal planning docs were removed from the skill folder.\n\nv2.6.0 | 2026-09-14T02:59:03.408Z | user\n\nv2.6.0 onboarding: init wizard (3 questions, free-form industry input - no fixed templates, paste business-scope text and it auto-splits into capability words), paste zero-config fallback (drop a tender file, get a bid-rejection risk report - no AI key, no source config, fully offline), local usage telemetry (writes local file only, never uploaded), source adapter presets (no real sources bundled), doctor E002 upgraded to one-click fix.\n\nv2.5.3 | 2026-09-08T09:03:45.858Z | user\n\nv2.5.3: doctor E002 hint now embeds a direct feedback command (bidhunter feedback --type 2), making 'user stuck on rule config' observable - validation hook for the v2.5.2 feedback loop.\n\nv2.5.2 | 2026-09-08T08:46:25.397Z | user\n\nv2.5.2: Add zero-cost feedback command (local formatting + clipboard + open platform comment page, no backend/no cloud); SKILL.md adds 'Stuck? Run doctor first' guide at the top; E002 onboarding friction queued for v2.6.\n\nv2.5.1 | 2026-09-08T07:13:26.915Z | user\n\nv2.5.1: Add 60-second quickstart guide; report feedback section now states where to send feedback (ClawHub/SkillHub comments), closing the feedback loop.\n\nv2.5.0 | 2026-09-07T05:18:37.587Z | user\n\nv2.5.0: AI bid strategy advisor (bid_advisor) + v3.0 local subset: local open API (api_server) and signed webhook publishing. Zero cloud cost, all local.\n\nv2.0.0 | 2026-08-31T02:32:58.207Z | user\n\nv2.0.0 本地AI增强(零云成本)：招标文件 AI 速读(PDF/Word→资质门槛/预算/截止日/评分权重，需 pip install -r requirements.txt)、排他性/内定风险条款识别(本地规则+LLM)、业主/品类画像(本地累积统计)。仅消耗你的 MiniMax API 余额，无云服务器/云存储费用。\n\nv1.5.0 | 2026-08-24T02:58:07.489Z | user\n\nv1.5.0 规则进化+功能增强：零代码规则编辑器(图形化配规则/实时测试/模板)、资质匹配度评分(0-100)与排序、投标日历与开标倒计时、金额/地区/行业多维筛选、诊断中心(doctor)、示例模式(demo)、集中FAQ、统一命令入口、自定义数据源扩展平台覆盖。零云成本。\n\nv1.2.0 | 2026-08-16T16:37:30.815Z | user\n\nv1.2.0 体验优化「达：推得到，收得着」：\n1. 多通道推送：钉钉(加签)/企业微信(群机器人)/邮件(SMTP)三通道，同一标讯可并行推送\n2. 推送配置向导 config_wizard.py：交互式配通道，未通过连通性测试不写入；配置存 ~/.config/bidhunter/push.json(权限600)\n3. 推送历史库 push_history.db(SQLite/WAL)：30天日志、可查历史/统计/重试失败\n4. 失败自动兜底：主通道失败切备用通道，指数退避重试3次(1s/5s/30s)\n5. 失败告警：连续3天推送失败且无成功，强制邮件告警管理员\n6. 幂等保护：同日同题已成功不重复推送\n7. pipeline.sh 接入推送(--no-push可关)，未配置时静默跳过(向后兼容)\n8. status.py 新增 --push-stats 推送统计子命令\n注：飞书通道按需求推迟到 v1.5。\n\nv1.1.0 | 2026-08-10T03:31:54.700Z | user\n\nv1.1.0 核心改进：1.【边界感知匹配】修复 Python 3.13 中文字符边界误匹配问题，\"电气\"不再错误匹配\"电气石\"等子串；2.【规则库健康检查】新增 validate_rules 工具，检测空能力词、重复关键词、能力词与红警冲突；3.【精华版报告】report_text.py 新增 --summary 参数，输出精简版研判摘要（Top 5 可投）；4.【状态工具】新增 status.py，实时查看采集状态、近7天趋势、规则库摘要；5.【pipeline 增强】支持 --dry-run（预览）和 --summary 参数；6.【子串误报防护】新增 _exclude_contexts 全局上下文排除表（电气石/广告位/视频监控等）；6.【报告增强】HTML/文本报告新增 #序号、 verdict 中文化、底部反馈引导区块。\n\nv1.0.0 | 2026-08-07T07:38:56.271Z | user\n\n首版发布：多平台招投标信息监控与研判，支持3平台采集、资质比对、报告生成\n\nArchive index:\n\nArchive v2.9.1: 55 files, 195464 bytes\n\nFiles: references/field_standard.md (3541b), references/filter_rules.md (5854b), references/platforms.md (7283b), references/setup-guide.md (3831b), requirements.txt (248b), scripts/ai/analytics.py (3449b), scripts/ai/bid_advisor.py (7202b), scripts/ai/clause_extractor.py (15321b), scripts/ai/doc_parser.py (6185b), scripts/ai/doc_reader.py (2786b), scripts/ai/minimax_client.py (3847b), scripts/ai/risk_scanner.py (3908b), scripts/api_server.py (4275b), scripts/bid_monitor.sh (6779b), scripts/bidhunter.py (16631b), scripts/calendar.py (7133b), scripts/check_environment.py (3199b), scripts/compliance/compliance_scanner.py (14730b), scripts/compliance/redlines.json (17880b), scripts/config_wizard.py (6394b), scripts/custom_source.py (4908b), scripts/demo.py (2080b), scripts/docs/FAQ.md (5216b), scripts/doctor.py (6968b), scripts/faq.py (2216b), scripts/feedback.py (12686b), scripts/filter_multi.py (3061b), scripts/init_wizard.py (10852b), scripts/material_gap.py (14110b), scripts/pipeline.sh (8787b), scripts/push_manager.py (17165b), scripts/qual_check.py (20073b), scripts/qual_rules.json (6883b), scripts/quote_gate.py (19646b), scripts/quote_gen.py (2447b), scripts/quote/gate.json (4713b), scripts/report_html.py (10090b), scripts/report_text.py (6268b), scripts/rule_editor.py (15513b), scripts/samples/demo_cache.jsonl (1104b), scripts/samples/demo_qual.jsonl (4076b), scripts/samples/demo_rules.json (2539b), scripts/score_ledger.py (95785b), scripts/sources.example.json (746b), scripts/sources.presets/html_list.json (842b), scripts/sources.presets/json_api.json (1266b), scripts/sources.presets/README.md (2463b), scripts/sources.presets/rss.json (658b), scripts/status.py (7520b), scripts/usage.py (5479b), scripts/webhook_publish.py (2632b), skill-card.md (2246b), skill-dependencies.json (11905b), SKILL.md (29718b), _meta.json (128b)\n\nFile v2.9.1:SKILL.md\n\n---\nname: bidhunter\nslug: bidhunter\ndisplayName: 标讯猎手 BidHunter\nversion: \"2.9.1\"\nsummary: 国央企招投标信息监控与研判：自动采集多平台公告，按资质规则判断可投性，生成研判简报并推送；支持分片全覆盖读标、评分点分值守恒校验、评分点台账（五态状态机+四条必报警）、正向覆盖矩阵（A/B/C 三档）、待补材料清单、零响应检测、合规红线扫描与报价闸门。本地运行，零云成本。\nlicense: MIT-0\ndescription: \"国央企招投标信息监控与研判技能。自动采集多平台公告，按资质规则比对可投性（可投/不可投/需确认），生成带研判简报并多通道推送。v1.5 起新增：资质匹配度评分(0-100)、投标日历与开标倒计时、金额/地区/行业多维筛选、零代码规则编辑器、诊断中心、示例模式、集中FAQ、统一命令入口；v2.0 本地AI增强（招标文件AI速读+风险条款识别，零云成本）；v2.5 投标策略建议；v3.0 本地开放API+签名webhook；v3.5 合规红线引擎（31条法定废标红线本地扫描、交标前自查清单、多主体串标隔离，零API成本）；v2.7 报价闸门（品类清算价地板、规模换算线性、单位单价、毛利红线，任一道不过即禁止输出结论金额）。★v2.8 覆盖率重写：修复只读前9000字符导致200页标书95%未读的缺陷，改为结构化分片全覆盖并强制标注覆盖率；修复PDF/DOCX扫描静默失效（此前规则命中恒为0）；新增评分点逐项映射与分值守恒校验、待补材料清单（高危红标签字盖章页缺件）、零响应检测（空洞满足/待补占位/跨项目残留/数字型空洞），无AI key也能出完整简报。触发词：抓招投标、今日哪些能投、标讯监控、标书研判、招投标公告、央企招标、投标资质匹配、AI读标书、投标建议、这份标会不会被废、废标风险、交标前检查、合规红线扫描、多主体投标、会不会被认定串标、报价闸门、这个标报多少、报价复核、出价前检查、这个标值不值得投、报价会不会被废、待补材料清单、还差什么材料、零响应检测、评分点、评分表、评分办法、这个分怎么拿、漏项、丢分、扣分项、待补、待提供、准备什么材料、递交清单、应答表、偏离表、评分台账、评分项跟踪、覆盖矩阵、哪些评分项没写、哪条要求没响应。\"\nagent_created: true\n---\n\n# 标讯猎手 BidHunter\n\n> 采集国央企/公共资源招投标公告 → 资质规则比对可投性 → 生成带研判简报 → 多通道推送 → （v1.5+）评分排序/日历提醒/多维筛选/零代码配规则 → （v2.0+）AI 速读标书与风险识别 → （v2.5+）投标策略建议 → （v3.5+）**交标前法定红线扫描与废标预警**。\n> 自包含、已脱敏：不含任何私有主体、个人联系方式、公司档案。使用者按自己的营业执照与业务规则填充配置即可。\n\n## 5 分钟跑通（新用户看这里）\n\n两条路，挑一条：\n\n### A. 先看效果——不用配任何东西\n\n```bash\npython3 bidhunter.py paste 你的招标文件.pdf\n```\n\n丢一份招标文件进来，直接出**废标风险报告**（31 条法定红线本地扫描）。\n不需要 AI key、不需要采集源、离线可跑。\n\n### B. 开始监控——三问生成配置\n\n```bash\npython3 bidhunter.py init\n```\n\n问三个问题（主体名称 / 主营什么 / 盯哪些地区），自动生成你的资质规则库，\n再 `bash pipeline.sh` 开始采集。\n\n> 行业**不设固定选项**——可以直接粘贴营业执照经营范围，自动拆成能力词。\n> 想先看看效果不写盘：`python3 bidhunter.py init --preview`\n\n## 卡住了？先跑诊断\n\n任何异常先跑这一条，30 秒定位问题（E001~E005 + W001~W004，每条都带修复建议）：\n\n```bash\npython3 bidhunter.py doctor\n```\n\n> 最常见的失败原因是 **E002：规则库仍是示例占位符**。装上不等于能用——\n> 一条命令解决：`python3 bidhunter.py init`（三问自动生成，约 1 分钟）。\n\n## 版本能力一览\n\n| 版本 | 主题 | 关键能力 |\n|---|---|---|\n| v1.1 | 准 | 边界感知智能匹配、规则健康检查、精华版报告 |\n| v1.2 | 达 | 钉钉/企微/邮件多通道推送、配置向导、推送历史与告警 |\n| **v1.5** | 易+功能 | 匹配度评分、投标日历、多维筛选、规则编辑器、诊断/示例/FAQ/统一入口 |\n| **v2.0** | 智(本地AI) | 招标文件 AI 速读、排他/内定风险识别、业主品类画像（零云成本） |\n| **v2.5** | 策 | 投标策略建议生成（仅供参考，不代填报价/资质） |\n| **v3.0** | 开(本地) | 本地查询 API + 签名 webhook（云/SaaS 部分因成本约束未启用） |\n| **v3.5** | 规 | 合规红线引擎：31 条法定废标红线本地扫描 + 交标前自查清单 + 多主体串标隔离（零 API 成本） |\n| **v2.6** | 顺 | **上手转化**：`init` 三问生成配置（行业自由输入）、`paste` 零配置出废标风险报告、本地埋点、平台适配模板 |\n| **v2.7** | **价** | **报价闸门**：出价前算式校验（品类清算价地板、规模换算线性、单位单价、毛利红线），任一道不过即禁止输出结论金额；缺参数只交框架与待补清单 |\n| **v2.8** | **读全** | ★**覆盖率重写**：分片全覆盖（修掉只读前 9000 字符、200 页标书 95% 未读的缺陷）；PDF/DOCX 扫描静默失效已修（此前规则命中恒为 0）；**评分点逐项映射 + 分值守恒校验**；新增**待补材料清单**与**零响应检测**；无 AI key 也能出完整简报 |\n| **v2.9** | **对表** | **评分点台账**（五态状态机 + 四条必报警：分值不守恒/同章节重复锚点/状态回退未确认/临截止仍缺项）；**正向覆盖矩阵**（资格·技术·商务逐条判 A 完全 / B 部分 / C 未覆盖，非布尔）；两表共用 `response_location` 字段；CSV 保底 / xlsx 有库才出 |\n\n## ★ v2.8 为什么是这一版\n\n2026-10-05 复盘发现三个叠加缺陷，**每一个都单独足以让读标结论不可信**：\n\n| # | 缺陷 | 实测影响 | 修复 |\n|---|---|---|---|\n| 1 | `clause_extractor` / `risk_scanner` / `compliance_scanner` / `bid_advisor` 全部硬编码 `MAX_CHARS=9000` | 200~500 页标书（15~40 万字）**只喂入前 9000 字，约 4~6%**。且截断后照样输出完整 JSON —— **\"读了一页就当读完\"是最坏的失败模式** | `doc_parser.segment()` 按章节结构切片 + 逐片抽取 + 合并去重；输出强制带 `meta.coverage_pct` |\n| 2 | `compliance_scanner` 导入 `doc_parser.parse_document`（该函数不存在），异常被裸 `except` 吞掉 | **喂任何 PDF/DOCX，规则扫描恒为 0 条命中**，却照样打印一份自信的人工清单。B02 实测 0 → 修复后 9 条，其中命中\"缺漏项金额超 20% 视为非实质性响应\"（该标废标的真实原因） | 改用真实 `parse()`，并把 backend 与 chars_read 写进输出，让静默失败可见 |\n| 3 | `bid_advisor` 调 `extract(text)` 拿到的是**元组**，直接 `json.dumps` 传进 prompt | 策略建议基于一个字符串化的元组，**实际一直是坏的** | 接 `(clauses, meta)` 双返回；无 key 时降级出规则版简报而不是 exit 2 |\n\n**修复后实测（B02 保洁真实招标文件 PDF）**：覆盖率 79.9% → **100%**；合规命中 0 → **9 条**；无 AI key 也能出评标办法/截止时间/预算/资格要求/未确认字段。\n\n**新增两个纯规则（零 API）模块**：\n- `gap scan` 待补材料清单：三态（HAVE / MISSING / CHECK）+ 高危红标（**缺件项落在签字盖章页 = 形式审查直接不通过**）+ 有效期提醒\n- `gap zero` 零响应检测：空洞满足 / 借附件 / **待补占位** / 跨项目残留 / 承诺主体不明 / 数字型空洞（\"不低于要求\"却没数字）\n\n**新增评分点分值守恒校验**：评分项合计 ≠ 100 时报警并要求解释差额——总分对不上通常意味着**漏抄了评分项**，这正是漏分的根因。\n\n\n## 何时使用\n\n- \"抓一下招投标\" / \"今日哪些能投\" / \"重新分析一遍标讯\"\n- \"AI 读一下这份标书\" / \"这份招标文件有什么风险\" / \"帮我出投标建议\"\n- \"这份标会不会被废\" / \"交标前帮我过一遍\" / \"有没有废标风险\" / \"合规红线扫一下\"\n- \"还差什么材料\" / \"待补材料清单\" / \"这些材料要不要盖章\"（v2.8 `gap scan`）\n- \"帮我查查有没有漏项\" / \"有没有只写完全满足的\" / \"有没有上个项目的残留\"（v2.8 `gap zero`）\n- \"评分表在哪\" / \"评分点有几个\" / \"这个分怎么拿\"（v2.8 评分点逐项映射 + 分值守恒校验）\n- \"我们几家一起投 / 多主体投标会不会被认定串标\"（v3.5 先查实施条例第34条）\n- \"这个标报多少\" / \"报价复核一下\" / \"出价前帮我过一遍\" / \"这个标值不值得投\"（v2.7 走报价闸门）\n- 需要判断公告可投性、归属投标主体、监控重点平台\n- 搭建/优化招投标监控工作流\n\n## 安装与初始化\n\n1. 脚本已随 skill 就位（`~/.workbuddy/skills/bidhunter/scripts/`）。\n2. 编辑 `qual_rules.json` 填入你的投标主体与资质能力词：\n   - 零代码：运行 `python3 bidhunter.py rules edit` → 浏览器图形化编辑，内置「能源/建筑/IT/市政」行业模板可一键预填\n   - 或复制 `scripts/samples/demo_rules.json` 改\n   - 校验：`python3 qual_check.py --validate-rules qual_rules.json`\n3. （可选）配置推送：`python3 config_wizard.py`（钉钉/企微/邮件）\n4. （可选）配置 AI：`~/.config/bidhunter/ai.json` 写入 `{\"api_key\":\"你的MiniMaxKey\"}`（v2.0+ 用，仅消耗你的 API 余额，零云成本）。AI 速读 PDF/Word 建议先 `pip install -r requirements.txt`（PyPDF2/python-docx）；未装则自动降级为正则抽取。\n\n> 先看效果再配：直接 `python3 bidhunter.py demo` 跑内置示例。\n\n## 统一命令入口（v1.5 · A9，零命令行门槛）\n\n```bash\npython3 bidhunter.py run [--fresh] [--summary] [--calendar]   # 采集+比对+报告(+推送)\npython3 bidhunter.py status                                    # 今日状态\npython3 bidhunter.py doctor                                    # 一键诊断\npython3 bidhunter.py demo                                      # 示例效果\npython3 bidhunter.py calendar [--days 7]                        # 投标日历\npython3 bidhunter.py faq [关键词]                               # 查常见问题\npython3 bidhunter.py rules edit [--port 8080]                  # 图形化配规则\npython3 bidhunter.py ai read <标书.pdf>                        # v2.0 AI 速读\npython3 bidhunter.py ai advise <标书.pdf>                      # v2.5 投标建议\npython3 bidhunter.py api serve [--port 8765]                   # v3.0 本地API\npython3 bidhunter.py compliance scan <标书> [--mode tender|bid] # v3.5 合规红线扫描\npython3 bidhunter.py compliance checklist                      # v3.5 交标前自查清单\npython3 bidhunter.py gap scan <招标文件>                          # v2.8 待补材料清单\npython3 bidhunter.py gap zero <投标文件草稿>                      # v2.8 零响应检测\npython3 bidhunter.py quote params [--show]                     # v2.7 报价参数库（首次填一次）\npython3 bidhunter.py quote check --help                        # v2.7 报价闸门（不过禁止出金额）\npython3 bidhunter.py gap scan <招标文件>                        # v2.8 待补材料清单（零 API）\npython3 bidhunter.py gap zero <投标文件草稿> [--our-project 名称] # v2.8 零响应检测（零 API）\n```\n\n## 待补材料清单与零响应检测（v2.8）★\n\n读完标只是第一步，**最容易丢分的是\"以为写完了\"**。这两条命令专治这件事，纯规则、零 API 成本。\n\n```bash\n# 交标前还差什么：资格要求逐条三态判定 + 高危红标\npython3 bidhunter.py gap scan 招标文件.pdf\npython3 bidhunter.py gap scan 招标文件.pdf --json\n\n# 草稿写完后查零响应：空洞满足 / 借附件 / 待补占位 / 跨项目残留 / 数字型空洞\npython3 bidhunter.py gap zero 投标文件草稿.docx\npython3 bidhunter.py gap zero 草稿.docx --our-project \"XX项目\" --other-projects 上一标的项目名\n```\n\n**`gap scan` 输出**\n```\n共 3 项：缺 1 · 待确认 2 · 高风险 1 · 带有效期 2\n\n🔴 [MISSING] 3.3 业绩证明文件（资格评审第 4 项）★须按规定格式提交业绩表…\n     ⚠️ 出现在签字盖章页——缺件即形式审查不通过\n     标记：需盖章\n```\n\n三态含义：\n- `HAVE` — 规则库已有证据线索\n- `MISSING` — **原文写\"必须/应/须\"但未找到我方证据 → 最高优先级**\n- `CHECK` — 表述含糊，人工确认\n\n**高危判定**：缺件项若涉及合同/业绩/资质/承诺函/人员简历/盖章 → 🔴。因为这些要进签字盖章页，**占位符上会 = 形式审查直接不通过，不用到评标**。\n\n**`gap zero` 检出的六类零响应**\n| 类型 | 危险度 | 说明 |\n|---|---|---|\n| **待补占位**（待补/待提供/【 】/＿＿＿） | 致命 | 评标时等同未提供 |\n| **跨项目残留**（别的项目名/甲方名） | 致命 | 复制粘贴未替换 |\n| 空洞满足（完全满足/无偏离） | 风险 | 须紧跟具体做法或参数 |\n| 借附件（详见附件） | 风险 | 附件里必须真有内容 |\n| 数字型空洞（不低于要求/优于标准） | 风险 | 没给数字 = 按无偏离计分 = 零 |\n| 承诺主体不明（我司将…） | 提示 | 须落到具体章节与具体承诺 |\n\n\n## 评分点台账与覆盖矩阵（v2.9）★\n\n`gap` 回答\"我还差什么\"，**`score` 回答\"分丢在哪\"**。两张表在交标前互为补充：台账管评分项有没有写，覆盖矩阵管每条要求有没有答。纯规则、零 API 成本。\n\n```bash\n# B1 评分点台账：五态跟踪 + 四条必报警\npython3 bidhunter.py score ledger 招标文件.pdf\npython3 bidhunter.py score ledger 招标文件.pdf --csv 台账.csv --xlsx 台账.xlsx\npython3 bidhunter.py score ledger 招标文件.pdf --deadline 2026-10-20\n\n# B2 正向覆盖矩阵：逐条要求判 A/B/C（需同时给投标文件草稿）\npython3 bidhunter.py score coverage 招标文件.pdf --response 投标文件草稿.docx\n\n# 两张表一起出 + 机器可读\npython3 bidhunter.py score both 招标文件.pdf --response 草稿.docx --json\n\n# 内置自测（11 用例：四个反例 + 三个 L3 回归 + 报警/降级）\npython3 bidhunter.py score selftest\n```\n\n> ⚠️ **B1 必须配 `--response`**：不给投标文件草稿时，台账只会判「未开始」——\n> 定位到评分表只说明这项存在，不代表我方已写。这是 v2.9 修掉的 L1 缺陷\n> （此前不给草稿也报\"全部已完成\"）。\n> 用 `--prev-ledger 上版.json` 可激活 A3 状态回退检测。\n\n**B1 五态**（每个评分项在台账里的位置）\n\n| 状态 | 含义 |\n|---|---|\n| ⚪ 未开始 | 评分项已登记，但没定位到响应内容 |\n| 🔵 已写 | 定位到响应位置且有内容 |\n| 🔴 材料缺 | 标准要求的材料在材料库零命中 |\n| 🟡 待核 | 锚点与材料都到位，等三查通过 |\n| ✅ 已完成 | 三查通过（分值归位/锚点唯一/引用可达） |\n\n**B1 四条必报警**（不报警即算实现错误）\n| 编号 | 触发条件 |\n|---|---|\n| A1 | 评分项分值合计 ≠ 声明总分（缺省 100）——**差额必须解释，不得直接采信** |\n| A2 | 同一评分项在**同一文件同一章节**出现 ≥2 个锚点 |\n| A3 | 状态回退未经人工确认（需显式 `--confirm-regress`） |\n| A4 | 距投标截止 ≤3 天仍有「未开始」项 |\n\n**B2 覆盖三档**（非布尔——中间那档才是有用的信息）\n\n| 档 | 判定 |\n|---|---|\n| ✅ A 完全覆盖 | 定位到响应 ＋ 硬要素（数字/规格/名单/年限）齐全 ＋ 有承诺动词 |\n| 🟡 B 部分覆盖 | 有定位但硬要素缺失，**或**仅空声明（\"完全满足\"无支撑） |\n| 🔴 C 未覆盖 | 响应文件中定位不到对应内容 |\n\n**B2 关键用法**：`--response` **必须给投标文件草稿**。不给时全部降为 C 并提示\"未提供草稿，无法判定（不猜）\"——因为拿招标文件自己的措辞去比对毫无意义，硬要素天然\"齐全\"，会刷出假的 A。\n\n> 三条铁律同 v2.8：**不猜不编**（分值为空留空，不填 0）、**指不到页码标\"待人工核实\"**、**检测器不是裁判**（A/B/C 是规则判断，人工结论仍归人）。\n> `openpyxl` 非必需依赖：缺失时自动降级 CSV 并打印原因，CSV 是保底输出。\n\n\n## 标准流程\n\n### 1. 采集 + 比对 + 报告\n```bash\nbash pipeline.sh                  # 全流程（缓存优先）\nbash pipeline.sh --fresh         # 强制重采当天\nbash pipeline.sh --calendar      # 生成后额外打印投标日历\n# A4 多维筛选（后过滤）\nbash pipeline.sh --budget-min 500000 --budget-max 20000000 --region 天津 --industry 智能设备\n```\n报告：`bid_reports/report_YYYY-MM-DD.txt`（文字，适配 IM）、`report_YYYY-MM-DD.html`（浏览器）。\n\n### 2. 多通道推送（v1.2）\n首次 `python3 config_wizard.py` 配置；`pipeline.sh` 生成报告后自动推送。`push_manager.py` 支持 `test/history/stats/health-check/retry-failed`。关闭用 `pipeline.sh --no-push`。\n\n### 3. v1.5 新能力\n- **匹配度评分（A1）**：可投标按 0-100 分排序，等级 强烈推荐/建议跟/可投一般。报告直接显示分数。\n- **投标日历（A2）**：`python3 calendar.py <qual文件> --days 30` 看开标/截止日；`--remind` 对临近截止（默认48h）自动推送提醒。\n- **多维筛选（A4）**：规则库设 `region_priority.high` / `industry_categories`+`industry_priority` / `budget_priority`，运行时用 `--region/--industry/--budget-min/--budget-max` 过滤。\n- **规则编辑器（可视化）**：`python3 bidhunter.py rules edit` → http://localhost:8080，选行业模板、填能力词、实时试标、保存。\n- **诊断中心（A6）**：`python3 doctor.py` 输出带错误码（E001~E005 / W001~W004）的诊断与下一步。\n- **示例模式（A7）**：`python3 demo.py [--summary] [--calendar]` 用内置示例看完整效果。\n- **集中 FAQ（A8）**：`python3 faq.py <关键词>` 检索常见问题。\n- **平台扩展（A5）**：内置 3 适配器（cnooc/cebpubservice/ccgp）+ 自定义数据源 `sources.json`（json/rss/html 三种模式，零代码接入任意公开平台）。\n\n### 4. v2.0 本地 AI 增强（零云成本）\n```bash\npython3 bidhunter.py ai read 招标文件.pdf     # 解析+结构化抽取+风险扫描\npython3 bidhunter.py ai read 招标文件.pdf --llm   # 加 LLM 风险扫描\npython3 ai/analytics.py --days 30              # 本地业主/品类画像\n```\n调用你自己的 MiniMax API（仅耗余额），不外传数据到任何 BidHunter 云端（我们无云端）。\n\n### 5. v2.5 投标策略建议\n```bash\npython3 bidhunter.py ai advise 招标文件.pdf    # 资质自检+评分得分点+报价策略+时间节点\n```\n**合规边界**：只建议不代劳——不自动填报价、不伪造资质、不写技术方案。所有建议标注\"仅供参考，人工确认\"。\n\n### 6. v3.0 本地开放能力（零云成本子集）\n```bash\npython3 api_server.py --port 8765             # 本地查询 API（127.0.0.1，无云端）\npython3 webhook_publish.py qual_xxx.jsonl     # 把标讯签名推送到你自己的系统\n```\n> v3.0 原规划的云/SaaS 部分（多租户、第三方插件市场、数据市场、Salesforce/金蝶连接器）因涉及付费云基础设施，按成本约束未启用。本机 API + 签名 webhook 是其零成本替代。\n\n### 7. v3.5 合规红线引擎（零 API 成本）★\n\n找到标只是第一步，**交了标不被废**才是最后一公里。v3.5 把《招标投标法》《实施条例》《评标委员会和评标方法暂行规定》（12号令）蒸馏成机器可读的 **31 条法定红线**，本地扫描，**不调用任何 LLM，零 API 成本**。\n\n```bash\n# 扫招标文件：找出文件里埋了哪些\"雷\"（实质性要求、违规条款、致命形式要件）\npython3 bidhunter.py compliance scan 招标文件.pdf --mode tender\n\n# 扫投标文件：交标前最后一检，找自己文件里的致命项\npython3 bidhunter.py compliance scan 投标文件.pdf --mode bid\n\n# 交标前自查清单（31 条，逐条打勾）\npython3 bidhunter.py compliance checklist\n\n# 输出 JSON（供其他系统消费）/ 追加 LLM 深度扫描（耗 MiniMax 余额）\npython3 bidhunter.py compliance scan 招标文件.pdf --json\npython3 bidhunter.py compliance scan 招标文件.pdf --llm\n```\n\n**红线分类（31 条）**\n\n| 类 | 名称 | 条数 | 发生阶段 | 决定方 | 后果 |\n|---|---|---|---|---|---|\n| A | 拒收/不予受理 | 4 | 交标现场 | 招标人/代理机构 | 当场拒收，进不了评标 |\n| B | 否决投标 | 14 | 评标阶段 | 评标委员会 | 该份投标出局 |\n| C | 投标无效 | 4 | 全程 | 无需认定 | 相关投标**均**无效 |\n| D | 反向保护条款（盾牌） | 3 | 维权 | 投标人主张 | 可据此质疑/投诉 |\n| E | 多主体串标隔离 | 6 | 评审/调查 | 评标委员会/行政监督 | 视为串通，中标无效 |\n\n**三条最值钱的认知**（其余详见 `compliance/redlines.json`）：\n\n1. **多主体投同一标段，先查《实施条例》第34条**（C02）：单位负责人为同一人、或存在控股/管理关系的不同单位**不得**参加同一标段投标，违反则相关投标均无效。这是**资格硬禁止**，无需任何串通证据，且优先于一切串标推定。\n2. **细微偏差不影响投标有效性**（D02，12号令第26条）：个别漏项只会被要求补正，招标文件没规定量化标准的**不得扣分**。与\"重大偏差=否决\"严格区分——这条能救命。\n3. **标底不能作为否决依据**（D01，实施条例第50条）：招标文件若写\"报价超出标底±X%作废标处理\"，该条款**本身违法**，可据此质疑投诉。扫描器会自动识别此类违规条款并标为\"盾牌\"。\n\n**合规边界（与 v2.5 一致）**：\n- ✅ 做：法条索引、风险提示、自查清单、违规条款识别\n- ❌ 不做：法律意见、胜诉承诺、代填报价、伪造资质\n- ⚠️ 扫描结果**不构成法律意见**，最终判定以招标文件、评标委员会认定及有权机关解释为准。法规未给出量化标准的（如\"低于成本\"），本引擎**不设阈值**\n\n**深度审查联动**：本地扫描是\"浅层快速筛\"，需要逐条法理分析和举证策略时，联动蒸馏姊妹 skill（需另行安装）：`bid-rejection-guard`（25条红线深度审查）、`bid-price-redline`（低于成本举证自救）、`multi-entity-bid-isolation`（多主体串标隔离 10 条清单）。\n\n## 报价闸门（v2.7）—— 出价前必须过的四道算式卡\n\n找到标、保住标之后，**最贵的教训在报价上**：沿用旧价没换算规模、单价算错量级、毛利倒挂——错的数字会被下游当成可信基数一路沿用。\n\n```bash\n# 第一次填一次参数库（最低工资 / 毛利红线 / 容差），只写本机，不上传\npython3 bidhunter.py quote params\npython3 bidhunter.py quote params --show      # 查看 + 过期提醒（默认 90 天）\n\n# 跑闸门：给什么算什么，缺什么列什么\npython3 bidhunter.py quote check --labor --heads 7 --months 12 --cost 200000 --quote 260000\npython3 bidhunter.py quote check --prior-amount 600000 --prior-scale 300 --new-scale 60 --quote 120000\npython3 bidhunter.py quote check --help\npython3 bidhunter.py quote --selftest\n```\n\n**四道算式卡**（任一道不过 → **禁止输出结论金额**）：\n\n| 卡 | 名称 | 判据 |\n|---|---|---|\n| C-1 | 品类清算价筛查 | 对手地板价 ≈ 当地月最低工资 × 人数 × 月数 × (1.10~1.25)。我方合规成本 ≥ 地板价下限 → 判「结构性陪跑」，直接不投 |\n| C2 | 规模换算（线性校验） | 新金额 ≈ 旧金额 × 新规模 ÷ 旧规模，偏差超容差即卡住——防的就是沿用旧价没换算 |\n| C3 | 单位单价校验 | 单价 = 总价 ÷ 数量，越出品类单价带即卡住 |\n| M1 | 毛利红线 | 毛利率 = (总价 − 成本) ÷ 总价，低于红线不得出价 |\n\n外加 5 项**算式扫不出来、必须人工确认**的核对卡：条款逐字读完、市场价带反推、服务模式逐项加减、敏感性分析覆盖全部变量、成本口径与服务口径配套。\n\n**闸门铁律**：\n- 结论只有三种：`已过闸门` / `禁止出价` / `参数待补`\n- **只有「已过闸门」才回显金额**；另外两种只给\"卡在哪 + 缺什么参数\"\n- 缺参数时**只允许交成本模型框架与参数待补清单，不得交带金额的报价函**\n- 参数库在 `~/.config/bidhunter/quote_params.json`（权限 600）；最低工资随年度调整，超期会自动提醒\n\n**边界**：闸门只做算式校验与清单提示，**不产生报价意见、不替代人工判断**，也不联网取数。\n\n## 系统组件（位于 `scripts/`）\n\n| 文件 | 作用 | 版本 |\n|---|---|---|\n| `bid_monitor.sh` | 采集（含自定义数据源加载） | base+A5 |\n| `qual_rules.json` | 资质规则库（**必须自定义**） | base+A4字段 |\n| `qual_check.py` | 比对引擎 + A1 评分/预算/行业提取 | v1.5 |\n| `report_text.py` / `report_html.py` | 文字/HTML 简报（含评分展示） | v1.5 |\n| `push_manager.py` / `config_wizard.py` | 推送+配置向导 | v1.2 |\n| `calendar.py` | A2 投标日历/倒计时提醒 | v1.5 |\n| `filter_multi.py` | A4 多维筛选 | v1.5 |\n| `rule_editor.py` | 零代码规则编辑器（HTTP） | v1.5 |\n| `doctor.py` | A6 诊断中心 | v1.5 |\n| `demo.py` + `samples/` | A7 示例模式 | v1.5 |\n| `faq.py` + `docs/FAQ.md` | A8 集中 FAQ | v1.5 |\n| `bidhunter.py` | A9 统一命令入口 | v1.5 |\n| `custom_source.py` + `sources.example.json` | A5 自定义数据源 | v1.5 |\n| `ai/minimax_client.py` | MiniMax 客户端（urllib，零依赖） | v2.0 |\n| `ai/doc_parser.py` | B1 标书解析 + **v2.8 结构感知分片 segment() + 覆盖率统计** | v2.0/v2.8 |\n| `ai/clause_extractor.py` | B1 条款抽取（**v2.8 分片全覆盖 + 规则引擎兜底 + 评分点逐项映射 + 分值守恒校验**） | v2.0/v2.8 |\n| `ai/risk_scanner.py` | B2 风险条款识别 | v2.0 |\n| `ai/doc_reader.py` | B1 总装：AI 速读 | v2.0 |\n| `ai/analytics.py` | A3 业主/品类画像 | v2.0 |\n| `ai/bid_advisor.py` | v2.5 投标策略建议（**v2.8 修 tuple 传参 bug + 无 key 降级**） | v2.5/v2.8 |\n| `api_server.py` / `webhook_publish.py` | v3.0 本地开放能力 | v3.0 |\n| `compliance/redlines.json` | C1 法定红线规则库（31条：A4/B14/C4/D3/E6） | v3.5 |\n| `compliance/compliance_scanner.py` | C1 合规红线扫描引擎（**v2.8 修 PDF/DOCX 静默失效 + LLM 分片**） | v3.5/v2.8 |\n| `quote_gate.py` | v2.7 报价闸门引擎（四道算式卡 + 5 项人工核对卡，零依赖零联网） | v2.7 |\n| `quote/gate.json` | v2.7 闸门规则与阈值（阈值数据化，改阈值不必改代码） | v2.7 |\n| `material_gap.py` | **v2.8 待补材料清单（G1）+ 零响应检测（G2），纯规则零 API** | v2.8 |\n\n## 已知坑点\n\n- **IM 发文件失败**：个人 IM 不支持发文件，只能文字。可视化网页供电脑浏览器看。\n- **list API 无截止日**：部分平台返回仅 id/title，截止日需 detail 接口（常 401），故只采集当天近似；日历日期从标题解析，未含明确日期的标归入\"待核实截止日\"。\n- **IP 限流**：连发约 20 次后可能 401/403，翻页 sleep 2s + 失败重试冷却 10s。\n- **匹配边界**：边界感知规则会挡掉词中误匹配（如\"电气设备\"里的\"电气\"因前有 CJK 被挡属正常防误匹配）。能力词尽量让其出现在词首边界可稳定命中。\n- **AI 依赖**：v2.0/v2.5 需配置 MiniMax API Key；未配置时 AI 功能自动跳过。**v2.8 起不配置也能出完整简报**（规则引擎兜底），只损失策略建议的文字部分。\n- **标书解析**：最佳效果需 `pip install PyPDF2 python-docx`（可选）；未装时 PDF 走正则降级、DOCX 可能解析不全。\n- **纯扫描件无文字层**：v2.8 起会明确报错并提示需 OCR，**不再静默降级为\"读了但其实没读\"**。\n- **覆盖率标注**：v2.8 起所有读标输出都带 `coverage_pct`。**若显示覆盖率明显低于 100%（例如文件解析后只剩零散片段），结论不可信，须换解析后端或先 OCR。**\n\n## 反馈（零成本，30 秒）\n\n| 方式 | 怎么用 | 说明 |\n|---|---|---|\n| **快速反馈** | `python3 bidhunter.py feedback` | 交互式问三句 → 自动格式化 → 写进剪贴板 → 打开平台评论页，粘贴即可 |\n| SkillHub 评论区 | <https://skillhub.cn/skills/user_7a89592b/bidhunter> | 公开讨论，作者可见 |\n| ClawHub 评论区 | <https://clawhub.ai/419597334-sudo/bidhunter> | 公开讨论，作者可见 |\n\n> 反馈模块**不上传任何数据**：全程只在本机生成文本、写剪贴板、唤起你的浏览器，无任何后端与网络请求。\n\n## 参考文档\n\n- `references/platforms.md`：支持平台清单、自定义数据源指南\n- `references/filter_rules.md`：筛选规则结构\n- `references/field_standard.md`：标讯字段标准\n- `docs/FAQ.md`：常见问题（`faq.py` 检索）\n- `samples/`：示例规则与模板（demo / 行业模板）\n\nFile v2.9.1:scripts/sources.presets/README.md\n\n# 采集源配置指引\n\n> **为什么本 skill 不内置任何真实平台源？**\n>\n> 内置源一旦失效（改版 / 加鉴权 / 关停），用户首跑直接失败，反而比没有更糟。\n> 所以 BidHunter 的做法是：**给模板 + 给清单，不给现成答案**——你把要盯的平台填进来，\n> 它就是你自己的监控器，不依赖我们维护。\n\n---\n\n## 三步接入\n\n1. **选模式**：`json_api.json` / `rss.json` / `html_list.json`，按目标平台挑一个\n2. **改 URL 和字段**：把模板里的 `YOUR-DOMAIN` 换成真实域名，按返回结构改 `items_path` / `fields`\n3. **合并进 `sources.json`**：把改好的对象放进 `sources` 数组（可以放多个平台）\n\n`init` 已经帮你在 `scripts/sources.json` 生成了骨架，直接往 `sources` 数组里加即可\n（`bid_monitor.sh` 会自动加载 `scripts/sources.json`）。\n\n---\n\n## 常见平台清单（自行确认当前网址与可用性）\n\n> 下列仅为**品类提示**，具体网址与接口请以平台当前实际情况为准，本 skill 不保证其可用性。\n\n| 品类 | 说明 |\n|---|---|\n| 中国政府采购网 | 中央及地方政采公告，通常有列表页，部分地区提供 RSS |\n| 全国公共资源交易平台 | 各省有独立子站，按你所在省找对应入口 |\n| 省级 / 市级公共资源交易中心 | 工程、采购、土地矿权分类，多数有 HTML 列表页 |\n| 央企电子采购平台 | 能源、通信、建筑类央企各有自建平台，需自行注册查看公开公告区 |\n| 行业性招标平台 | 如机电产品、医疗器械等垂类平台 |\n\n**找源的小技巧**：打开平台列表页 → F12 → Network → 翻一页 → 看哪个请求返回了公告数据。\n那个请求的 URL 就是你要的 `url`，返回的 JSON 结构就是 `items_path` / `fields` 的依据。\n\n---\n\n## 合规提醒（重要）\n\n- 采集前确认目标站点的 `robots.txt` 与内容版权声明\n- 只采集**公开可访问**的页面，不要尝试绕过登录或鉴权\n- 控制请求频率，避免对目标站点造成压力\n- 采集内容仅供内部商机研判，二次传播前请自行评估版权风险\n\n---\n\n## 不想配源？先跑起来\n\n配源不是必须的。丢一份招标文件进来就能出结果：\n\n```bash\npython3 bidhunter.py paste <招标文件.pdf>\n```\n\n走合规红线扫描，**不需要 AI key、不需要采集源、离线可跑**，31 条法定废标红线本地扫描。\n\nFile v2.9.1:_meta.json\n\n{\n  \"ownerId\": \"kn79pvem3czfg69e3mx7gezyp1865jf9\",\n  \"slug\": \"bidhunter\",\n  \"version\": \"2.9.1\",\n  \"publishedAt\": 1791280523773\n}\n\nFile v2.9.1:references/field_standard.md\n\n# 标讯字段标准化 Schema\n\n## 核心字段定义\n\n| 字段名 | 类型 | 说明 | 示例 |\n|---|---|---|---|\n| `bid_id` | string | 标讯唯一标识（平台+原始ID） | `cnooc_12345` |\n| `source_platform` | string | 来源平台编码 | `cnooc` |\n| `source_url` | string | 原始链接 | `https://...` |\n| `title` | string | 项目名称 | `渤海某油田FPSO工程EPC总包` |\n| `content_text` | string | 正文纯文本（前5000字） | `...` |\n| `content_html` | string | 原始HTML（存档） | `...` |\n| `publish_time` | string | 公告发布时间（ISO 8601） | `2024-03-01T10:00:00+08:00` |\n| `deadline_time` | string | 投标截止时间 | `2024-03-15T09:00:00+08:00` |\n| `bid_open_time` | string | 开标时间 | `2024-03-15T09:30:00+08:00` |\n| `budget_amount` | number | 预算金额（元，标准化） | `420000000` |\n| `budget_amount_raw` | string | 原始金额字符串 | `4.2亿元` |\n| `currency` | string | 币种 | `CNY` |\n| `purchaser_name` | string | 采购单位名称（标准化） | `某某有限公司天津分公司` |\n| `purchaser_address` | string | 采购单位地址 | `天津市滨海新区...` |\n| `purchaser_contact` | string | 联系人及方式 | `张三 022-XXXX` |\n| `agency_name` | string | 招标代理机构 | `某某招标有限公司` |\n| `bid_type` | string | 项目类型编码 | `engineering` / `goods` / `service` |\n| `bid_method` | string | 采购方式编码 | `public_tender` / `invitation` / `inquiry` |\n| `region_code` | string | 地区编码（国家统计局6位码） | `120116` |\n| `industry_code` | string | 行业编码 | `B07` |\n| `qualification_requirements` | array | 资质要求 | `[\"一级资质\", \"安全生产许可证\"]` |\n| `attachment_list` | array | 附件清单 | `[{\"name\": \"招标文件.pdf\", \"size\": 10240000, \"url\": \"...\"}]` |\n| `status` | string | 标讯状态 | `new` / `updated` / `expired` / `opened` / `cancelled` |\n| `crawl_time` | string | 采集时间 | `2024-03-01T10:05:00+08:00` |\n| `crawl_version` | string | 解析规则版本 | `1.0` |\n\n## 判定结果字段\n\n| 字段名 | 类型 | 说明 | 取值 |\n|---|---|---|---|\n| `verdict` | string | 资质判定结果 | `investable` / `not_investable` / `needs_review` / `skip` |\n| `reason` | string | 判定原因 | `主体能力匹配：广告, 活动` / `红色预警：建筑施工` |\n| `assigned_entity` | string | 归属投标主体 | `entity_a` / `entity_b` |\n| `assigned_entity_name` | string | 归属投标主体名称 | `主体A（传媒/活动类）` |\n| `matched_capabilities` | array | 匹配到的能力词 | `[\"广告\", \"活动策划\"]` |\n| `region_info` | object | 地区信息 | `{\"is_priority\": true, \"region\": \"天津\"}` |\n\n## 金额标准化规则\n\n原始金额字符串 → 标准化元数值：\n\n| 原始格式 | 标准化结果 |\n|---|---|\n| `4.2亿元` | `420000000` |\n| `500万元` | `5000000` |\n| `300万` | `3000000` |\n| `1.2亿` | `120000000` |\n| `未填写` / 空 | `null` |\n\n## 地区编码\n\n使用国家统计局 6 位行政区划编码：\n\n| 编码 | 地区 |\n|---|---|\n| `110000` | 北京市 |\n| `120000` | 天津市 |\n| `310000` | 上海市 |\n| `440000` | 广东省 |\n| `510000` | 四川省 |\n| ... | ... |\n\n完整编码表参考国家统计局最新版行政区划代码。\n\n## 行业分类编码\n\n采用 GB/T 4754《国民经济行业分类》：\n\n| 编码 | 行业 |\n|---|---|\n| `B07` | 石油和天然气开采业 |\n| `B08` | 黑色金属矿采选业 |\n| `E48` | 土木工程建筑业 |\n| `I63` | 电信、广播电视和卫星传输服务 |\n| ... | ... |\n\nFile v2.9.1:references/filter_rules.md\n\n# 筛选规则结构与条件维度\n\n## 规则组结构\n\n规则组支持多组并行运行：\n\n```\n规则组（多组并行）\n├── 规则组名称：如\"海上工程总包\"\n├── 启用状态：启用/停用\n├── 匹配逻辑：AND（全部满足）/ OR（任一满足）\n├── 筛选条件（见下表）\n├── 输出设置：推送通道 + 输出格式\n└── 优先级：1-10（同一条标讯匹配多规则时，按优先级去重）\n```\n\n## 资质判定优先级（高 → 低）\n\n1. **★服务类型门禁**（v1.2）：采购标的的服务类型优先于项目名里的动词\n2. **★子串红警**（v1.2）：不受 CJK 边界限制的强制拦截词\n3. **special_rules 覆盖**：如\"某类标外找资质可投\"、\"某类标垫资不参与 → skip\"\n4. **红色预警命中** → 不可投 + 原因\n5. **主体能力匹配** → 可投（按主体能力词归属投标公司）\n6. **都不命中** → 需确认\n\n## ★v1.2 修正（2026-09-11，案例 614535）\n\n### 一、服务类型门禁 service_type_gate\n\n**采购标的的服务类型，优先于项目名里的动词关键词。**\n\n项目名常把真正的服务类型藏在修饰语后面：\n\n| 项目名 | 真正的标的 | 错误判定 | 正确判定 |\n|---|---|---|---|\n| 楼宇安全整治**维修改造**项目**监理服务** | 监理服务 | 按\"维修\"命中→可投 | **不可投**（无监理资质） |\n| XX项目**设计服务** | 设计服务 | 按\"施工/改造\"命中 | 需确认 |\n\n配置项 `service_type_gate.blocked_types`：监理（不可投）／设计·勘察／检测／审计·评估·造价咨询·招标代理（需确认）。\n**资质序列不可跨用**：施工总承包资质 ≠ 监理资质；且施工单位投同一项目监理通常有**回避要求**。\n\n### 二、匹配边界陷阱（重要）\n\n`smart_match` 的左边界规则要求**关键词前一字符不得为中日韩字符**，导致出现在标题**中部**的关键词永远匹配不到：\n\n- ❌ \"…零星**维修**服务\" → \"维修\"前是\"星\"→ 漏判（该投的标被判\"需确认\"）\n- ❌ \"…消防设施改造\" → \"消防\"前是\"厂\"→ 红警漏拦\n\n**修正**：\n1. `_match_loose: true` → 能力词改用**纯子串匹配**（漏判代价 > 误判代价，假阳性由 `_exclude_contexts` 过滤）\n2. `substring_alerts` → 高风险资质词（消防/电梯/压力容器/特种设备/爆破/危险品/劳务派遣/保安服务/测绘/勘察/钻井/修井等）强制子串拦截\n3. 已知保留项：`skip_procurement` 的\"采购\"**仍用严格匹配**——因\"XX服务采购\"是服务标常见命名，宽松会误杀大量可投标；若要拦物资采购标，请改用\"物资采购/采购项目/采办\"等更特异的关键词\n\n### 三、自检命令\n\n```bash\npython3 qual_check.py --validate-rules qual_rules.json   # 规则库体检\n```\n\n判定回归用例（改规则后必跑）：监理标→不可投、消防标→不可投、设计标→需确认、零星维修标→可投。\n\n## 筛选条件维度\n\n| 维度 | 条件类型 | 运算符 | 输入示例 |\n|---|---|---|---|\n| 关键词 | 标题包含 | 包含任意/全部包含/不包含 | `FPSO OR \"浮式生产\" NOT \"退役\"` |\n| 关键词 | 正文包含 | 同上 | `\"一级资质\" AND \"安全生产许可证\"` |\n| 关键词 | 附件名称包含 | 包含任意 | `技术规格书 OR 图纸` |\n| 地区 | 项目所在地 | 省/市多选、排除、半径圈选 | `天津市, 青岛市, 半径50km` |\n| 地区 | 采购单位所在地 | 同上 | `北京市海淀区` |\n| 金额 | 预算金额 | ≥ / ≤ / 区间 / 未填写 | `500万-5000万` |\n| 金额 | 最高限价 | 同上 | `≥1亿` |\n| 时间 | 公告发布时间 | 近N天 / 日期范围 | `近7天` |\n| 时间 | 投标截止时间 | ≥N天后 / 日期范围 | `截止≥7天后` |\n| 时间 | 开标时间 | 同上 | `2024-03-01 至 2024-06-30` |\n| 项目属性 | 项目类型 | 多选 | `工程, 货物` |\n| 项目属性 | 采购方式 | 多选 | `公开招标, 邀请招标` |\n| 项目属性 | 行业领域 | 多选 | `石油化工, 海洋工程` |\n| 资质要求 | 要求资质 | 包含/不包含 | `海洋石油工程专业承包一级` |\n| 资质要求 | 资质等级 | ≥ / = / ≤ | `≥二级` |\n| 业主画像 | 采购单位 | 白名单/黑名单 | `包含: 某某分公司` |\n| 业主画像 | 历史合作 | 是否合作过 | `仅显示合作过业主` |\n\n## 规则冲突处理\n\n当一条标讯同时匹配多个规则组时：\n\n1. **分别输出**（默认）：用户收到多条推送，标注所属规则组\n2. **仅保留高优先级**：配置去重模式\n3. **合并为一条**：标注\"多规则匹配\"\n\n## qual_rules.json 结构说明\n\n```json\n{\n  \"version\": \"1.0\",\n  \"entities\": {\n    \"entity_a\": {\n      \"name\": \"主体A名称\",\n      \"capabilities\": [\"关键词1\", \"关键词2\"],\n      \"note\": \"替换为营业执照经营范围关键词\"\n    }\n  },\n  \"red_alerts\": [\"车辆维修\", \"劳务派遣\", \"...\"],\n  \"special_rules\": [\n    {\n      \"id\": \"rule_id\",\n      \"description\": \"规则描述\",\n      \"match_keywords\": [\"关键词\"],\n      \"action\": \"skip|investable|not_investable\",\n      \"assigned_entity\": \"entity_a\",\n      \"reason\": \"原因说明\"\n    }\n  ],\n  \"skip_keywords_result\": [\"结果公示\", \"中标公示\"],\n  \"region_priority\": {\n    \"high\": [\"天津\", \"青岛\"],\n    \"note\": \"按需填写重点地区\"\n  }\n}\n```\n\n## 推送策略\n\n| 策略 | 说明 | 配置 |\n|---|---|---|\n| 即时推送 | 单条标讯匹配后立即推送 | 仅高优先级规则组/紧急标讯 |\n| 定时汇总 | 按固定时间合并推送 | 每日9:00 / 每周一9:00 |\n| 智能合并 | 同规则组多条标讯合并为一条消息 | 阈值：5条或间隔30分钟 |\n| 免打扰时段 | 指定时间不推送 | 默认22:00-08:00 |\n| 去重窗口 | 同一标讯N天内不重复推送 | 默认30天 |\n\nFile v2.9.1:references/platforms.md\n\n# 支持平台清单与配置\n\n## 内置平台适配器\n\n以下平台已在 `bid_monitor.sh` 中实现采集适配器：\n\n| 平台编码 | 平台名称 | 网址 | 采集方式 | 认证要求 | 状态 |\n|---|---|---|---|---|---|\n| `cnooc` | 中海油采办业务管理与交易系统 | bid.cnooc.com.cn | API (JSON) | ~~免登录~~ **现需鉴权** | 🔴 **2026-09-02 实测失效** |\n| `cebpubservice` | 中国招标投标公共服务平台 | ctbpsp.com | API (JSON POST) | 免登录 | 🔴 **2026-09-02 实测失效**（404） |\n| `ccgp` | 中国政府采购网 | ccgp.gov.cn | HTML 解析 | 免登录 | ✅ 可用 |\n\n### ⚠️ 数据源实测状态（2026-09-02 更新）\n\n三个内置源实测结果，**两个已失效**，依赖它们的每日简报会漏标：\n\n| 源 | 实测现象 | 根因 |\n|---|---|---|\n| `cnooc` | curl 请求稳定返回 **401 Authorization Required**（nginx 层）；真实浏览器访问返回 **502 Bad Gateway**。`/`、`/home/`、`/api/v1/bid/list` 全路径均不可达 | 网关/WAF 拦截（DNS 已 CNAME 至 `bid.cnooc.com.cn.wsdvs.com`），源站对当前网络无响应 |\n| `cebpubservice` | POST `/cutomNoticeApi/getNoticeList` → **404** | 上游接口路径已变更 |\n| `ccgp` | HTTP 200，可访问 | ✅ 正常。但注意：**中海油/央企属企业招标，不走政采**，搜\"海油\"关键词返回 0 条，无法作为海油标的替代源 |\n\n**处置建议：**\n1. `cnooc` 适配器暂时停用，避免静默返回 0 条造成\"今天没标\"的误判\n2. 中海油标的替代路径：① 用已登录浏览器会话 + 浏览器自动化抓取（需先确认本地网络能否访问）② 第三方招标聚合平台 ③ 海油各子公司自有发布渠道\n3. 恢复抓取前，先用 `curl -o /dev/null -w \"%{http_code}\" https://bid.cnooc.com.cn/` 探活，返回 200 再启用\n\n## 计划适配平台\n\n以下平台已识别但尚未实现适配器，可按\"自定义数据源\"流程接入：\n\n| 平台类别 | 平台名称 | 网址 | 技术难点 | 优先级 |\n|---|---|---|---|---|\n| 央企招采 | 中石油电子招标投标平台 | bid.cnpcbidding.com | 需注册账号 | P0 |\n| 央企招采 | 中石化物资采购电子商务平台 | sourcing.sinopec.com | 需企业认证 | P0 |\n| 央企招采 | 国家电网电子商务平台 | ecp.sgcc.com.cn | 需电子钥匙 | P1 |\n| 央企招采 | 中国南方电网阳光电子商务平台 | bidding.csg.cn | 需注册 | P1 |\n| 能源电力 | 中国华能集团电子商务平台 | ec.chng.com.cn | 需注册 | P1 |\n| 能源电力 | 中国大唐集团电子采购平台 | cdt-ec.com | 需注册 | P1 |\n| 能源电力 | 国家电投电子商务平台 | eptp.com.cn | 需注册 | P1 |\n| 能源建设 | 中国能建电子采购平台 | ec.ceec.net.cn | 需注册 | P1 |\n| 能源建设 | 中国电建招标与采购网 | powerchina.cn | 需注册 | P1 |\n| 公共资源 | 全国公共资源交易平台 | ggzyjyw.com | 数据聚合，需解析 | P0 |\n| 公共资源 | 各省市公共资源交易中心 | 分省平台 | 模板差异极大 | P1 |\n| 行业垂直 | 军队采购网 | plap.mil.cn | 需军队供应商库资质 | P2 |\n| 行业垂直 | 铁路建设工程网 | railway.cn | 需注册 | P2 |\n| 行业垂直 | 民航专业工程招标投标管理系统 | caac.gov.cn | 访问受限 | P2 |\n\n## 平台适配器开发规范\n\n每个适配器需实现一个 `fetch_<platform>()` bash 函数：\n\n1. **输入**：`$1` = 目标日期 (YYYY-MM-DD)\n2. **输出**：JSON lines 到 stdout，每行一条公告\n3. **格式**：\n   ```json\n   {\n     \"id\": \"公告唯一标识\",\n     \"title\": \"项目名称\",\n     \"source\": \"平台编码\",\n     \"url\": \"详情页链接\",\n     \"publish_time\": \"发布时间\"\n   }\n   ```\n4. **注意事项**：\n   - 翻页时 sleep 2s 防限流\n   - 401/403 时冷却 10s 重试一次\n   - 过滤结果公示类（中标/成交公告）\n   - 只采集当天发布（近似排除已开标标）\n\n## 自定义数据源（v1.5 新增 · 零代码扩平台）\n\n不想写 bash 适配器？用 `sources.json` 配置即可接入任意平台。`bid_monitor.sh` 运行时若发现 `sources.json` 会自动加载。\n\n**步骤**：\n1. 复制 `scripts/sources.example.json` → `scripts/sources.json`\n2. 按你的平台改 `name` / `url` / `mode` / `fields`\n3. 支持三种模式：\n   - `json`：接口返回 JSON，`items_path` 指向数组路径，`fields` 映射字段\n   - `rss`：标准 RSS/Atom（`item`/`link`/`title`/`pubDate`）\n   - `html`：列表页，自动抓取含「招标/采购/投标」等关键词的 `<a>` 链接\n4. 测试：`bash bid_monitor.sh --fresh`（会自动包含 custom 源）\n\n> 示例（某gov平台 JSON 接口）：\n> ```json\n> {\"name\":\"my_gov\",\"mode\":\"json\",\"url\":\"https://x/api/notice?date={DATE}\",\n>  \"items_path\":\"data.list\",\"fields\":{\"id\":\"id\",\"title\":\"title\",\"url\":\"url\"},\n>  \"url_prefix\":\"https://x/detail?id=\"}\n> ```\n\n## 计划适配平台（可经自定义数据源或适配器接入）\n\n| 平台类别 | 平台名称 | 网址 | 接入方式 | 优先级 |\n|---|---|---|---|---|\n| 央企招采 | 中石油电子招标投标平台 | bid.cnpcbidding.com | 账号/自定义json | P0 |\n| 央企招采 | 中石化物资采购电子商务平台 | sourcing.sinopec.com | 企业认证/自定义 | P0 |\n| 央企招采 | 国家电网电子商务平台 | ecp.sgcc.com.cn | 电子钥匙/自定义 | P1 |\n| 央企招采 | 中国南方电网阳光电子商务平台 | bidding.csg.cn | 注册/自定义 | P1 |\n| 能源电力 | 中国华能/大唐/国家电投电子商务平台 | 见各官网 | 注册/自定义 | P1 |\n| 能源建设 | 中国能建/中国电建招标采购网 | ec.ceec.net.cn / powerchina.cn | 注册/自定义 | P1 |\n| 公共资源 | 全国公共资源交易平台 | ggzyjyw.com | 数据聚合/自定义html | P0 |\n| 公共资源 | 各省市公共资源交易中心 | 分省平台 | 模板差异大/自定义 | P1 |\n| 行业垂直 | 军队采购网 | plap.mil.cn | 军队供应商库 | P2 |\n| 行业垂直 | 铁路建设工程网 / 民航专业工程系统 | railway.cn / caac.gov.cn | 注册/受限 | P2 |\n\n> v1.5 起\"平台覆盖\"短板通过「自定义数据源」机制补强：内置 3 个适配器 + 用户可零代码接入任意公开接口。需要官方内置某平台可在 ClawHub/SkillHub 反馈，我们按 P0 优先级实现。\n\n## 适配器开发规范（进阶）\n\n每个 bash 适配器需实现 `fetch_<platform>()` 函数（详见上文\"平台适配器开发规范\"）。自定义数据源已覆盖绝大多数场景，仅在接口鉴权复杂时才需写适配器。\n\n## detail_url_template\n\n各平台详情页链接格式：\n\n| 平台 | 模板 |\n|---|---|\n| cnooc | `https://bid.cnooc.com.cn/home/#/newsAlertDetails?index=0&childrenActive=1&id={ID}&type=null` |\n| cebpubservice | `https://ctbpsp.com/#/noticeDetail?id={ID}` |\n| ccgp | 从列表页 HTML 中直接提取 |\n\n## 数据源配置项\n\n每个平台适配器支持的配置：\n\n- **启用/停用**：在 `PLATFORMS` 数组中增删\n- **监控范围**：在 `fetch_<platform>()` 函数中调整 API 参数\n- **采集深度**：标题+摘要（默认）/ 全文+附件列表（需 detail 接口）\n- **更新频率**：通过定时任务配置（默认每日）\n- **认证配置**：免登录（默认）/ 账号 / CA证书（需自行实现）\n\nFile v2.9.1:references/setup-guide.md\n\n# BidHunter 配置指南（依赖型 Skill 标准件）\n\n本 Skill 核心流程（采集、资质比对、评分、日历、筛选、规则编辑器、诊断、FAQ、示例、统一入口）**零外部依赖**，开箱即用。以下仅配置「可选增强」。\n\n环境检查（只读，不泄露凭据值）：\n\n```bash\npython3 scripts/check_environment.py\n```\n\n---\n\n## 一、资质规则库（必填，非外部依赖）\n\n编辑 `scripts/qual_rules.json` 填入你的投标主体与能力词：\n\n- 零代码：运行 `python3 bidhunter.py rules edit` → 浏览器图形化编辑，内置「能源/建筑/IT/市政」行业模板一键预填\n- 或复制 `scripts/samples/demo_rules.json` 改\n- 校验：`python3 qual_check.py --validate-rules qual_rules.json`\n\n不填则 `doctor` 会报 E002（仍为示例占位），基础采集可用但比对全为「需确认」。\n\n---\n\n## 二、MiniMax API（可选 · v2.0+ AI 能力）\n\n依赖 id：`minimax-api`\n\n用途：AI 速读标书、风险条款识别、投标策略建议。仅消耗你的 API 余额，无云端。\n\n官方入口：\n\n- 产品主页：https://www.minimaxi.com/\n- 开放平台登录：https://platform.minimaxi.com/login\n- 接口密钥页：https://platform.minimaxi.com/user-center/basic-information/interface-key\n- 接口文档：https://platform.minimaxi.com/document/guides/chat-model/V2\n\n1. 注册并登录开放平台账号\n2. 获取密钥：账户管理 → 接口密钥 → 创建密钥（只申请文本模型调用权限）\n3. 写入本地配置文件（权限自动 600，密钥不回显、不上传）：\n\n   ```bash\n   mkdir -p ~/.config/bidhunter\n   cat > ~/.config/bidhunter/ai.json <<'EOF'\n   {\"api_key\":\"你的MiniMaxKey\",\"group_id\":\"可选\",\"model\":\"MiniMax-M2.7\",\"base_url\":\"https://api.minimaxi.com/v1/chat/completions\"}\n   EOF\n   chmod 600 ~/.config/bidhunter/ai.json\n   ```\n\n4. 最小验证：\n\n   ```bash\n   python3 -c \"from scripts.ai.minimax_client import MiniMaxClient; MiniMaxClient.from_config(); print('OK')\"\n   ```\n\n安全：密钥仅存本地文件；轮换/撤销在 MiniMax 控制台操作；本 Skill 不向任何第三方发送你的数据。\n\n降级：未配置时 AI 功能自动跳过，基础采集研判不受影响。\n\n---\n\n## 三、多通道推送（可选 · v1.2）\n\n用途：把日报推到钉钉 / 企业微信 / 邮件。本项是纯本地配置能力，不绑定任一第三方服务账号，因此未列入依赖清单；缺失时只影响推送，不影响核心流程。\n\n```bash\npython3 config_wizard.py        # 交互式，未通过连通性测试不写入\npython3 config_wizard.py --show # 脱敏查看当前配置\n```\n\n- 钉钉：群设置 → 智能群助手 → 自定义机器人 → 加签（推荐）\n- 企业微信：群聊 → 群机器人 → 复制 Webhook\n- 邮件：SMTP（如 QQ 邮箱用授权码，非登录密码）\n\n配置文件 `~/.config/bidhunter/push.json` 权限 600，密码/密钥脱敏显示。\n\n降级：未配置时仅生成报告文件，不推送。\n\n---\n\n## 四、标书解析依赖（可选 · v2.0 最佳效果）\n\n依赖 id：`pdf-docx-runtime`\n\n官方包页：https://pypi.org/project/PyPDF2/ 、 https://pypi.org/project/python-docx/\n\n```bash\npip install -r requirements.txt   # PyPDF2 + python-docx\n```\n\n降级：未装时 PDF 走正则抽取（部分文本）、DOCX 可能解析不全，仍走 AI 流程但质量下降。\n\n---\n\n## 五、常见问题\n\n- **Q：必须联网吗？** 采集需要访问招投标平台；其余（比对/评分/日历/规则编辑/诊断/FAQ）全本地。\n- **Q：会外传我的标讯或资质吗？** 不会。所有比对/评分/画像在本地完成；AI 仅把标书文本发往你自己的 MiniMax Key 对应的 API。\n- **Q：配置失败会破坏什么吗？** 不会。检查只读，写入前均连通性测试或原子备份。\n\nFile v2.9.1:scripts/compliance/redlines.json\n\n{\n  \"schema\": \"bidhunter-compliance-redlines/v1\",\n  \"version\": \"3.5.0\",\n  \"updated\": \"2026-09-08\",\n  \"legal_basis\": [\n    \"《中华人民共和国招标投标法》（2017修正）\",\n    \"《中华人民共和国招标投标法实施条例》（2019修订）\",\n    \"《评标委员会和评标方法暂行规定》（七部委12号令，2013修订）\"\n  ],\n  \"disclaimer\": \"本规则库为法规条文的机器可读索引，用于本地风险提示。不构成法律意见，最终判定以招标文件、评标委员会认定及有权机关解释为准。法规未给出量化标准的（如『低于成本』），本库不设阈值。\",\n  \"usage_note\": \"tender_patterns 用于扫描【招标文件】找埋雷；bid_patterns 用于扫描【投标文件】找致命项；manual=true 表示纯人工核对项，正则扫不出来。\",\n\n  \"categories\": {\n    \"A\": {\"name\": \"拒收/不予受理\", \"phase\": \"交标现场\", \"decider\": \"招标人/代理机构\", \"consequence\": \"当场拒收，进不了评标\"},\n    \"B\": {\"name\": \"否决投标\", \"phase\": \"评标阶段\", \"decider\": \"评标委员会\", \"consequence\": \"该份投标出局\"},\n    \"C\": {\"name\": \"投标无效\", \"phase\": \"全程（法定自始无效）\", \"decider\": \"无需认定\", \"consequence\": \"相关投标均无效\"},\n    \"D\": {\"name\": \"反向保护条款（盾牌）\", \"phase\": \"维权\", \"decider\": \"投标人主张\", \"consequence\": \"可据此质疑/投诉\"},\n    \"E\": {\"name\": \"多主体串标隔离\", \"phase\": \"评审/调查\", \"decider\": \"评标委员会/行政监督\", \"consequence\": \"视为串通投标，中标无效\"}\n  },\n\n  \"redlines\": [\n    {\n      \"id\": \"A01\", \"category\": \"A\", \"name\": \"逾期送达 / 未在截止时间前送达\",\n      \"legal_basis\": \"实施条例第36条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"投标截止(时间|日期)\", \"递交(投标)?文件(的)?截止\", \"逾期(送达|递交)\"],\n      \"bid_patterns\": [],\n      \"check\": \"核对招标文件载明的截止时间与递交方式（现场/邮寄/电子平台），预留≥2小时缓冲\",\n      \"remedy\": \"无。逾期即拒收，不可申辩。建议交标前一日完成装订\"\n    },\n    {\n      \"id\": \"A02\", \"category\": \"A\", \"name\": \"未通过资格预审仍提交投标文件\",\n      \"legal_basis\": \"实施条例第36条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"资格预审\", \"通过资格预审的申请人\", \"未通过资格预审\"],\n      \"bid_patterns\": [],\n      \"check\": \"确认已收到资格预审合格通知书；未通过者不得投标\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"A03\", \"category\": \"A\", \"name\": \"未按招标文件要求密封 / 标记\",\n      \"legal_basis\": \"实施条例第36条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"密封\", \"封套\", \"标记\", \"加盖(骑缝|密封)章\"],\n      \"bid_patterns\": [],\n      \"check\": \"逐项比对密封、封套标注、骑缝章、正副本份数要求\",\n      \"remedy\": \"交标现场前可补救；一旦递交不可补\"\n    },\n    {\n      \"id\": \"A04\", \"category\": \"A\", \"name\": \"递交方式/平台不符合要求\",\n      \"legal_basis\": \"实施条例第36条；电子招投标办法\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"电子(招标)?投标\", \"递交(至|到).{0,10}(平台|系统)\", \"CA(证书|锁|签章)\"],\n      \"bid_patterns\": [],\n      \"check\": \"电子标确认 CA 锁有效、文件已成功上传并解密测试通过\",\n      \"remedy\": \"无\"\n    },\n\n    {\n      \"id\": \"B01\", \"category\": \"B\", \"name\": \"投标文件未经投标单位盖章和单位负责人签字\",\n      \"legal_basis\": \"实施条例第51条第(一)项；12号令第25条第(二)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"(签字|签章).{0,6}(并|和).{0,6}(盖章|加盖)\", \"法定代表人(或|和)授权代表(签字|签章)\", \"逐页(签字|盖章|小签)\"],\n      \"bid_patterns\": [\"(未|漏|缺少).{0,8}(盖章|签字|签章)\"],\n      \"check\": \"『盖章和签字』是并列关系，缺一即触发。逐页检查要求小签/盖章处\",\n      \"remedy\": \"装订前完成；这是废标率最高且完全不可申辩的一项\"\n    },\n    {\n      \"id\": \"B02\", \"category\": \"B\", \"name\": \"联合体未提交共同投标协议\",\n      \"legal_basis\": \"实施条例第51条第(二)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"联合体\", \"共同投标协议\", \"联合体(各方|成员)\"],\n      \"exclude_patterns\": [\"(不|不予)?接受联合体\", \"不接受.{0,8}联合体\", \"禁止联合体\", \"不得(以)?联合体\"],\n      \"exclude_note\": \"招标文件明确不接受联合体投标时，本条不适用\",\n      \"bid_patterns\": [\"联合体\"],\n      \"check\": \"联合体各方须签署共同投标协议并随投标文件提交\",\n      \"remedy\": \"无（形式要件，属重大偏差，不补正即废）\"\n    },\n    {\n      \"id\": \"B03\", \"category\": \"B\", \"name\": \"不符合国家或招标文件规定的资格条件\",\n      \"legal_basis\": \"实施条例第51条第(三)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"(资质|资格)(要求|条件)\", \"(须|应|必须)(具有|具备)\", \"业绩(要求|条件)\", \"注册资本\", \"安全生产许可证\"],\n      \"bid_patterns\": [],\n      \"check\": \"逐条比对资质等级/业绩/人员/财务门槛，标红缺口\",\n      \"remedy\": \"缺项无法补；只能换有资质的主体或放弃\"\n    },\n    {\n      \"id\": \"B04\", \"category\": \"B\", \"name\": \"同一投标人提交两个以上不同的投标文件或报价\",\n      \"legal_basis\": \"实施条例第51条第(四)项\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"备选(投标|方案)\", \"只允许(提交)?一个(投标)?(文件|报价)\"],\n      \"bid_patterns\": [],\n      \"check\": \"除招标文件明确允许备选方案外，只能有一份投标文件/一个报价\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"B05\", \"category\": \"B\", \"name\": \"报价低于成本或高于最高投标限价\",\n      \"legal_basis\": \"实施条例第51条第(五)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"最高(投标)?限价\", \"招标控制价\", \"超过.{0,8}限价.{0,10}(否决|废|无效)\", \"低于成本\"],\n      \"bid_patterns\": [],\n      \"check\": \"【上限硬】超过最高限价直接否决，无解释空间；【下限软】低于成本须经『要求说明→举证→举证不能才否决』三步\",\n      \"remedy\": \"超限必废；低于成本有法定举证窗口，见 bid-price-redline\"\n    },\n    {\n      \"id\": \"B06\", \"category\": \"B\", \"name\": \"未对招标文件的实质性要求和条件作出响应（兜底条款）\",\n      \"legal_basis\": \"实施条例第51条第(六)项；12号令第25条第(七)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"实质性(要求|条款|响应)\", \"(必须|应|不得).{0,20}\", \"承诺函\", \"偏离表\"],\n      \"bid_patterns\": [\"偏离\", \"无偏离\", \"不响应\"],\n      \"check\": \"凡用『必须/应/不得』表述或标注『实质性条款』的，逐条做『要求→投标文件对应位置』对照表。这是实务中『莫名其妙被废』的主因\",\n      \"remedy\": \"逐条响应；技术参数偏离须在偏离表中说明\"\n    },\n    {\n      \"id\": \"B07\", \"category\": \"B\", \"name\": \"串通投标、弄虚作假、行贿等违法行为\",\n      \"legal_basis\": \"实施条例第51条第(七)项；第39-42条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"串通\", \"弄虚作假\", \"行贿\", \"以他人名义\"],\n      \"exclude_patterns\": [\"无行贿\", \"无.{0,6}犯罪记录\", \"行贿犯罪记录承诺\"],\n      \"exclude_note\": \"『无行贿犯罪记录承诺函』是常规合规文件，不构成行贿行为\",\n      \"bid_patterns\": [],\n      \"check\": \"多主体投标必查，见 E 类六项客观推定\",\n      \"remedy\": \"无（中标无效+罚款+取消投标资格）\"\n    },\n    {\n      \"id\": \"B08\", \"category\": \"B\", \"name\": \"未提供投标担保或担保有瑕疵\",\n      \"legal_basis\": \"12号令第25条第(一)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"投标(保证金|担保)\", \"(保函|保险)\", \"基本(存款)?账户(转出|汇出)\"],\n      \"bid_patterns\": [],\n      \"check\": \"金额、形式（转账/保函）、到账时间、是否从基本账户转出，四项全对\",\n      \"remedy\": \"无（形式要件，重大偏差）\"\n    },\n    {\n      \"id\": \"B09\", \"category\": \"B\", \"name\": \"完成期限（工期）超过招标文件规定\",\n      \"legal_basis\": \"12号令第25条第(三)项\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"(工期|交货期|服务期)(要求)?\", \"(须|应|不得)超过.{0,8}(天|日|月)\"],\n      \"bid_patterns\": [],\n      \"check\": \"投标工期 ≤ 招标要求工期；含节点工期\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"B10\", \"category\": \"B\", \"name\": \"明显不符合技术规格、技术标准\",\n      \"legal_basis\": \"12号令第25条第(四)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"技术(规格|标准|参数)\", \"(主要|关键)技术(指标|参数)\", \"★\", \"▲\"],\n      \"bid_patterns\": [],\n      \"check\": \"招标文件带★/▲的关键参数必须全部满足，无偏离\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"B11\", \"category\": \"B\", \"name\": \"包装方式、检验标准和方法不符合要求\",\n      \"legal_basis\": \"12号令第25条第(五)项\",\n      \"severity\": \"风险\", \"manual\": true,\n      \"tender_patterns\": [\"(包装|检验)(方式|标准|方法)\"],\n      \"bid_patterns\": [],\n      \"check\": \"按招标文件载明的包装/检验要求响应\",\n      \"remedy\": \"可澄清补正\"\n    },\n    {\n      \"id\": \"B12\", \"category\": \"B\", \"name\": \"投标文件附有招标人不能接受的条件\",\n      \"legal_basis\": \"12号令第25条第(六)项\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"(不得|不允许).{0,10}(附加|保留|限制性)条件\"],\n      \"bid_patterns\": [\"(保留|附加|特别)说明\", \"我方(要求|希望)\"],\n      \"check\": \"投标文件不得附加任何招标人未接受的保留或限制条件\",\n      \"remedy\": \"删除附加条件\"\n    },\n    {\n      \"id\": \"B13\", \"category\": \"B\", \"name\": \"拒不按要求澄清、说明或补正\",\n      \"legal_basis\": \"12号令第22条；实施条例第52条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"澄清\", \"说明\", \"补正\"],\n      \"bid_patterns\": [],\n      \"check\": \"澄清不得超出投标文件范围、不得改变实质性内容；评标委员会不接受投标人主动提出的澄清\",\n      \"remedy\": \"按评标委员会要求书面回复，不主动提交\"\n    },\n    {\n      \"id\": \"B14\", \"category\": \"B\", \"name\": \"有效投标不足三个且明显缺乏竞争\",\n      \"legal_basis\": \"12号令第27条\",\n      \"severity\": \"提示\", \"manual\": true,\n      \"tender_patterns\": [\"(少于|不足)三个\", \"重新招标\"],\n      \"bid_patterns\": [],\n      \"check\": \"评标委员会可否决全部投标，招标人应重新招标\",\n      \"remedy\": \"重新招标\"\n    },\n\n    {\n      \"id\": \"C01\", \"category\": \"C\", \"name\": \"与招标人存在利害关系可能影响招标公正性\",\n      \"legal_basis\": \"实施条例第34条第1款\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"利害关系\", \"可能影响(招标)?公正\"],\n      \"bid_patterns\": [],\n      \"check\": \"投标人与招标人是否存在股权/人事/利益关联\",\n      \"remedy\": \"无（相关投标无效）\"\n    },\n    {\n      \"id\": \"C02\", \"category\": \"C\", \"name\": \"单位负责人同一 / 存在控股或管理关系的不同单位投同一标段\",\n      \"legal_basis\": \"实施条例第34条第2款\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"priority\": \"最高（优先于一切串标推定）\",\n      \"tender_patterns\": [\"同一标段\", \"未划分标段的同一招标项目\"],\n      \"bid_patterns\": [],\n      \"check\": \"★多主体投标的第一道闸门：①各方法定代表人是否同一人？②相互间有无股权控股？③有无统一管理关系（统一人事/财务/决策）？任一为是→不得投同一标段\",\n      \"remedy\": \"无。这是资格硬禁止，无需任何串通证据，客观状态成立即自始无效\"\n    },\n    {\n      \"id\": \"C03\", \"category\": \"C\", \"name\": \"资格预审后联合体增减、更换成员\",\n      \"legal_basis\": \"实施条例第37条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"联合体(成员|组成).{0,10}(不得|不得再)\", \"资格预审\"],\n      \"bid_patterns\": [],\n      \"check\": \"通过资格预审后联合体组成不得变更\",\n      \"remedy\": \"无（其投标无效）\"\n    },\n    {\n      \"id\": \"C04\", \"category\": \"C\", \"name\": \"以他人名义投标 / 出借或借用资质\",\n      \"legal_basis\": \"实施条例第42条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"以他人名义\", \"挂靠\", \"出借(资质|资格)\"],\n      \"bid_patterns\": [],\n      \"check\": \"与 E03 构成死结：同一批人不可能同时与两个主体建立真实劳动关系\",\n      \"remedy\": \"无\"\n    },\n\n    {\n      \"id\": \"D01\", \"category\": \"D\", \"name\": \"标底不得作为中标条件或否决条件\",\n      \"legal_basis\": \"实施条例第50条\",\n      \"severity\": \"提示\", \"manual\": false,\n      \"tender_patterns\": [\"(接近|靠近)标底\", \"标底.{0,8}(上下)?浮动\", \"超出标底.{0,10}(否决|废)\", \"最低限价\"],\n      \"bid_patterns\": [],\n      \"check\": \"★反向维权：招标文件若写『报价超出标底±X%作废标处理』『以接近标底为中标条件』『设最低限价』——该条款本身违法\",\n      \"remedy\": \"可依据第50条提出质疑/投诉\"\n    },\n    {\n      \"id\": \"D02\", \"category\": \"D\", \"name\": \"细微偏差不影响投标有效性\",\n      \"legal_basis\": \"12号令第26条\",\n      \"severity\": \"提示\", \"manual\": false,\n      \"tender_patterns\": [\"细微偏差\", \"(量化|扣分)标准\"],\n      \"bid_patterns\": [],\n      \"check\": \"★最救命的一条：个别漏项属细微偏差，只可被要求补正；招标文件没规定量化标准的，不得扣分。与『重大偏差=否决』严格区分\",\n      \"remedy\": \"若被以细微偏差扣分且招标文件无量化标准，可质疑\"\n    },\n    {\n      \"id\": \"D03\", \"category\": \"D\", \"name\": \"报价书写不一致按法定规则修正（不废标）\",\n      \"legal_basis\": \"12号令第19条\",\n      \"severity\": \"提示\", \"manual\": false,\n      \"tender_patterns\": [\"(大写|小写)金额不一致\", \"总价.{0,6}单价.{0,6}不一致\"],\n      \"bid_patterns\": [],\n      \"check\": \"大写 vs 小写→以大写为准；总价 vs 单价→以单价为准（小数点明显错误除外）；中外文本→以中文为准。★陷阱：以单价为准意味着写错的单价会直接成为结算依据\",\n      \"remedy\": \"交标前必须逐项复核『单价×工程量=总价』\"\n    },\n\n    {\n      \"id\": \"E01\", \"category\": \"E\", \"name\": \"不同投标人的投标文件由同一单位或个人编制\",\n      \"legal_basis\": \"实施条例第40条第(一)项（视为串通）\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [],\n      \"bid_patterns\": [],\n      \"check\": \"各主体独立编制投标文件；不共用模板/电脑/编制人员\",\n      \"remedy\": \"无（客观推定，不可反证）\"\n    },\n    {\n      \"id\": \"E02\", \"category\": \"E\", \"name\": \"不同投标人委托同一单位或个人办理投标事宜\",\n      \"legal_basis\": \"实施条例第40条第(二)项（视为串通）\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [],\n      \"bid_patterns\": [],\n      \"check\": \"各主体分别委托、分别递交；不由同一人代领招标文件\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"E03\", \"category\": \"E\", \"name\": \"不同投标人的项目管理成员为同一人\",\n      \"legal_basis\": \"实施条例第40条第(三)项（视为串通）\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [],\n      \"bid_patterns\": [],\n      \"check\": \"★与C04构成死结：成员同一→视为串标；造假劳动关系→弄虚作假。唯一解=各主体配置真实独立的人员团队\",\n      \"remedy\": \"无第三条路\"\n    },\n    {\n      \"id\": \"E04\", \"category\": \"E\", \"name\": \"投标文件异常一致或报价呈规律性差异\",\n      \"legal_basis\": \"实施条例第40条第(四)项（视为串通）\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [],\n      \"bid_patterns\": [],\n      \"check\": \"★禁止共用成本测算底稿。等差/等比/固定百分比阶梯报价即构成『规律性差异』。各主体独立测算、报价依据取自不同渠道并留痕\",\n      \"remedy\": \"无（多主体投标最常见翻车点）\"\n    },\n    {\n      \"id\": \"E05\", \"category\": \"E\", \"name\": \"不同投标人的投标文件相互混装\",\n      \"legal_basis\": \"实施条例第40条第(五)项（视为串通）\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [],\n      \"bid_patterns\": [],\n      \"check\": \"装订完成后全文检索其他主体的字号、名称、资质页、公章页\",\n      \"remedy\": \"低级错误，但一票致命；自检可完全避免\"\n    },\n    {\n      \"id\": \"E06\", \"category\": \"E\", \"name\": \"投标保证金从同一单位或个人的账户转出\",\n      \"legal_basis\": \"实施条例第40条第(六)项；第26条第2款\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [],\n      \"bid_patterns\": [],\n      \"check\": \"★只看资金流出账户，不问主观理由。各主体必须以本单位基本账户独立缴纳，退还账户亦须各自自有账户\",\n      \"remedy\": \"无（电子招投标环境下系统自动比对，几乎无法事后辩解）\"\n    }\n  ]\n}\n\nFile v2.9.1:scripts/docs/FAQ.md\n\n# BidHunter 常见问题（FAQ）\n\n> 检索方式：`python3 faq.py <关键词>` 或 `python3 bidhunter.py faq <关键词>`。\n> 每个问题含关键词标签，命中任一即返回。\n\n## Q: 为什么判读结果里很多\"需确认\"？\n关键词: 需确认 不确定 没匹配 漏标\nA: \"需确认\"表示标题未命中任何主体能力词。常见原因：\n1. 你的 `qual_rules.json` 的 `entities` 能力词没覆盖该标的范围 → 按营业执照补充能力词。\n2. 标题里能力词被边界感知规则挡掉（如\"电气设备\"里的\"电气\"因前有 CJK 字被挡）→ 属于正常防误匹配，可在标题里出现能力词词首时正常命中。\n3. 实在吃不准就人工看一眼，并在报告底部用\"反馈 #序号 准确/有误 原因\"告诉我们，帮你优化规则。\n\n## Q: 推送失败了怎么办 / 怎么查推送记录？\n关键词: 推送 失败 收不到 钉钉 企微 邮件 历史\nA: 先运行诊断 `python3 doctor.py` 看 E005。查历史与重试：\n- `python3 push_manager.py history` 看 30 天推送记录\n- `python3 push_manager.py stats` 看统计\n- `python3 push_manager.py retry-failed` 重发失败项\n- `python3 push_manager.py health-check` 看连续失败告警\n首次配置通道请用 `python3 config_wizard.py`，未通过连通性测试不会写入。\n\n## Q: 怎么配置资质规则（不会写代码）？\n关键词: 配置 规则 资质 能力词 不会 新手 怎么填\nA: 两种方式：\n1. 规则编辑器（推荐，零代码）：`python3 bidhunter.py rules edit` → 浏览器打开 http://localhost:8080 图形化编辑并保存。\n2. 行业模板起步：复制 `scripts/samples/` 下对应行业的模板，按营业执照改 `entities`/`red_alerts`。\n改完跑 `python3 qual_check.py --validate-rules qual_rules.json` 做健康检查。\n\n## Q: 支持哪些招投标平台？怎么加新平台？\n关键词: 平台 平台列表 新增平台 采集 数据源 支持\nA: 当前支持已在 `references/platforms.md` 列明的央企/公共资源平台（如 cnooc/sinopec/petrochina/cnpc 等）。新增平台：参考 `references/platforms.md` 的\"自定义数据源\"章节，把平台采集参数加入 `bid_monitor.sh` 的适配器；也可在 ClawHub/SkillHub 反馈你需要的平台，我们按优先级扩展（v1.5 已增补平台覆盖）。\n\n## Q: 报告里出现的\"评分\"是什么意思？\n关键词: 评分 分数 匹配度 强烈推荐 建议跟 优先级\nA: v1.5 新增资质匹配度评分（0-100），帮你在可投标里排优先级：\n- 能力词命中数（≤40）+ 重点地区（≤20）+ 行业偏好（≤15）+ 预算区间（≤15）\n- 等级：强烈推荐(≥80) / 建议跟(≥55) / 可投一般 / 需确认 / 不可投\n评分仅供参考，最终仍以人工研判为准。\n\n## Q: 投标日历/开标倒计时怎么用？\n关键词: 日历 倒计时 开标 截止 提醒 漏跟\nA: `python3 bidhunter.py calendar` 或 `calendar.py <qual文件> --days 30` 看未来窗口内的开标/截止日。加 `--remind` 可对临近截止（默认 48h 内）的标自动推送提醒（需先配置推送通道）。\n注意：多数平台 list 接口无截止日字段，日历日期从标题解析，未含明确日期的标会归入\"待核实截止日\"。\n\n## Q: AI 速读/投标建议要额外付费吗？\n关键词: AI 速读 投标建议 费用 花钱 MiniMax API Key 配置\nA: 不额外购买服务器。AI 速读/风险识别/投标建议调用你自己的 MiniMax API（doubao/MiniMax 等），仅消耗你的 API 余额。配置：`~/.config/bidhunter/ai.json` 写入 `{\"api_key\":\"...\",\"group_id\":\"...\"}`。未配置时 AI 功能自动跳过，不影响基础采集研判。\n\n## Q: 多维筛选（金额/地区/行业）怎么用？\n关键词: 筛选 金额 预算 地区 行业 订阅 过滤\nA: 在 `qual_rules.json` 设置 `region_priority.high`（重点地区）、`industry_categories`+`industry_priority`（行业）、`budget_priority`（预算区间）。运行时可加过滤：\n`python3 filter_multi.py qual_xxx.jsonl --min 500000 --max 20000000 --region 天津 --industry 智能设备`\n\n## Q: SkillHub / ClawHub 上怎么搜不到或装不上？\n关键词: SkillHub ClawHub 安装 搜不到 面板 技能市场 上架\nA: 两端都要发布才覆盖。ClawHub 为 openclaw 命令行生态（自助发布免审核）；SkillHub 是 WorkBuddy 技能面板数据源（需官方审核，审核通过后点\"上架\"才在面板可见）。若面板搜不到，通常是 SkillHub 还在审核中或未点\"上架\"。\n\n## Q: 我的数据会外传吗？\n关键词: 隐私 数据 外传 安全 保密\nA: 采集仅取公开招投标公告；资质规则、推送配置存在你本机（`~/.config/bidhunter/`、skill 内 `bid_cache/`）。AI 速读会把公告/招标文件文本发往你配置的 MiniMax API 做解析，不会进入任何 BidHunter 云端（我们无云端）。不外传任何私有信息。\n\n## Q: 运行报 Python 错误 / 模块找不到？\n关键词: 报错 错误 python 模块 找不到 环境\nA: `python3 --version` 需 ≥3.8。所有脚本仅用标准库，无需 pip 安装。若报错，运行 `python3 doctor.py` 获取带错误码（E001~E005 / W001~W004）的诊断与下一步。\n\nFile v2.9.1:scripts/qual_rules.json\n\n{\n  \"version\": \"1.2\",\n  \"_match_loose\": true,\n  \"_match_loose_note\": \"v1.2: 能力词匹配使用宽松子串模式，避免 CJK 左边界规则漏判标题中部的关键词（如…零星维修服务 里的 维修）。假阳性由 _exclude_contexts 过滤。\",\n  \"description\": \"Qualification rules template - users MUST customize entities and rules to match their own business scope. All data here is placeholder/example only.\",\n\n  \"_exclude_contexts\": {\n    \"note\": \"v1.1: 上下文排除表 — 防止能力词误匹配子串。key 为能力词，value 列表内含任意一词则排除该匹配。\",\n    \"电气\": [\"电气石\"],\n    \"广告\": [\"广告设施\", \"广告位\", \"广告牌\", \"户外广告\"],\n    \"设计\": [\"设计制造\"],\n    \"维修\": [\"汽车维修\", \"设备维修\"],\n    \"设备\": [\"采矿设备\", \"勘探设备\"],\n    \"传媒\": [\"数字传媒\", \"新媒体\"],\n    \"视频\": [\"视频会议\", \"视频监控\", \"视频系统\"],\n    \"系统集成\": [\"信息系统集成\"],\n    \"安装\": [\"安装工程\", \"设备安装\"],\n    \"销售\": [\"销售代理\", \"销售服务\"],\n    \"租赁\": [\"融资租赁\", \"租赁服务\"],\n    \"运输\": [\"运输服务\", \"物流运输\"],\n    \"信息技术\": [\"信息技术服务\"],\n    \"机械\": [\"农业机械\", \"工程机械\"]\n  },\n\n  \"entities\": {\n    \"entity_a\": {\n      \"name\": \"主体A（示例：传媒/活动类）\",\n      \"capabilities\": [\n        \"广告\", \"传媒\", \"活动策划\", \"会展\", \"设计\", \"制作\", \"宣传\",\n        \"视频\", \"影视\", \"文化\", \"品牌\", \"营销\", \"推广\", \"印刷\",\n        \"摄影\", \"标识\", \"展示\", \"装饰\", \"装修\"\n      ],\n      \"note\": \"v1.1: 智能匹配已启用。'广告'不会误匹配'户外广告设施拆除'，请按营业执照经营范围填入真实能力词。\"\n    },\n    \"entity_b\": {\n      \"name\": \"主体B（示例：通用/设备/维修类）\",\n      \"capabilities\": [\n        \"设备\", \"器材\", \"供应\", \"销售\", \"安装\", \"调试\", \"维修\",\n        \"租赁\", \"运输\", \"物流\", \"仓储\", \"办公\", \"通用\", \"机械\",\n        \"电气\", \"自动化\", \"系统集成\", \"信息技术\"\n      ],\n      \"note\": \"v1.1: 智能匹配已启用。'电气'不会误匹配'电气石'，请按营业执照经营范围填入真实能力词。\"\n    }\n  },\n\n  \"red_alerts\": [\n    \"车辆维修\", \"机动车维修\", \"劳务派遣\", \"食品生产\", \"食品加工\",\n    \"医疗器械\", \"建筑施工\", \"消防\", \"危险品\", \"房地产开发\",\n    \"电信\", \"互联网信息服务\", \"爆破\", \"保安\", \"安保\", \"测绘\",\n    \"勘察\", \"特种设备\", \"压力容器\", \"电梯\", \"制药\", \"矿产\",\n    \"采掘\", \"冶炼\", \"钻井\", \"修井\",\n    \"监理\"\n  ],\n\n  \"substring_alerts\": {\n    \"_note\": \"★v1.2 子串红警：绕过 smart_match 的 CJK 左边界规则（该规则导致出现在标题中部的词永远匹配不到）。下列为『必须专门资质/许可、主体一律不具备』的高风险词，出现即判不可投。\",\n    \"_list\": [\n      \"监理\", \"消防\", \"电梯\", \"压力容器\", \"特种设备\", \"爆破\", \"危险品\",\n      \"医疗器械\", \"劳务派遣\", \"保安服务\", \"安保服务\", \"测绘\", \"勘察\",\n      \"钻井\", \"修井\", \"房地产开发\", \"药品生产\", \"制药\"\n    ]\n  },\n\n  \"service_type_gate\": {\n    \"note\": \"★v1.2 服务类型门禁：判定可投性先看【采购标的的服务类型】，再看项目名里的动词。项目名常把服务类型藏在修饰语后面——例：『楼宇安全整治维修改造项目监理服务』真正采购的是【监理服务】，不是维修。仅凭名称里的『维修/改造/整治/施工』命中能力词，不得判可投。\",\n    \"blocked_types\": {\n      \"监理\": {\n        \"keywords\": [\"监理\"],\n        \"action\": \"not_investable\",\n        \"reason\": \"标的为监理服务，需监理资质；施工总承包资质 ≠ 监理资质。且施工单位投同一项目监理通常有回避要求。\"\n      },\n      \"设计/勘察\": {\n        \"keywords\": [\"设计服务\", \"工程设计\", \"勘察设计\", \"方案设计\"],\n        \"action\": \"needs_review\",\n        \"reason\": \"标的为设计/勘察服务，需对应设计资质，须人工核验主体资质\"\n      },\n      \"检测\": {\n        \"keywords\": [\"检测服务\", \"工程检测\", \"质量检测\", \"无损检测\", \"第三方检测\"],\n        \"action\": \"needs_review\",\n        \"reason\": \"标的为检测服务，需CMA/CNAS等检测资质，须人工核验\"\n      },\n      \"审计/评估\": {\n        \"keywords\": [\"审计服务\", \"资产评估\", \"评估服务\", \"造价咨询\", \"招标代理\", \"咨询服务\"],\n        \"action\": \"needs_review\",\n        \"reason\": \"标的为审计/评估/咨询类服务，需对应执业资质，须人工核验\"\n      }\n    }\n  },\n\n  \"special_rules\": [\n    {\n      \"id\": \"service_type_gate_监理\",\n      \"description\": \"★服务类型门禁：标的为监理服务的，一律不可投（主体无监理资质）\",\n      \"match_keywords\": [\"监理\"],\n      \"action\": \"not_investable\",\n      \"reason\": \"标的为监理服务，投标主体均无监理资质（2026-09-11 负责人确认，案例614535）\"\n    },\n    {\n      \"id\": \"service_type_review\",\n      \"description\": \"服务类标的（设计/勘察/检测/审计/评估/造价咨询/招标代理）需人工确认资质后再定\",\n      \"match_keywords\": [\"设计服务\", \"工程设计\", \"勘察设计\", \"检测服务\", \"工程检测\", \"审计服务\", \"资产评估\", \"评估服务\", \"造价咨询\", \"招标代理\"],\n      \"action\": \"needs_review\",\n      \"reason\": \"服务类标的需要对应专业资质，不得凭项目名中的施工/维修动词命中\"\n    },\n    {\n      \"id\": \"skip_procurement\",\n      \"description\": \"采购/采办/询价类不参与（垫资风险）\",\n      \"match_keywords\": [\"采购\", \"采办\", \"询价\", \"询比\", \"竞争性谈判\"],\n      \"action\": \"skip\",\n      \"reason\": \"垫资类项目不参与\"\n    },\n    {\n      \"id\": \"external_qual_allowed\",\n      \"description\": \"示例：某类标可外找资质，不依赖自有资质（match_keywords 按需填写，留空则不触发）\",\n      \"match_keywords\": [],\n      \"action\": \"investable\",\n      \"assigned_entity\": \"entity_a\",\n      \"reason\": \"此类标可外找资质，正常推进\"\n    }\n  ],\n\n  \"skip_keywords_result\": [\"结果公示\", \"中标公示\", \"成交公示\", \"中标公告\", \"成交公告\"],\n\n  \"region_priority\": {\n    \"high\": [],\n    \"note\": \"按需填写重点地区，如 [\\\"天津\\\", \\\"青岛\\\", \\\"深圳\\\"]\"\n  },\n\n  \"_a4_note\": \"v1.5 多维筛选(A4)可选字段，不填则对应加分为0：industry_categories 映射能力词→行业类目；industry_priority 重点行业列表；budget_priority 预算偏好区间(元)。\",\n  \"industry_categories\": {},\n  \"industry_priority\": [],\n  \"budget_priority\": {\"min\": null, \"max\": null, \"note\": \"按需填写预算偏好区间(元)，如 {\\\"min\\\":500000,\\\"max\\\":20000000}\"}\n}\n\nFile v2.9.1:scripts/quote/gate.json\n\n{\n  \"schema\": \"bidhunter-quote-gate/v1\",\n  \"disclaimer\": \"本闸门只做算式校验与清单提示，不产生报价意见，不替代人工判断。任一道不过即禁止输出金额；缺参数时只交框架与待补清单，绝不交带金额的报价函。\",\n\n  \"thresholds\": {\n    \"labor_coefficient_low\": 1.10,\n    \"labor_coefficient_high\": 1.25,\n    \"scale_tolerance_pct\": 15.0,\n    \"margin_floor_pct_default\": 17.0,\n    \"market_band_deviation_pct\": 50.0,\n    \"params_stale_days\": 90\n  },\n\n  \"computed_cards\": [\n    {\n      \"id\": \"C-1\",\n      \"name\": \"品类清算价筛查\",\n      \"rank\": 0,\n      \"requires\": [\"min_wage_monthly\", \"heads\", \"months\"],\n      \"formula\": \"对手地板价 ≈ 当地月最低工资 × 人数 × 月数 × (1.10 ~ 1.25)\",\n      \"block_when\": \"我方合规成本 >= 地板价下限\",\n      \"on_block\": \"判「结构性陪跑」：即使保本零毛利也进不了前列，直接不投，不要继续做标书。\",\n      \"on_pass\": \"地板价明显低于我方成本才继续；若两者接近，仍按陪跑处理。\",\n      \"note\": \"仅适用于纯人力品类（保洁/物业/保安/人力派驻）。系数覆盖耗材、管理、保险与微利。\"\n    },\n    {\n      \"id\": \"C2\",\n      \"name\": \"规模换算（线性校验）\",\n      \"rank\": 2,\n      \"requires\": [\"prior_amount\", \"prior_scale\", \"target_scale\"],\n      \"formula\": \"新口径金额 ≈ 旧口径金额 × 新规模 ÷ 旧规模\",\n      \"block_when\": \"实际填写的金额与线性推算值偏差 > 容差\",\n      \"on_block\": \"先解释规模差异的来源（台数/人月/点位/期数），解释不通则禁止沿用旧价。\",\n      \"note\": \"典型事故：沿用外地旧价报新标，未换算数量，量级偏差可达 10 倍以上。\"\n    },\n    {\n      \"id\": \"C3\",\n      \"name\": \"单位单价校验\",\n      \"rank\": 3,\n      \"requires\": [\"total_amount\", \"quantity\"],\n      \"formula\": \"单价 = 总价 ÷ 数量\",\n      \"block_when\": \"计算出单价落在已知单价带之外，且无书面解释\",\n      \"on_block\": \"单价是最硬的一把尺：先用单价反查总价，而不是用总价解释单价。\"\n    },\n    {\n      \"id\": \"M1\",\n      \"name\": \"毛利红线\",\n      \"rank\": 9,\n      \"requires\": [\"total_amount\", \"cost_amount\"],\n      \"formula\": \"毛利率 = (总价 - 成本) ÷ 总价\",\n      \"block_when\": \"毛利率 < 底线\",\n      \"on_block\": \"低于底线不得出价；若因战略需要压价，必须留下书面决策依据。\",\n      \"note\": \"底线默认取参数库，可在参数库中按品类覆盖。\"\n    }\n  ],\n\n  \"manual_cards\": [\n    {\n      \"id\": \"C1\",\n      \"name\": \"招标文件条款逐字读完\",\n      \"action\": \"逐条读评分办法、废标条款、付款周期、验收标准；把「必须/应/不得」和带★的参数全部摘出。\",\n      \"why\": \"漏读一条实质性要求，后面所有测算都白做。\"\n    },\n    {\n      \"id\": \"C0\",\n      \"name\": \"市场价带反推\",\n      \"action\": \"取同品类近期开标价或中标价，反推市场价带；我方报价偏离价带超过阈值必须能解释。\",\n      \"why\": \"价带是外部锚点，能挡住「自己算得很对但市场不认」的报价。\"\n    },\n    {\n      \"id\": \"C4\",\n      \"name\": \"服务模式逐项加减\",\n      \"action\": \"把服务频次、响应时限、驻场与否、含不含耗材、节假日是否加派逐项对上，每一项都落到金额增减。\",\n      \"why\": \"同类标之间的差异几乎全在这一层，直接套旧价必错。\"\n    },\n    {\n      \"id\": \"C5\",\n      \"name\": \"敏感性分析覆盖全部变量\",\n      \"action\": \"对人数、月数、耗材、税率、付款周期逐项做单变量扰动，确认结论不因单一假设翻转。\",\n      \"why\": \"只有一个点的测算不是测算，是一条线。\"\n    },\n    {\n      \"id\": \"C6\",\n      \"name\": \"成本口径与服务口径配套\",\n      \"action\": \"确认成本口径（含税/不含税、含不含管理费与社保）与评标口径一致；口径不一致先统一再比。\",\n      \"why\": \"口径错配会制造出并不存在的毛利或亏损。\"\n    }\n  ],\n\n  \"param_schema\": {\n    \"min_wage_monthly\": \"当地月最低工资（全日制），单位元\",\n    \"min_wage_region\": \"该工资标准适用的地区\",\n    \"min_wage_as_of\": \"该工资标准的执行起始日期（YYYY-MM-DD）\",\n    \"labor_coefficient\": \"[下限, 上限]，默认 [1.10, 1.25]\",\n    \"margin_floor_pct\": \"毛利红线，默认 17.0\",\n    \"scale_tolerance_pct\": \"规模换算容差，默认 15.0\",\n    \"tax_rate\": \"常用税率（服务类 0.06 / 货物类 0.13），用于含税与评标价换算\",\n    \"unit_price_bands\": \"可选：{品类: [下限, 上限]}，用于单位单价校验\"\n  }\n}\n\nFile v2.9.1:scripts/samples/demo_rules.json\n\n{\n  \"version\": \"1.5-demo\",\n  \"description\": \"DEMO 示例规则（虚构公司「鸿图文化传媒 / 鸿图智能设备」）。仅用于体验效果，正式使用请改成你自己的主体与能力词。\",\n\n  \"_exclude_contexts\": {\n    \"电气\": [\"电气石\"],\n    \"广告\": [\"广告设施\", \"广告位\", \"广告牌\", \"户外广告\"],\n    \"视频\": [\"视频会议\", \"视频监控\", \"视频系统\"],\n    \"安装\": [\"安装工程\", \"设备安装\"],\n    \"设备\": [\"采矿设备\", \"勘探设备\"]\n  },\n\n  \"entities\": {\n    \"hongtu_media\": {\n      \"name\": \"鸿图文化传媒（示例）\",\n      \"capabilities\": [\"广告\", \"传媒\", \"活动策划\", \"会展\", \"设计\", \"视频\", \"影视\", \"文化\", \"品牌\", \"宣传\", \"印刷\", \"摄影\", \"标识\", \"展示\", \"装修\"],\n      \"note\": \"虚构示例主体，演示传媒类能力匹配。\"\n    },\n    \"hongtu_tech\": {\n      \"name\": \"鸿图智能设备（示例）\",\n      \"capabilities\": [\"设备\", \"器材\", \"安装\", \"调试\", \"维修\", \"租赁\", \"电气\", \"自动化\", \"系统集成\", \"信息技术\"],\n      \"note\": \"虚构示例主体，演示设备类能力匹配。\"\n    }\n  },\n\n  \"red_alerts\": [\"车辆维修\", \"机动车维修\", \"劳务派遣\", \"食品生产\", \"医疗器械\", \"建筑施工\", \"消防\", \"危险品\", \"房地产开发\", \"爆破\", \"保安\", \"测绘\", \"特种设备\", \"电梯\", \"制药\"],\n\n  \"special_rules\": [\n    {\"id\": \"skip_procurement\", \"description\": \"采购/采办/询价类不参与（垫资风险）\", \"match_keywords\": [\"采购\", \"采办\", \"询价\", \"竞争性谈判\"], \"action\": \"skip\", \"reason\": \"垫资类项目不参与\"},\n    {\"id\": \"demo_investable\", \"description\": \"示例：视频制作类可投\", \"match_keywords\": [\"视频制作\", \"宣传片\"], \"action\": \"investable\", \"assigned_entity\": \"hongtu_media\", \"reason\": \"此类标可正常推进\"}\n  ],\n\n  \"skip_keywords_result\": [\"结果公示\", \"中标公示\", \"成交公示\", \"中标公告\", \"成交公告\"],\n\n  \"region_priority\": {\"high\": [\"天津\", \"青岛\", \"深圳\"], \"note\": \"示例重点地区\"},\n\n  \"industry_categories\": {\n    \"文化传媒\": [\"广告\", \"传媒\", \"活动策划\", \"会展\", \"设计\", \"视频\", \"影视\", \"文化\", \"品牌\", \"宣传\", \"印刷\", \"摄影\", \"标识\", \"展示\", \"装修\"],\n    \"智能设备\": [\"设备\", \"器材\", \"安装\", \"调试\", \"维修\", \"租赁\", \"电气\", \"自动化\", \"系统集成\", \"信息技术\"]\n  },\n  \"industry_priority\": [\"文化传媒\", \"智能设备\"],\n  \"budget_priority\": {\"min\": 500000, \"max\": 20000000, \"note\": \"示例预算偏好区间(元)\"}\n}\n\nArchive v2.9.0: 55 files, 195457 bytes\n\nFiles: references/field_standard.md (3541b), references/filter_rules.md (5854b), references/platforms.md (7283b), references/setup-guide.md (3831b), requirements.txt (248b), scripts/ai/analytics.py (3449b), scripts/ai/bid_advisor.py (7202b), scripts/ai/clause_extractor.py (15321b), scripts/ai/doc_parser.py (6185b), scripts/ai/doc_reader.py (2786b), scripts/ai/minimax_client.py (3847b), scripts/ai/risk_scanner.py (3908b), scripts/api_server.py (4275b), scripts/bid_monitor.sh (6779b), scripts/bidhunter.py (16631b), scripts/calendar.py (7133b), scripts/check_environment.py (3199b), scripts/compliance/compliance_scanner.py (14730b), scripts/compliance/redlines.json (17880b), scripts/config_wizard.py (6394b), scripts/custom_source.py (4908b), scripts/demo.py (2080b), scripts/docs/FAQ.md (5216b), scripts/doctor.py (6968b), scripts/faq.py (2216b), scripts/feedback.py (12686b), scripts/filter_multi.py (3061b), scripts/init_wizard.py (10852b), scripts/material_gap.py (14110b), scripts/pipeline.sh (8787b), scripts/push_manager.py (17165b), scripts/qual_check.py (20073b), scripts/qual_rules.json (6883b), scripts/quote_gate.py (19646b), scripts/quote_gen.py (2447b), scripts/quote/gate.json (4713b), scripts/report_html.py (10090b), scripts/report_text.py (6268b), scripts/rule_editor.py (15513b), scripts/samples/demo_cache.jsonl (1104b), scripts/samples/demo_qual.jsonl (4076b), scripts/samples/demo_rules.json (2539b), scripts/score_ledger.py (95528b), scripts/sources.example.json (746b), scripts/sources.presets/html_list.json (842b), scripts/sources.presets/json_api.json (1266b), scripts/sources.presets/README.md (2463b), scripts/sources.presets/rss.json (658b), scripts/status.py (7520b), scripts/usage.py (5479b), scripts/webhook_publish.py (2632b), skill-card.md (2494b), skill-dependencies.json (11905b), SKILL.md (29718b), _meta.json (128b)\n\nFile v2.9.0:SKILL.md\n\n---\nname: bidhunter\nslug: bidhunter\ndisplayName: 标讯猎手 BidHunter\nversion: \"2.9.0\"\nsummary: 国央企招投标信息监控与研判：自动采集多平台公告，按资质规则判断可投性，生成研判简报并推送；支持分片全覆盖读标、评分点分值守恒校验、评分点台账（五态状态机+四条必报警）、正向覆盖矩阵（A/B/C 三档）、待补材料清单、零响应检测、合规红线扫描与报价闸门。本地运行，零云成本。\nlicense: MIT-0\ndescription: \"国央企招投标信息监控与研判技能。自动采集多平台公告，按资质规则比对可投性（可投/不可投/需确认），生成带研判简报并多通道推送。v1.5 起新增：资质匹配度评分(0-100)、投标日历与开标倒计时、金额/地区/行业多维筛选、零代码规则编辑器、诊断中心、示例模式、集中FAQ、统一命令入口；v2.0 本地AI增强（招标文件AI速读+风险条款识别，零云成本）；v2.5 投标策略建议；v3.0 本地开放API+签名webhook；v3.5 合规红线引擎（31条法定废标红线本地扫描、交标前自查清单、多主体串标隔离，零API成本）；v2.7 报价闸门（品类清算价地板、规模换算线性、单位单价、毛利红线，任一道不过即禁止输出结论金额）。★v2.8 覆盖率重写：修复只读前9000字符导致200页标书95%未读的缺陷，改为结构化分片全覆盖并强制标注覆盖率；修复PDF/DOCX扫描静默失效（此前规则命中恒为0）；新增评分点逐项映射与分值守恒校验、待补材料清单（高危红标签字盖章页缺件）、零响应检测（空洞满足/待补占位/跨项目残留/数字型空洞），无AI key也能出完整简报。触发词：抓招投标、今日哪些能投、标讯监控、标书研判、招投标公告、央企招标、投标资质匹配、AI读标书、投标建议、这份标会不会被废、废标风险、交标前检查、合规红线扫描、多主体投标、会不会被认定串标、报价闸门、这个标报多少、报价复核、出价前检查、这个标值不值得投、报价会不会被废、待补材料清单、还差什么材料、零响应检测、评分点、评分表、评分办法、这个分怎么拿、漏项、丢分、扣分项、待补、待提供、准备什么材料、递交清单、应答表、偏离表、评分台账、评分项跟踪、覆盖矩阵、哪些评分项没写、哪条要求没响应。\"\nagent_created: true\n---\n\n# 标讯猎手 BidHunter\n\n> 采集国央企/公共资源招投标公告 → 资质规则比对可投性 → 生成带研判简报 → 多通道推送 → （v1.5+）评分排序/日历提醒/多维筛选/零代码配规则 → （v2.0+）AI 速读标书与风险识别 → （v2.5+）投标策略建议 → （v3.5+）**交标前法定红线扫描与废标预警**。\n> 自包含、已脱敏：不含任何私有主体、个人联系方式、公司档案。使用者按自己的营业执照与业务规则填充配置即可。\n\n## 5 分钟跑通（新用户看这里）\n\n两条路，挑一条：\n\n### A. 先看效果——不用配任何东西\n\n```bash\npython3 bidhunter.py paste 你的招标文件.pdf\n```\n\n丢一份招标文件进来，直接出**废标风险报告**（31 条法定红线本地扫描）。\n不需要 AI key、不需要采集源、离线可跑。\n\n### B. 开始监控——三问生成配置\n\n```bash\npython3 bidhunter.py init\n```\n\n问三个问题（主体名称 / 主营什么 / 盯哪些地区），自动生成你的资质规则库，\n再 `bash pipeline.sh` 开始采集。\n\n> 行业**不设固定选项**——可以直接粘贴营业执照经营范围，自动拆成能力词。\n> 想先看看效果不写盘：`python3 bidhunter.py init --preview`\n\n## 卡住了？先跑诊断\n\n任何异常先跑这一条，30 秒定位问题（E001~E005 + W001~W004，每条都带修复建议）：\n\n```bash\npython3 bidhunter.py doctor\n```\n\n> 最常见的失败原因是 **E002：规则库仍是示例占位符**。装上不等于能用——\n> 一条命令解决：`python3 bidhunter.py init`（三问自动生成，约 1 分钟）。\n\n## 版本能力一览\n\n| 版本 | 主题 | 关键能力 |\n|---|---|---|\n| v1.1 | 准 | 边界感知智能匹配、规则健康检查、精华版报告 |\n| v1.2 | 达 | 钉钉/企微/邮件多通道推送、配置向导、推送历史与告警 |\n| **v1.5** | 易+功能 | 匹配度评分、投标日历、多维筛选、规则编辑器、诊断/示例/FAQ/统一入口 |\n| **v2.0** | 智(本地AI) | 招标文件 AI 速读、排他/内定风险识别、业主品类画像（零云成本） |\n| **v2.5** | 策 | 投标策略建议生成（仅供参考，不代填报价/资质） |\n| **v3.0** | 开(本地) | 本地查询 API + 签名 webhook（云/SaaS 部分因成本约束未启用） |\n| **v3.5** | 规 | 合规红线引擎：31 条法定废标红线本地扫描 + 交标前自查清单 + 多主体串标隔离（零 API 成本） |\n| **v2.6** | 顺 | **上手转化**：`init` 三问生成配置（行业自由输入）、`paste` 零配置出废标风险报告、本地埋点、平台适配模板 |\n| **v2.7** | **价** | **报价闸门**：出价前算式校验（品类清算价地板、规模换算线性、单位单价、毛利红线），任一道不过即禁止输出结论金额；缺参数只交框架与待补清单 |\n| **v2.8** | **读全** | ★**覆盖率重写**：分片全覆盖（修掉只读前 9000 字符、200 页标书 95% 未读的缺陷）；PDF/DOCX 扫描静默失效已修（此前规则命中恒为 0）；**评分点逐项映射 + 分值守恒校验**；新增**待补材料清单**与**零响应检测**；无 AI key 也能出完整简报 |\n| **v2.9** | **对表** | **评分点台账**（五态状态机 + 四条必报警：分值不守恒/同章节重复锚点/状态回退未确认/临截止仍缺项）；**正向覆盖矩阵**（资格·技术·商务逐条判 A 完全 / B 部分 / C 未覆盖，非布尔）；两表共用 `response_location` 字段；CSV 保底 / xlsx 有库才出 |\n\n## ★ v2.8 为什么是这一版\n\n2026-10-05 复盘发现三个叠加缺陷，**每一个都单独足以让读标结论不可信**：\n\n| # | 缺陷 | 实测影响 | 修复 |\n|---|---|---|---|\n| 1 | `clause_extractor` / `risk_scanner` / `compliance_scanner` / `bid_advisor` 全部硬编码 `MAX_CHARS=9000` | 200~500 页标书（15~40 万字）**只喂入前 9000 字，约 4~6%**。且截断后照样输出完整 JSON —— **\"读了一页就当读完\"是最坏的失败模式** | `doc_parser.segment()` 按章节结构切片 + 逐片抽取 + 合并去重；输出强制带 `meta.coverage_pct` |\n| 2 | `compliance_scanner` 导入 `doc_parser.parse_document`（该函数不存在），异常被裸 `except` 吞掉 | **喂任何 PDF/DOCX，规则扫描恒为 0 条命中**，却照样打印一份自信的人工清单。B02 实测 0 → 修复后 9 条，其中命中\"缺漏项金额超 20% 视为非实质性响应\"（该标废标的真实原因） | 改用真实 `parse()`，并把 backend 与 chars_read 写进输出，让静默失败可见 |\n| 3 | `bid_advisor` 调 `extract(text)` 拿到的是**元组**，直接 `json.dumps` 传进 prompt | 策略建议基于一个字符串化的元组，**实际一直是坏的** | 接 `(clauses, meta)` 双返回；无 key 时降级出规则版简报而不是 exit 2 |\n\n**修复后实测（B02 保洁真实招标文件 PDF）**：覆盖率 79.9% → **100%**；合规命中 0 → **9 条**；无 AI key 也能出评标办法/截止时间/预算/资格要求/未确认字段。\n\n**新增两个纯规则（零 API）模块**：\n- `gap scan` 待补材料清单：三态（HAVE / MISSING / CHECK）+ 高危红标（**缺件项落在签字盖章页 = 形式审查直接不通过**）+ 有效期提醒\n- `gap zero` 零响应检测：空洞满足 / 借附件 / **待补占位** / 跨项目残留 / 承诺主体不明 / 数字型空洞（\"不低于要求\"却没数字）\n\n**新增评分点分值守恒校验**：评分项合计 ≠ 100 时报警并要求解释差额——总分对不上通常意味着**漏抄了评分项**，这正是漏分的根因。\n\n\n## 何时使用\n\n- \"抓一下招投标\" / \"今日哪些能投\" / \"重新分析一遍标讯\"\n- \"AI 读一下这份标书\" / \"这份招标文件有什么风险\" / \"帮我出投标建议\"\n- \"这份标会不会被废\" / \"交标前帮我过一遍\" / \"有没有废标风险\" / \"合规红线扫一下\"\n- \"还差什么材料\" / \"待补材料清单\" / \"这些材料要不要盖章\"（v2.8 `gap scan`）\n- \"帮我查查有没有漏项\" / \"有没有只写完全满足的\" / \"有没有上个项目的残留\"（v2.8 `gap zero`）\n- \"评分表在哪\" / \"评分点有几个\" / \"这个分怎么拿\"（v2.8 评分点逐项映射 + 分值守恒校验）\n- \"我们几家一起投 / 多主体投标会不会被认定串标\"（v3.5 先查实施条例第34条）\n- \"这个标报多少\" / \"报价复核一下\" / \"出价前帮我过一遍\" / \"这个标值不值得投\"（v2.7 走报价闸门）\n- 需要判断公告可投性、归属投标主体、监控重点平台\n- 搭建/优化招投标监控工作流\n\n## 安装与初始化\n\n1. 脚本已随 skill 就位（`~/.workbuddy/skills/bidhunter/scripts/`）。\n2. 编辑 `qual_rules.json` 填入你的投标主体与资质能力词：\n   - 零代码：运行 `python3 bidhunter.py rules edit` → 浏览器图形化编辑，内置「能源/建筑/IT/市政」行业模板可一键预填\n   - 或复制 `scripts/samples/demo_rules.json` 改\n   - 校验：`python3 qual_check.py --validate-rules qual_rules.json`\n3. （可选）配置推送：`python3 config_wizard.py`（钉钉/企微/邮件）\n4. （可选）配置 AI：`~/.config/bidhunter/ai.json` 写入 `{\"api_key\":\"你的MiniMaxKey\"}`（v2.0+ 用，仅消耗你的 API 余额，零云成本）。AI 速读 PDF/Word 建议先 `pip install -r requirements.txt`（PyPDF2/python-docx）；未装则自动降级为正则抽取。\n\n> 先看效果再配：直接 `python3 bidhunter.py demo` 跑内置示例。\n\n## 统一命令入口（v1.5 · A9，零命令行门槛）\n\n```bash\npython3 bidhunter.py run [--fresh] [--summary] [--calendar]   # 采集+比对+报告(+推送)\npython3 bidhunter.py status                                    # 今日状态\npython3 bidhunter.py doctor                                    # 一键诊断\npython3 bidhunter.py demo                                      # 示例效果\npython3 bidhunter.py calendar [--days 7]                        # 投标日历\npython3 bidhunter.py faq [关键词]                               # 查常见问题\npython3 bidhunter.py rules edit [--port 8080]                  # 图形化配规则\npython3 bidhunter.py ai read <标书.pdf>                        # v2.0 AI 速读\npython3 bidhunter.py ai advise <标书.pdf>                      # v2.5 投标建议\npython3 bidhunter.py api serve [--port 8765]                   # v3.0 本地API\npython3 bidhunter.py compliance scan <标书> [--mode tender|bid] # v3.5 合规红线扫描\npython3 bidhunter.py compliance checklist                      # v3.5 交标前自查清单\npython3 bidhunter.py gap scan <招标文件>                          # v2.8 待补材料清单\npython3 bidhunter.py gap zero <投标文件草稿>                      # v2.8 零响应检测\npython3 bidhunter.py quote params [--show]                     # v2.7 报价参数库（首次填一次）\npython3 bidhunter.py quote check --help                        # v2.7 报价闸门（不过禁止出金额）\npython3 bidhunter.py gap scan <招标文件>                        # v2.8 待补材料清单（零 API）\npython3 bidhunter.py gap zero <投标文件草稿> [--our-project 名称] # v2.8 零响应检测（零 API）\n```\n\n## 待补材料清单与零响应检测（v2.8）★\n\n读完标只是第一步，**最容易丢分的是\"以为写完了\"**。这两条命令专治这件事，纯规则、零 API 成本。\n\n```bash\n# 交标前还差什么：资格要求逐条三态判定 + 高危红标\npython3 bidhunter.py gap scan 招标文件.pdf\npython3 bidhunter.py gap scan 招标文件.pdf --json\n\n# 草稿写完后查零响应：空洞满足 / 借附件 / 待补占位 / 跨项目残留 / 数字型空洞\npython3 bidhunter.py gap zero 投标文件草稿.docx\npython3 bidhunter.py gap zero 草稿.docx --our-project \"XX项目\" --other-projects 上一标的项目名\n```\n\n**`gap scan` 输出**\n```\n共 3 项：缺 1 · 待确认 2 · 高风险 1 · 带有效期 2\n\n🔴 [MISSING] 3.3 业绩证明文件（资格评审第 4 项）★须按规定格式提交业绩表…\n     ⚠️ 出现在签字盖章页——缺件即形式审查不通过\n     标记：需盖章\n```\n\n三态含义：\n- `HAVE` — 规则库已有证据线索\n- `MISSING` — **原文写\"必须/应/须\"但未找到我方证据 → 最高优先级**\n- `CHECK` — 表述含糊，人工确认\n\n**高危判定**：缺件项若涉及合同/业绩/资质/承诺函/人员简历/盖章 → 🔴。因为这些要进签字盖章页，**占位符上会 = 形式审查直接不通过，不用到评标**。\n\n**`gap zero` 检出的六类零响应**\n| 类型 | 危险度 | 说明 |\n|---|---|---|\n| **待补占位**（待补/待提供/【 】/＿＿＿） | 致命 | 评标时等同未提供 |\n| **跨项目残留**（别的项目名/甲方名） | 致命 | 复制粘贴未替换 |\n| 空洞满足（完全满足/无偏离） | 风险 | 须紧跟具体做法或参数 |\n| 借附件（详见附件） | 风险 | 附件里必须真有内容 |\n| 数字型空洞（不低于要求/优于标准） | 风险 | 没给数字 = 按无偏离计分 = 零 |\n| 承诺主体不明（我司将…） | 提示 | 须落到具体章节与具体承诺 |\n\n\n## 评分点台账与覆盖矩阵（v2.9）★\n\n`gap` 回答\"我还差什么\"，**`score` 回答\"分丢在哪\"**。两张表在交标前互为补充：台账管评分项有没有写，覆盖矩阵管每条要求有没有答。纯规则、零 API 成本。\n\n```bash\n# B1 评分点台账：五态跟踪 + 四条必报警\npython3 bidhunter.py score ledger 招标文件.pdf\npython3 bidhunter.py score ledger 招标文件.pdf --csv 台账.csv --xlsx 台账.xlsx\npython3 bidhunter.py score ledger 招标文件.pdf --deadline 2026-10-20\n\n# B2 正向覆盖矩阵：逐条要求判 A/B/C（需同时给投标文件草稿）\npython3 bidhunter.py score coverage 招标文件.pdf --response 投标文件草稿.docx\n\n# 两张表一起出 + 机器可读\npython3 bidhunter.py score both 招标文件.pdf --response 草稿.docx --json\n\n# 内置自测（11 用例：四个反例 + 三个 L3 回归 + 报警/降级）\npython3 bidhunter.py score selftest\n```\n\n> ⚠️ **B1 必须配 `--response`**：不给投标文件草稿时，台账只会判「未开始」——\n> 定位到评分表只说明这项存在，不代表我方已写。这是 v2.9 修掉的 L1 缺陷\n> （此前不给草稿也报\"全部已完成\"）。\n> 用 `--prev-ledger 上版.json` 可激活 A3 状态回退检测。\n\n**B1 五态**（每个评分项在台账里的位置）\n\n| 状态 | 含义 |\n|---|---|\n| ⚪ 未开始 | 评分项已登记，但没定位到响应内容 |\n| 🔵 已写 | 定位到响应位置且有内容 |\n| 🔴 材料缺 | 标准要求的材料在材料库零命中 |\n| 🟡 待核 | 锚点与材料都到位，等三查通过 |\n| ✅ 已完成 | 三查通过（分值归位/锚点唯一/引用可达） |\n\n**B1 四条必报警**（不报警即算实现错误）\n| 编号 | 触发条件 |\n|---|---|\n| A1 | 评分项分值合计 ≠ 声明总分（缺省 100）——**差额必须解释，不得直接采信** |\n| A2 | 同一评分项在**同一文件同一章节**出现 ≥2 个锚点 |\n| A3 | 状态回退未经人工确认（需显式 `--confirm-regress`） |\n| A4 | 距投标截止 ≤3 天仍有「未开始」项 |\n\n**B2 覆盖三档**（非布尔——中间那档才是有用的信息）\n\n| 档 | 判定 |\n|---|---|\n| ✅ A 完全覆盖 | 定位到响应 ＋ 硬要素（数字/规格/名单/年限）齐全 ＋ 有承诺动词 |\n| 🟡 B 部分覆盖 | 有定位但硬要素缺失，**或**仅空声明（\"完全满足\"无支撑） |\n| 🔴 C 未覆盖 | 响应文件中定位不到对应内容 |\n\n**B2 关键用法**：`--response` **必须给投标文件草稿**。不给时全部降为 C 并提示\"未提供草稿，无法判定（不猜）\"——因为拿招标文件自己的措辞去比对毫无意义，硬要素天然\"齐全\"，会刷出假的 A。\n\n> 三条铁律同 v2.8：**不猜不编**（分值为空留空，不填 0）、**指不到页码标\"待人工核实\"**、**检测器不是裁判**（A/B/C 是规则判断，人工结论仍归人）。\n> `openpyxl` 非必需依赖：缺失时自动降级 CSV 并打印原因，CSV 是保底输出。\n\n\n## 标准流程\n\n### 1. 采集 + 比对 + 报告\n```bash\nbash pipeline.sh                  # 全流程（缓存优先）\nbash pipeline.sh --fresh         # 强制重采当天\nbash pipeline.sh --calendar      # 生成后额外打印投标日历\n# A4 多维筛选（后过滤）\nbash pipeline.sh --budget-min 500000 --budget-max 20000000 --region 天津 --industry 智能设备\n```\n报告：`bid_reports/report_YYYY-MM-DD.txt`（文字，适配 IM）、`report_YYYY-MM-DD.html`（浏览器）。\n\n### 2. 多通道推送（v1.2）\n首次 `python3 config_wizard.py` 配置；`pipeline.sh` 生成报告后自动推送。`push_manager.py` 支持 `test/history/stats/health-check/retry-failed`。关闭用 `pipeline.sh --no-push`。\n\n### 3. v1.5 新能力\n- **匹配度评分（A1）**：可投标按 0-100 分排序，等级 强烈推荐/建议跟/可投一般。报告直接显示分数。\n- **投标日历（A2）**：`python3 calendar.py <qual文件> --days 30` 看开标/截止日；`--remind` 对临近截止（默认48h）自动推送提醒。\n- **多维筛选（A4）**：规则库设 `region_priority.high` / `industry_categories`+`industry_priority` / `budget_priority`，运行时用 `--region/--industry/--budget-min/--budget-max` 过滤。\n- **规则编辑器（可视化）**：`python3 bidhunter.py rules edit` → http://localhost:8080，选行业模板、填能力词、实时试标、保存。\n- **诊断中心（A6）**：`python3 doctor.py` 输出带错误码（E001~E005 / W001~W004）的诊断与下一步。\n- **示例模式（A7）**：`python3 demo.py [--summary] [--calendar]` 用内置示例看完整效果。\n- **集中 FAQ（A8）**：`python3 faq.py <关键词>` 检索常见问题。\n- **平台扩展（A5）**：内置 3 适配器（cnooc/cebpubservice/ccgp）+ 自定义数据源 `sources.json`（json/rss/html 三种模式，零代码接入任意公开平台）。\n\n### 4. v2.0 本地 AI 增强（零云成本）\n```bash\npython3 bidhunter.py ai read 招标文件.pdf     # 解析+结构化抽取+风险扫描\npython3 bidhunter.py ai read 招标文件.pdf --llm   # 加 LLM 风险扫描\npython3 ai/analytics.py --days 30              # 本地业主/品类画像\n```\n调用你自己的 MiniMax API（仅耗余额），不外传数据到任何 BidHunter 云端（我们无云端）。\n\n### 5. v2.5 投标策略建议\n```bash\npython3 bidhunter.py ai advise 招标文件.pdf    # 资质自检+评分得分点+报价策略+时间节点\n```\n**合规边界**：只建议不代劳——不自动填报价、不伪造资质、不写技术方案。所有建议标注\"仅供参考，人工确认\"。\n\n### 6. v3.0 本地开放能力（零云成本子集）\n```bash\npython3 api_server.py --port 8765             # 本地查询 API（127.0.0.1，无云端）\npython3 webhook_publish.py qual_xxx.jsonl     # 把标讯签名推送到你自己的系统\n```\n> v3.0 原规划的云/SaaS 部分（多租户、第三方插件市场、数据市场、Salesforce/金蝶连接器）因涉及付费云基础设施，按成本约束未启用。本机 API + 签名 webhook 是其零成本替代。\n\n### 7. v3.5 合规红线引擎（零 API 成本）★\n\n找到标只是第一步，**交了标不被废**才是最后一公里。v3.5 把《招标投标法》《实施条例》《评标委员会和评标方法暂行规定》（12号令）蒸馏成机器可读的 **31 条法定红线**，本地扫描，**不调用任何 LLM，零 API 成本**。\n\n```bash\n# 扫招标文件：找出文件里埋了哪些\"雷\"（实质性要求、违规条款、致命形式要件）\npython3 bidhunter.py compliance scan 招标文件.pdf --mode tender\n\n# 扫投标文件：交标前最后一检，找自己文件里的致命项\npython3 bidhunter.py compliance scan 投标文件.pdf --mode bid\n\n# 交标前自查清单（31 条，逐条打勾）\npython3 bidhunter.py compliance checklist\n\n# 输出 JSON（供其他系统消费）/ 追加 LLM 深度扫描（耗 MiniMax 余额）\npython3 bidhunter.py compliance scan 招标文件.pdf --json\npython3 bidhunter.py compliance scan 招标文件.pdf --llm\n```\n\n**红线分类（31 条）**\n\n| 类 | 名称 | 条数 | 发生阶段 | 决定方 | 后果 |\n|---|---|---|---|---|---|\n| A | 拒收/不予受理 | 4 | 交标现场 | 招标人/代理机构 | 当场拒收，进不了评标 |\n| B | 否决投标 | 14 | 评标阶段 | 评标委员会 | 该份投标出局 |\n| C | 投标无效 | 4 | 全程 | 无需认定 | 相关投标**均**无效 |\n| D | 反向保护条款（盾牌） | 3 | 维权 | 投标人主张 | 可据此质疑/投诉 |\n| E | 多主体串标隔离 | 6 | 评审/调查 | 评标委员会/行政监督 | 视为串通，中标无效 |\n\n**三条最值钱的认知**（其余详见 `compliance/redlines.json`）：\n\n1. **多主体投同一标段，先查《实施条例》第34条**（C02）：单位负责人为同一人、或存在控股/管理关系的不同单位**不得**参加同一标段投标，违反则相关投标均无效。这是**资格硬禁止**，无需任何串通证据，且优先于一切串标推定。\n2. **细微偏差不影响投标有效性**（D02，12号令第26条）：个别漏项只会被要求补正，招标文件没规定量化标准的**不得扣分**。与\"重大偏差=否决\"严格区分——这条能救命。\n3. **标底不能作为否决依据**（D01，实施条例第50条）：招标文件若写\"报价超出标底±X%作废标处理\"，该条款**本身违法**，可据此质疑投诉。扫描器会自动识别此类违规条款并标为\"盾牌\"。\n\n**合规边界（与 v2.5 一致）**：\n- ✅ 做：法条索引、风险提示、自查清单、违规条款识别\n- ❌ 不做：法律意见、胜诉承诺、代填报价、伪造资质\n- ⚠️ 扫描结果**不构成法律意见**，最终判定以招标文件、评标委员会认定及有权机关解释为准。法规未给出量化标准的（如\"低于成本\"），本引擎**不设阈值**\n\n**深度审查联动**：本地扫描是\"浅层快速筛\"，需要逐条法理分析和举证策略时，联动蒸馏姊妹 skill（需另行安装）：`bid-rejection-guard`（25条红线深度审查）、`bid-price-redline`（低于成本举证自救）、`multi-entity-bid-isolation`（多主体串标隔离 10 条清单）。\n\n## 报价闸门（v2.7）—— 出价前必须过的四道算式卡\n\n找到标、保住标之后，**最贵的教训在报价上**：沿用旧价没换算规模、单价算错量级、毛利倒挂——错的数字会被下游当成可信基数一路沿用。\n\n```bash\n# 第一次填一次参数库（最低工资 / 毛利红线 / 容差），只写本机，不上传\npython3 bidhunter.py quote params\npython3 bidhunter.py quote params --show      # 查看 + 过期提醒（默认 90 天）\n\n# 跑闸门：给什么算什么，缺什么列什么\npython3 bidhunter.py quote check --labor --heads 7 --months 12 --cost 200000 --quote 260000\npython3 bidhunter.py quote check --prior-amount 600000 --prior-scale 300 --new-scale 60 --quote 120000\npython3 bidhunter.py quote check --help\npython3 bidhunter.py quote --selftest\n```\n\n**四道算式卡**（任一道不过 → **禁止输出结论金额**）：\n\n| 卡 | 名称 | 判据 |\n|---|---|---|\n| C-1 | 品类清算价筛查 | 对手地板价 ≈ 当地月最低工资 × 人数 × 月数 × (1.10~1.25)。我方合规成本 ≥ 地板价下限 → 判「结构性陪跑」，直接不投 |\n| C2 | 规模换算（线性校验） | 新金额 ≈ 旧金额 × 新规模 ÷ 旧规模，偏差超容差即卡住——防的就是沿用旧价没换算 |\n| C3 | 单位单价校验 | 单价 = 总价 ÷ 数量，越出品类单价带即卡住 |\n| M1 | 毛利红线 | 毛利率 = (总价 − 成本) ÷ 总价，低于红线不得出价 |\n\n外加 5 项**算式扫不出来、必须人工确认**的核对卡：条款逐字读完、市场价带反推、服务模式逐项加减、敏感性分析覆盖全部变量、成本口径与服务口径配套。\n\n**闸门铁律**：\n- 结论只有三种：`已过闸门` / `禁止出价` / `参数待补`\n- **只有「已过闸门」才回显金额**；另外两种只给\"卡在哪 + 缺什么参数\"\n- 缺参数时**只允许交成本模型框架与参数待补清单，不得交带金额的报价函**\n- 参数库在 `~/.config/bidhunter/quote_params.json`（权限 600）；最低工资随年度调整，超期会自动提醒\n\n**边界**：闸门只做算式校验与清单提示，**不产生报价意见、不替代人工判断**，也不联网取数。\n\n## 系统组件（位于 `scripts/`）\n\n| 文件 | 作用 | 版本 |\n|---|---|---|\n| `bid_monitor.sh` | 采集（含自定义数据源加载） | base+A5 |\n| `qual_rules.json` | 资质规则库（**必须自定义**） | base+A4字段 |\n| `qual_check.py` | 比对引擎 + A1 评分/预算/行业提取 | v1.5 |\n| `report_text.py` / `report_html.py` | 文字/HTML 简报（含评分展示） | v1.5 |\n| `push_manager.py` / `config_wizard.py` | 推送+配置向导 | v1.2 |\n| `calendar.py` | A2 投标日历/倒计时提醒 | v1.5 |\n| `filter_multi.py` | A4 多维筛选 | v1.5 |\n| `rule_editor.py` | 零代码规则编辑器（HTTP） | v1.5 |\n| `doctor.py` | A6 诊断中心 | v1.5 |\n| `demo.py` + `samples/` | A7 示例模式 | v1.5 |\n| `faq.py` + `docs/FAQ.md` | A8 集中 FAQ | v1.5 |\n| `bidhunter.py` | A9 统一命令入口 | v1.5 |\n| `custom_source.py` + `sources.example.json` | A5 自定义数据源 | v1.5 |\n| `ai/minimax_client.py` | MiniMax 客户端（urllib，零依赖） | v2.0 |\n| `ai/doc_parser.py` | B1 标书解析 + **v2.8 结构感知分片 segment() + 覆盖率统计** | v2.0/v2.8 |\n| `ai/clause_extractor.py` | B1 条款抽取（**v2.8 分片全覆盖 + 规则引擎兜底 + 评分点逐项映射 + 分值守恒校验**） | v2.0/v2.8 |\n| `ai/risk_scanner.py` | B2 风险条款识别 | v2.0 |\n| `ai/doc_reader.py` | B1 总装：AI 速读 | v2.0 |\n| `ai/analytics.py` | A3 业主/品类画像 | v2.0 |\n| `ai/bid_advisor.py` | v2.5 投标策略建议（**v2.8 修 tuple 传参 bug + 无 key 降级**） | v2.5/v2.8 |\n| `api_server.py` / `webhook_publish.py` | v3.0 本地开放能力 | v3.0 |\n| `compliance/redlines.json` | C1 法定红线规则库（31条：A4/B14/C4/D3/E6） | v3.5 |\n| `compliance/compliance_scanner.py` | C1 合规红线扫描引擎（**v2.8 修 PDF/DOCX 静默失效 + LLM 分片**） | v3.5/v2.8 |\n| `quote_gate.py` | v2.7 报价闸门引擎（四道算式卡 + 5 项人工核对卡，零依赖零联网） | v2.7 |\n| `quote/gate.json` | v2.7 闸门规则与阈值（阈值数据化，改阈值不必改代码） | v2.7 |\n| `material_gap.py` | **v2.8 待补材料清单（G1）+ 零响应检测（G2），纯规则零 API** | v2.8 |\n\n## 已知坑点\n\n- **IM 发文件失败**：个人 IM 不支持发文件，只能文字。可视化网页供电脑浏览器看。\n- **list API 无截止日**：部分平台返回仅 id/title，截止日需 detail 接口（常 401），故只采集当天近似；日历日期从标题解析，未含明确日期的标归入\"待核实截止日\"。\n- **IP 限流**：连发约 20 次后可能 401/403，翻页 sleep 2s + 失败重试冷却 10s。\n- **匹配边界**：边界感知规则会挡掉词中误匹配（如\"电气设备\"里的\"电气\"因前有 CJK 被挡属正常防误匹配）。能力词尽量让其出现在词首边界可稳定命中。\n- **AI 依赖**：v2.0/v2.5 需配置 MiniMax API Key；未配置时 AI 功能自动跳过。**v2.8 起不配置也能出完整简报**（规则引擎兜底），只损失策略建议的文字部分。\n- **标书解析**：最佳效果需 `pip install PyPDF2 python-docx`（可选）；未装时 PDF 走正则降级、DOCX 可能解析不全。\n- **纯扫描件无文字层**：v2.8 起会明确报错并提示需 OCR，**不再静默降级为\"读了但其实没读\"**。\n- **覆盖率标注**：v2.8 起所有读标输出都带 `coverage_pct`。**若显示覆盖率明显低于 100%（例如文件解析后只剩零散片段），结论不可信，须换解析后端或先 OCR。**\n\n## 反馈（零成本，30 秒）\n\n| 方式 | 怎么用 | 说明 |\n|---|---|---|\n| **快速反馈** | `python3 bidhunter.py feedback` | 交互式问三句 → 自动格式化 → 写进剪贴板 → 打开平台评论页，粘贴即可 |\n| SkillHub 评论区 | <https://skillhub.cn/skills/user_7a89592b/bidhunter> | 公开讨论，作者可见 |\n| ClawHub 评论区 | <https://clawhub.ai/419597334-sudo/bidhunter> | 公开讨论，作者可见 |\n\n> 反馈模块**不上传任何数据**：全程只在本机生成文本、写剪贴板、唤起你的浏览器，无任何后端与网络请求。\n\n## 参考文档\n\n- `references/platforms.md`：支持平台清单、自定义数据源指南\n- `references/filter_rules.md`：筛选规则结构\n- `references/field_standard.md`：标讯字段标准\n- `docs/FAQ.md`：常见问题（`faq.py` 检索）\n- `samples/`：示例规则与模板（demo / 行业模板）\n\nFile v2.9.0:scripts/sources.presets/README.md\n\n# 采集源配置指引\n\n> **为什么本 skill 不内置任何真实平台源？**\n>\n> 内置源一旦失效（改版 / 加鉴权 / 关停），用户首跑直接失败，反而比没有更糟。\n> 所以 BidHunter 的做法是：**给模板 + 给清单，不给现成答案**——你把要盯的平台填进来，\n> 它就是你自己的监控器，不依赖我们维护。\n\n---\n\n## 三步接入\n\n1. **选模式**：`json_api.json` / `rss.json` / `html_list.json`，按目标平台挑一个\n2. **改 URL 和字段**：把模板里的 `YOUR-DOMAIN` 换成真实域名，按返回结构改 `items_path` / `fields`\n3. **合并进 `sources.json`**：把改好的对象放进 `sources` 数组（可以放多个平台）\n\n`init` 已经帮你在 `scripts/sources.json` 生成了骨架，直接往 `sources` 数组里加即可\n（`bid_monitor.sh` 会自动加载 `scripts/sources.json`）。\n\n---\n\n## 常见平台清单（自行确认当前网址与可用性）\n\n> 下列仅为**品类提示**，具体网址与接口请以平台当前实际情况为准，本 skill 不保证其可用性。\n\n| 品类 | 说明 |\n|---|---|\n| 中国政府采购网 | 中央及地方政采公告，通常有列表页，部分地区提供 RSS |\n| 全国公共资源交易平台 | 各省有独立子站，按你所在省找对应入口 |\n| 省级 / 市级公共资源交易中心 | 工程、采购、土地矿权分类，多数有 HTML 列表页 |\n| 央企电子采购平台 | 能源、通信、建筑类央企各有自建平台，需自行注册查看公开公告区 |\n| 行业性招标平台 | 如机电产品、医疗器械等垂类平台 |\n\n**找源的小技巧**：打开平台列表页 → F12 → Network → 翻一页 → 看哪个请求返回了公告数据。\n那个请求的 URL 就是你要的 `url`，返回的 JSON 结构就是 `items_path` / `fields` 的依据。\n\n---\n\n## 合规提醒（重要）\n\n- 采集前确认目标站点的 `robots.txt` 与内容版权声明\n- 只采集**公开可访问**的页面，不要尝试绕过登录或鉴权\n- 控制请求频率，避免对目标站点造成压力\n- 采集内容仅供内部商机研判，二次传播前请自行评估版权风险\n\n---\n\n## 不想配源？先跑起来\n\n配源不是必须的。丢一份招标文件进来就能出结果：\n\n```bash\npython3 bidhunter.py paste <招标文件.pdf>\n```\n\n走合规红线扫描，**不需要 AI key、不需要采集源、离线可跑**，31 条法定废标红线本地扫描。\n\nFile v2.9.0:_meta.json\n\n{\n  \"ownerId\": \"kn79pvem3czfg69e3mx7gezyp1865jf9\",\n  \"slug\": \"bidhunter\",\n  \"version\": \"2.9.0\",\n  \"publishedAt\": 1791279871108\n}\n\nFile v2.9.0:references/field_standard.md\n\n# 标讯字段标准化 Schema\n\n## 核心字段定义\n\n| 字段名 | 类型 | 说明 | 示例 |\n|---|---|---|---|\n| `bid_id` | string | 标讯唯一标识（平台+原始ID） | `cnooc_12345` |\n| `source_platform` | string | 来源平台编码 | `cnooc` |\n| `source_url` | string | 原始链接 | `https://...` |\n| `title` | string | 项目名称 | `渤海某油田FPSO工程EPC总包` |\n| `content_text` | string | 正文纯文本（前5000字） | `...` |\n| `content_html` | string | 原始HTML（存档） | `...` |\n| `publish_time` | string | 公告发布时间（ISO 8601） | `2024-03-01T10:00:00+08:00` |\n| `deadline_time` | string | 投标截止时间 | `2024-03-15T09:00:00+08:00` |\n| `bid_open_time` | string | 开标时间 | `2024-03-15T09:30:00+08:00` |\n| `budget_amount` | number | 预算金额（元，标准化） | `420000000` |\n| `budget_amount_raw` | string | 原始金额字符串 | `4.2亿元` |\n| `currency` | string | 币种 | `CNY` |\n| `purchaser_name` | string | 采购单位名称（标准化） | `某某有限公司天津分公司` |\n| `purchaser_address` | string | 采购单位地址 | `天津市滨海新区...` |\n| `purchaser_contact` | string | 联系人及方式 | `张三 022-XXXX` |\n| `agency_name` | string | 招标代理机构 | `某某招标有限公司` |\n| `bid_type` | string | 项目类型编码 | `engineering` / `goods` / `service` |\n| `bid_method` | string | 采购方式编码 | `public_tender` / `invitation` / `inquiry` |\n| `region_code` | string | 地区编码（国家统计局6位码） | `120116` |\n| `industry_code` | string | 行业编码 | `B07` |\n| `qualification_requirements` | array | 资质要求 | `[\"一级资质\", \"安全生产许可证\"]` |\n| `attachment_list` | array | 附件清单 | `[{\"name\": \"招标文件.pdf\", \"size\": 10240000, \"url\": \"...\"}]` |\n| `status` | string | 标讯状态 | `new` / `updated` / `expired` / `opened` / `cancelled` |\n| `crawl_time` | string | 采集时间 | `2024-03-01T10:05:00+08:00` |\n| `crawl_version` | string | 解析规则版本 | `1.0` |\n\n## 判定结果字段\n\n| 字段名 | 类型 | 说明 | 取值 |\n|---|---|---|---|\n| `verdict` | string | 资质判定结果 | `investable` / `not_investable` / `needs_review` / `skip` |\n| `reason` | string | 判定原因 | `主体能力匹配：广告, 活动` / `红色预警：建筑施工` |\n| `assigned_entity` | string | 归属投标主体 | `entity_a` / `entity_b` |\n| `assigned_entity_name` | string | 归属投标主体名称 | `主体A（传媒/活动类）` |\n| `matched_capabilities` | array | 匹配到的能力词 | `[\"广告\", \"活动策划\"]` |\n| `region_info` | object | 地区信息 | `{\"is_priority\": true, \"region\": \"天津\"}` |\n\n## 金额标准化规则\n\n原始金额字符串 → 标准化元数值：\n\n| 原始格式 | 标准化结果 |\n|---|---|\n| `4.2亿元` | `420000000` |\n| `500万元` | `5000000` |\n| `300万` | `3000000` |\n| `1.2亿` | `120000000` |\n| `未填写` / 空 | `null` |\n\n## 地区编码\n\n使用国家统计局 6 位行政区划编码：\n\n| 编码 | 地区 |\n|---|---|\n| `110000` | 北京市 |\n| `120000` | 天津市 |\n| `310000` | 上海市 |\n| `440000` | 广东省 |\n| `510000` | 四川省 |\n| ... | ... |\n\n完整编码表参考国家统计局最新版行政区划代码。\n\n## 行业分类编码\n\n采用 GB/T 4754《国民经济行业分类》：\n\n| 编码 | 行业 |\n|---|---|\n| `B07` | 石油和天然气开采业 |\n| `B08` | 黑色金属矿采选业 |\n| `E48` | 土木工程建筑业 |\n| `I63` | 电信、广播电视和卫星传输服务 |\n| ... | ... |\n\nFile v2.9.0:references/filter_rules.md\n\n# 筛选规则结构与条件维度\n\n## 规则组结构\n\n规则组支持多组并行运行：\n\n```\n规则组（多组并行）\n├── 规则组名称：如\"海上工程总包\"\n├── 启用状态：启用/停用\n├── 匹配逻辑：AND（全部满足）/ OR（任一满足）\n├── 筛选条件（见下表）\n├── 输出设置：推送通道 + 输出格式\n└── 优先级：1-10（同一条标讯匹配多规则时，按优先级去重）\n```\n\n## 资质判定优先级（高 → 低）\n\n1. **★服务类型门禁**（v1.2）：采购标的的服务类型优先于项目名里的动词\n2. **★子串红警**（v1.2）：不受 CJK 边界限制的强制拦截词\n3. **special_rules 覆盖**：如\"某类标外找资质可投\"、\"某类标垫资不参与 → skip\"\n4. **红色预警命中** → 不可投 + 原因\n5. **主体能力匹配** → 可投（按主体能力词归属投标公司）\n6. **都不命中** → 需确认\n\n## ★v1.2 修正（2026-09-11，案例 614535）\n\n### 一、服务类型门禁 service_type_gate\n\n**采购标的的服务类型，优先于项目名里的动词关键词。**\n\n项目名常把真正的服务类型藏在修饰语后面：\n\n| 项目名 | 真正的标的 | 错误判定 | 正确判定 |\n|---|---|---|---|\n| 楼宇安全整治**维修改造**项目**监理服务** | 监理服务 | 按\"维修\"命中→可投 | **不可投**（无监理资质） |\n| XX项目**设计服务** | 设计服务 | 按\"施工/改造\"命中 | 需确认 |\n\n配置项 `service_type_gate.blocked_types`：监理（不可投）／设计·勘察／检测／审计·评估·造价咨询·招标代理（需确认）。\n**资质序列不可跨用**：施工总承包资质 ≠ 监理资质；且施工单位投同一项目监理通常有**回避要求**。\n\n### 二、匹配边界陷阱（重要）\n\n`smart_match` 的左边界规则要求**关键词前一字符不得为中日韩字符**，导致出现在标题**中部**的关键词永远匹配不到：\n\n- ❌ \"…零星**维修**服务\" → \"维修\"前是\"星\"→ 漏判（该投的标被判\"需确认\"）\n- ❌ \"…消防设施改造\" → \"消防\"前是\"厂\"→ 红警漏拦\n\n**修正**：\n1. `_match_loose: true` → 能力词改用**纯子串匹配**（漏判代价 > 误判代价，假阳性由 `_exclude_contexts` 过滤）\n2. `substring_alerts` → 高风险资质词（消防/电梯/压力容器/特种设备/爆破/危险品/劳务派遣/保安服务/测绘/勘察/钻井/修井等）强制子串拦截\n3. 已知保留项：`skip_procurement` 的\"采购\"**仍用严格匹配**——因\"XX服务采购\"是服务标常见命名，宽松会误杀大量可投标；若要拦物资采购标，请改用\"物资采购/采购项目/采办\"等更特异的关键词\n\n### 三、自检命令\n\n```bash\npython3 qual_check.py --validate-rules qual_rules.json   # 规则库体检\n```\n\n判定回归用例（改规则后必跑）：监理标→不可投、消防标→不可投、设计标→需确认、零星维修标→可投。\n\n## 筛选条件维度\n\n| 维度 | 条件类型 | 运算符 | 输入示例 |\n|---|---|---|---|\n| 关键词 | 标题包含 | 包含任意/全部包含/不包含 | `FPSO OR \"浮式生产\" NOT \"退役\"` |\n| 关键词 | 正文包含 | 同上 | `\"一级资质\" AND \"安全生产许可证\"` |\n| 关键词 | 附件名称包含 | 包含任意 | `技术规格书 OR 图纸` |\n| 地区 | 项目所在地 | 省/市多选、排除、半径圈选 | `天津市, 青岛市, 半径50km` |\n| 地区 | 采购单位所在地 | 同上 | `北京市海淀区` |\n| 金额 | 预算金额 | ≥ / ≤ / 区间 / 未填写 | `500万-5000万` |\n| 金额 | 最高限价 | 同上 | `≥1亿` |\n| 时间 | 公告发布时间 | 近N天 / 日期范围 | `近7天` |\n| 时间 | 投标截止时间 | ≥N天后 / 日期范围 | `截止≥7天后` |\n| 时间 | 开标时间 | 同上 | `2024-03-01 至 2024-06-30` |\n| 项目属性 | 项目类型 | 多选 | `工程, 货物` |\n| 项目属性 | 采购方式 | 多选 | `公开招标, 邀请招标` |\n| 项目属性 | 行业领域 | 多选 | `石油化工, 海洋工程` |\n| 资质要求 | 要求资质 | 包含/不包含 | `海洋石油工程专业承包一级` |\n| 资质要求 | 资质等级 | ≥ / = / ≤ | `≥二级` |\n| 业主画像 | 采购单位 | 白名单/黑名单 | `包含: 某某分公司` |\n| 业主画像 | 历史合作 | 是否合作过 | `仅显示合作过业主` |\n\n## 规则冲突处理\n\n当一条标讯同时匹配多个规则组时：\n\n1. **分别输出**（默认）：用户收到多条推送，标注所属规则组\n2. **仅保留高优先级**：配置去重模式\n3. **合并为一条**：标注\"多规则匹配\"\n\n## qual_rules.json 结构说明\n\n```json\n{\n  \"version\": \"1.0\",\n  \"entities\": {\n    \"entity_a\": {\n      \"name\": \"主体A名称\",\n      \"capabilities\": [\"关键词1\", \"关键词2\"],\n      \"note\": \"替换为营业执照经营范围关键词\"\n    }\n  },\n  \"red_alerts\": [\"车辆维修\", \"劳务派遣\", \"...\"],\n  \"special_rules\": [\n    {\n      \"id\": \"rule_id\",\n      \"description\": \"规则描述\",\n      \"match_keywords\": [\"关键词\"],\n      \"action\": \"skip|investable|not_investable\",\n      \"assigned_entity\": \"entity_a\",\n      \"reason\": \"原因说明\"\n    }\n  ],\n  \"skip_keywords_result\": [\"结果公示\", \"中标公示\"],\n  \"region_priority\": {\n    \"high\": [\"天津\", \"青岛\"],\n    \"note\": \"按需填写重点地区\"\n  }\n}\n```\n\n## 推送策略\n\n| 策略 | 说明 | 配置 |\n|---|---|---|\n| 即时推送 | 单条标讯匹配后立即推送 | 仅高优先级规则组/紧急标讯 |\n| 定时汇总 | 按固定时间合并推送 | 每日9:00 / 每周一9:00 |\n| 智能合并 | 同规则组多条标讯合并为一条消息 | 阈值：5条或间隔30分钟 |\n| 免打扰时段 | 指定时间不推送 | 默认22:00-08:00 |\n| 去重窗口 | 同一标讯N天内不重复推送 | 默认30天 |\n\nFile v2.9.0:references/platforms.md\n\n# 支持平台清单与配置\n\n## 内置平台适配器\n\n以下平台已在 `bid_monitor.sh` 中实现采集适配器：\n\n| 平台编码 | 平台名称 | 网址 | 采集方式 | 认证要求 | 状态 |\n|---|---|---|---|---|---|\n| `cnooc` | 中海油采办业务管理与交易系统 | bid.cnooc.com.cn | API (JSON) | ~~免登录~~ **现需鉴权** | 🔴 **2026-09-02 实测失效** |\n| `cebpubservice` | 中国招标投标公共服务平台 | ctbpsp.com | API (JSON POST) | 免登录 | 🔴 **2026-09-02 实测失效**（404） |\n| `ccgp` | 中国政府采购网 | ccgp.gov.cn | HTML 解析 | 免登录 | ✅ 可用 |\n\n### ⚠️ 数据源实测状态（2026-09-02 更新）\n\n三个内置源实测结果，**两个已失效**，依赖它们的每日简报会漏标：\n\n| 源 | 实测现象 | 根因 |\n|---|---|---|\n| `cnooc` | curl 请求稳定返回 **401 Authorization Required**（nginx 层）；真实浏览器访问返回 **502 Bad Gateway**。`/`、`/home/`、`/api/v1/bid/list` 全路径均不可达 | 网关/WAF 拦截（DNS 已 CNAME 至 `bid.cnooc.com.cn.wsdvs.com`），源站对当前网络无响应 |\n| `cebpubservice` | POST `/cutomNoticeApi/getNoticeList` → **404** | 上游接口路径已变更 |\n| `ccgp` | HTTP 200，可访问 | ✅ 正常。但注意：**中海油/央企属企业招标，不走政采**，搜\"海油\"关键词返回 0 条，无法作为海油标的替代源 |\n\n**处置建议：**\n1. `cnooc` 适配器暂时停用，避免静默返回 0 条造成\"今天没标\"的误判\n2. 中海油标的替代路径：① 用已登录浏览器会话 + 浏览器自动化抓取（需先确认本地网络能否访问）② 第三方招标聚合平台 ③ 海油各子公司自有发布渠道\n3. 恢复抓取前，先用 `curl -o /dev/null -w \"%{http_code}\" https://bid.cnooc.com.cn/` 探活，返回 200 再启用\n\n## 计划适配平台\n\n以下平台已识别但尚未实现适配器，可按\"自定义数据源\"流程接入：\n\n| 平台类别 | 平台名称 | 网址 | 技术难点 | 优先级 |\n|---|---|---|---|---|\n| 央企招采 | 中石油电子招标投标平台 | bid.cnpcbidding.com | 需注册账号 | P0 |\n| 央企招采 | 中石化物资采购电子商务平台 | sourcing.sinopec.com | 需企业认证 | P0 |\n| 央企招采 | 国家电网电子商务平台 | ecp.sgcc.com.cn | 需电子钥匙 | P1 |\n| 央企招采 | 中国南方电网阳光电子商务平台 | bidding.csg.cn | 需注册 | P1 |\n| 能源电力 | 中国华能集团电子商务平台 | ec.chng.com.cn | 需注册 | P1 |\n| 能源电力 | 中国大唐集团电子采购平台 | cdt-ec.com | 需注册 | P1 |\n| 能源电力 | 国家电投电子商务平台 | eptp.com.cn | 需注册 | P1 |\n| 能源建设 | 中国能建电子采购平台 | ec.ceec.net.cn | 需注册 | P1 |\n| 能源建设 | 中国电建招标与采购网 | powerchina.cn | 需注册 | P1 |\n| 公共资源 | 全国公共资源交易平台 | ggzyjyw.com | 数据聚合，需解析 | P0 |\n| 公共资源 | 各省市公共资源交易中心 | 分省平台 | 模板差异极大 | P1 |\n| 行业垂直 | 军队采购网 | plap.mil.cn | 需军队供应商库资质 | P2 |\n| 行业垂直 | 铁路建设工程网 | railway.cn | 需注册 | P2 |\n| 行业垂直 | 民航专业工程招标投标管理系统 | caac.gov.cn | 访问受限 | P2 |\n\n## 平台适配器开发规范\n\n每个适配器需实现一个 `fetch_<platform>()` bash 函数：\n\n1. **输入**：`$1` = 目标日期 (YYYY-MM-DD)\n2. **输出**：JSON lines 到 stdout，每行一条公告\n3. **格式**：\n   ```json\n   {\n     \"id\": \"公告唯一标识\",\n     \"title\": \"项目名称\",\n     \"source\": \"平台编码\",\n     \"url\": \"详情页链接\",\n     \"publish_time\": \"发布时间\"\n   }\n   ```\n4. **注意事项**：\n   - 翻页时 sleep 2s 防限流\n   - 401/403 时冷却 10s 重试一次\n   - 过滤结果公示类（中标/成交公告）\n   - 只采集当天发布（近似排除已开标标）\n\n## 自定义数据源（v1.5 新增 · 零代码扩平台）\n\n不想写 bash 适配器？用 `sources.json` 配置即可接入任意平台。`bid_monitor.sh` 运行时若发现 `sources.json` 会自动加载。\n\n**步骤**：\n1. 复制 `scripts/sources.example.json` → `scripts/sources.json`\n2. 按你的平台改 `name` / `url` / `mode` / `fields`\n3. 支持三种模式：\n   - `json`：接口返回 JSON，`items_path` 指向数组路径，`fields` 映射字段\n   - `rss`：标准 RSS/Atom（`item`/`link`/`title`/`pubDate`）\n   - `html`：列表页，自动抓取含「招标/采购/投标」等关键词的 `<a>` 链接\n4. 测试：`bash bid_monitor.sh --fresh`（会自动包含 custom 源）\n\n> 示例（某gov平台 JSON 接口）：\n> ```json\n> {\"name\":\"my_gov\",\"mode\":\"json\",\"url\":\"https://x/api/notice?date={DATE}\",\n>  \"items_path\":\"data.list\",\"fields\":{\"id\":\"id\",\"title\":\"title\",\"url\":\"url\"},\n>  \"url_prefix\":\"https://x/detail?id=\"}\n> ```\n\n## 计划适配平台（可经自定义数据源或适配器接入）\n\n| 平台类别 | 平台名称 | 网址 | 接入方式 | 优先级 |\n|---|---|---|---|---|\n| 央企招采 | 中石油电子招标投标平台 | bid.cnpcbidding.com | 账号/自定义json | P0 |\n| 央企招采 | 中石化物资采购电子商务平台 | sourcing.sinopec.com | 企业认证/自定义 | P0 |\n| 央企招采 | 国家电网电子商务平台 | ecp.sgcc.com.cn | 电子钥匙/自定义 | P1 |\n| 央企招采 | 中国南方电网阳光电子商务平台 | bidding.csg.cn | 注册/自定义 | P1 |\n| 能源电力 | 中国华能/大唐/国家电投电子商务平台 | 见各官网 | 注册/自定义 | P1 |\n| 能源建设 | 中国能建/中国电建招标采购网 | ec.ceec.net.cn / powerchina.cn | 注册/自定义 | P1 |\n| 公共资源 | 全国公共资源交易平台 | ggzyjyw.com | 数据聚合/自定义html | P0 |\n| 公共资源 | 各省市公共资源交易中心 | 分省平台 | 模板差异大/自定义 | P1 |\n| 行业垂直 | 军队采购网 | plap.mil.cn | 军队供应商库 | P2 |\n| 行业垂直 | 铁路建设工程网 / 民航专业工程系统 | railway.cn / caac.gov.cn | 注册/受限 | P2 |\n\n> v1.5 起\"平台覆盖\"短板通过「自定义数据源」机制补强：内置 3 个适配器 + 用户可零代码接入任意公开接口。需要官方内置某平台可在 ClawHub/SkillHub 反馈，我们按 P0 优先级实现。\n\n## 适配器开发规范（进阶）\n\n每个 bash 适配器需实现 `fetch_<platform>()` 函数（详见上文\"平台适配器开发规范\"）。自定义数据源已覆盖绝大多数场景，仅在接口鉴权复杂时才需写适配器。\n\n## detail_url_template\n\n各平台详情页链接格式：\n\n| 平台 | 模板 |\n|---|---|\n| cnooc | `https://bid.cnooc.com.cn/home/#/newsAlertDetails?index=0&childrenActive=1&id={ID}&type=null` |\n| cebpubservice | `https://ctbpsp.com/#/noticeDetail?id={ID}` |\n| ccgp | 从列表页 HTML 中直接提取 |\n\n## 数据源配置项\n\n每个平台适配器支持的配置：\n\n- **启用/停用**：在 `PLATFORMS` 数组中增删\n- **监控范围**：在 `fetch_<platform>()` 函数中调整 API 参数\n- **采集深度**：标题+摘要（默认）/ 全文+附件列表（需 detail 接口）\n- **更新频率**：通过定时任务配置（默认每日）\n- **认证配置**：免登录（默认）/ 账号 / CA证书（需自行实现）\n\nFile v2.9.0:references/setup-guide.md\n\n# BidHunter 配置指南（依赖型 Skill 标准件）\n\n本 Skill 核心流程（采集、资质比对、评分、日历、筛选、规则编辑器、诊断、FAQ、示例、统一入口）**零外部依赖**，开箱即用。以下仅配置「可选增强」。\n\n环境检查（只读，不泄露凭据值）：\n\n```bash\npython3 scripts/check_environment.py\n```\n\n---\n\n## 一、资质规则库（必填，非外部依赖）\n\n编辑 `scripts/qual_rules.json` 填入你的投标主体与能力词：\n\n- 零代码：运行 `python3 bidhunter.py rules edit` → 浏览器图形化编辑，内置「能源/建筑/IT/市政」行业模板一键预填\n- 或复制 `scripts/samples/demo_rules.json` 改\n- 校验：`python3 qual_check.py --validate-rules qual_rules.json`\n\n不填则 `doctor` 会报 E002（仍为示例占位），基础采集可用但比对全为「需确认」。\n\n---\n\n## 二、MiniMax API（可选 · v2.0+ AI 能力）\n\n依赖 id：`minimax-api`\n\n用途：AI 速读标书、风险条款识别、投标策略建议。仅消耗你的 API 余额，无云端。\n\n官方入口：\n\n- 产品主页：https://www.minimaxi.com/\n- 开放平台登录：https://platform.minimaxi.com/login\n- 接口密钥页：https://platform.minimaxi.com/user-center/basic-information/interface-key\n- 接口文档：https://platform.minimaxi.com/document/guides/chat-model/V2\n\n1. 注册并登录开放平台账号\n2. 获取密钥：账户管理 → 接口密钥 → 创建密钥（只申请文本模型调用权限）\n3. 写入本地配置文件（权限自动 600，密钥不回显、不上传）：\n\n   ```bash\n   mkdir -p ~/.config/bidhunter\n   cat > ~/.config/bidhunter/ai.json <<'EOF'\n   {\"api_key\":\"你的MiniMaxKey\",\"group_id\":\"可选\",\"model\":\"MiniMax-M2.7\",\"base_url\":\"https://api.minimaxi.com/v1/chat/completions\"}\n   EOF\n   chmod 600 ~/.config/bidhunter/ai.json\n   ```\n\n4. 最小验证：\n\n   ```bash\n   python3 -c \"from scripts.ai.minimax_client import MiniMaxClient; MiniMaxClient.from_config(); print('OK')\"\n   ```\n\n安全：密钥仅存本地文件；轮换/撤销在 MiniMax 控制台操作；本 Skill 不向任何第三方发送你的数据。\n\n降级：未配置时 AI 功能自动跳过，基础采集研判不受影响。\n\n---\n\n## 三、多通道推送（可选 · v1.2）\n\n用途：把日报推到钉钉 / 企业微信 / 邮件。本项是纯本地配置能力，不绑定任一第三方服务账号，因此未列入依赖清单；缺失时只影响推送，不影响核心流程。\n\n```bash\npython3 config_wizard.py        # 交互式，未通过连通性测试不写入\npython3 config_wizard.py --show # 脱敏查看当前配置\n```\n\n- 钉钉：群设置 → 智能群助手 → 自定义机器人 → 加签（推荐）\n- 企业微信：群聊 → 群机器人 → 复制 Webhook\n- 邮件：SMTP（如 QQ 邮箱用授权码，非登录密码）\n\n配置文件 `~/.config/bidhunter/push.json` 权限 600，密码/密钥脱敏显示。\n\n降级：未配置时仅生成报告文件，不推送。\n\n---\n\n## 四、标书解析依赖（可选 · v2.0 最佳效果）\n\n依赖 id：`pdf-docx-runtime`\n\n官方包页：https://pypi.org/project/PyPDF2/ 、 https://pypi.org/project/python-docx/\n\n```bash\npip install -r requirements.txt   # PyPDF2 + python-docx\n```\n\n降级：未装时 PDF 走正则抽取（部分文本）、DOCX 可能解析不全，仍走 AI 流程但质量下降。\n\n---\n\n## 五、常见问题\n\n- **Q：必须联网吗？** 采集需要访问招投标平台；其余（比对/评分/日历/规则编辑/诊断/FAQ）全本地。\n- **Q：会外传我的标讯或资质吗？** 不会。所有比对/评分/画像在本地完成；AI 仅把标书文本发往你自己的 MiniMax Key 对应的 API。\n- **Q：配置失败会破坏什么吗？** 不会。检查只读，写入前均连通性测试或原子备份。\n\nFile v2.9.0:scripts/compliance/redlines.json\n\n{\n  \"schema\": \"bidhunter-compliance-redlines/v1\",\n  \"version\": \"3.5.0\",\n  \"updated\": \"2026-09-08\",\n  \"legal_basis\": [\n    \"《中华人民共和国招标投标法》（2017修正）\",\n    \"《中华人民共和国招标投标法实施条例》（2019修订）\",\n    \"《评标委员会和评标方法暂行规定》（七部委12号令，2013修订）\"\n  ],\n  \"disclaimer\": \"本规则库为法规条文的机器可读索引，用于本地风险提示。不构成法律意见，最终判定以招标文件、评标委员会认定及有权机关解释为准。法规未给出量化标准的（如『低于成本』），本库不设阈值。\",\n  \"usage_note\": \"tender_patterns 用于扫描【招标文件】找埋雷；bid_patterns 用于扫描【投标文件】找致命项；manual=true 表示纯人工核对项，正则扫不出来。\",\n\n  \"categories\": {\n    \"A\": {\"name\": \"拒收/不予受理\", \"phase\": \"交标现场\", \"decider\": \"招标人/代理机构\", \"consequence\": \"当场拒收，进不了评标\"},\n    \"B\": {\"name\": \"否决投标\", \"phase\": \"评标阶段\", \"decider\": \"评标委员会\", \"consequence\": \"该份投标出局\"},\n    \"C\": {\"name\": \"投标无效\", \"phase\": \"全程（法定自始无效）\", \"decider\": \"无需认定\", \"consequence\": \"相关投标均无效\"},\n    \"D\": {\"name\": \"反向保护条款（盾牌）\", \"phase\": \"维权\", \"decider\": \"投标人主张\", \"consequence\": \"可据此质疑/投诉\"},\n    \"E\": {\"name\": \"多主体串标隔离\", \"phase\": \"评审/调查\", \"decider\": \"评标委员会/行政监督\", \"consequence\": \"视为串通投标，中标无效\"}\n  },\n\n  \"redlines\": [\n    {\n      \"id\": \"A01\", \"category\": \"A\", \"name\": \"逾期送达 / 未在截止时间前送达\",\n      \"legal_basis\": \"实施条例第36条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"投标截止(时间|日期)\", \"递交(投标)?文件(的)?截止\", \"逾期(送达|递交)\"],\n      \"bid_patterns\": [],\n      \"check\": \"核对招标文件载明的截止时间与递交方式（现场/邮寄/电子平台），预留≥2小时缓冲\",\n      \"remedy\": \"无。逾期即拒收，不可申辩。建议交标前一日完成装订\"\n    },\n    {\n      \"id\": \"A02\", \"category\": \"A\", \"name\": \"未通过资格预审仍提交投标文件\",\n      \"legal_basis\": \"实施条例第36条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"资格预审\", \"通过资格预审的申请人\", \"未通过资格预审\"],\n      \"bid_patterns\": [],\n      \"check\": \"确认已收到资格预审合格通知书；未通过者不得投标\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"A03\", \"category\": \"A\", \"name\": \"未按招标文件要求密封 / 标记\",\n      \"legal_basis\": \"实施条例第36条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"密封\", \"封套\", \"标记\", \"加盖(骑缝|密封)章\"],\n      \"bid_patterns\": [],\n      \"check\": \"逐项比对密封、封套标注、骑缝章、正副本份数要求\",\n      \"remedy\": \"交标现场前可补救；一旦递交不可补\"\n    },\n    {\n      \"id\": \"A04\", \"category\": \"A\", \"name\": \"递交方式/平台不符合要求\",\n      \"legal_basis\": \"实施条例第36条；电子招投标办法\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"电子(招标)?投标\", \"递交(至|到).{0,10}(平台|系统)\", \"CA(证书|锁|签章)\"],\n      \"bid_patterns\": [],\n      \"check\": \"电子标确认 CA 锁有效、文件已成功上传并解密测试通过\",\n      \"remedy\": \"无\"\n    },\n\n    {\n      \"id\": \"B01\", \"category\": \"B\", \"name\": \"投标文件未经投标单位盖章和单位负责人签字\",\n      \"legal_basis\": \"实施条例第51条第(一)项；12号令第25条第(二)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"(签字|签章).{0,6}(并|和).{0,6}(盖章|加盖)\", \"法定代表人(或|和)授权代表(签字|签章)\", \"逐页(签字|盖章|小签)\"],\n      \"bid_patterns\": [\"(未|漏|缺少).{0,8}(盖章|签字|签章)\"],\n      \"check\": \"『盖章和签字』是并列关系，缺一即触发。逐页检查要求小签/盖章处\",\n      \"remedy\": \"装订前完成；这是废标率最高且完全不可申辩的一项\"\n    },\n    {\n      \"id\": \"B02\", \"category\": \"B\", \"name\": \"联合体未提交共同投标协议\",\n      \"legal_basis\": \"实施条例第51条第(二)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"联合体\", \"共同投标协议\", \"联合体(各方|成员)\"],\n      \"exclude_patterns\": [\"(不|不予)?接受联合体\", \"不接受.{0,8}联合体\", \"禁止联合体\", \"不得(以)?联合体\"],\n      \"exclude_note\": \"招标文件明确不接受联合体投标时，本条不适用\",\n      \"bid_patterns\": [\"联合体\"],\n      \"check\": \"联合体各方须签署共同投标协议并随投标文件提交\",\n      \"remedy\": \"无（形式要件，属重大偏差，不补正即废）\"\n    },\n    {\n      \"id\": \"B03\", \"category\": \"B\", \"name\": \"不符合国家或招标文件规定的资格条件\",\n      \"legal_basis\": \"实施条例第51条第(三)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"(资质|资格)(要求|条件)\", \"(须|应|必须)(具有|具备)\", \"业绩(要求|条件)\", \"注册资本\", \"安全生产许可证\"],\n      \"bid_patterns\": [],\n      \"check\": \"逐条比对资质等级/业绩/人员/财务门槛，标红缺口\",\n      \"remedy\": \"缺项无法补；只能换有资质的主体或放弃\"\n    },\n    {\n      \"id\": \"B04\", \"category\": \"B\", \"name\": \"同一投标人提交两个以上不同的投标文件或报价\",\n      \"legal_basis\": \"实施条例第51条第(四)项\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"备选(投标|方案)\", \"只允许(提交)?一个(投标)?(文件|报价)\"],\n      \"bid_patterns\": [],\n      \"check\": \"除招标文件明确允许备选方案外，只能有一份投标文件/一个报价\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"B05\", \"category\": \"B\", \"name\": \"报价低于成本或高于最高投标限价\",\n      \"legal_basis\": \"实施条例第51条第(五)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"最高(投标)?限价\", \"招标控制价\", \"超过.{0,8}限价.{0,10}(否决|废|无效)\", \"低于成本\"],\n      \"bid_patterns\": [],\n      \"check\": \"【上限硬】超过最高限价直接否决，无解释空间；【下限软】低于成本须经『要求说明→举证→举证不能才否决』三步\",\n      \"remedy\": \"超限必废；低于成本有法定举证窗口，见 bid-price-redline\"\n    },\n    {\n      \"id\": \"B06\", \"category\": \"B\", \"name\": \"未对招标文件的实质性要求和条件作出响应（兜底条款）\",\n      \"legal_basis\": \"实施条例第51条第(六)项；12号令第25条第(七)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"实质性(要求|条款|响应)\", \"(必须|应|不得).{0,20}\", \"承诺函\", \"偏离表\"],\n      \"bid_patterns\": [\"偏离\", \"无偏离\", \"不响应\"],\n      \"check\": \"凡用『必须/应/不得』表述或标注『实质性条款』的，逐条做『要求→投标文件对应位置』对照表。这是实务中『莫名其妙被废』的主因\",\n      \"remedy\": \"逐条响应；技术参数偏离须在偏离表中说明\"\n    },\n    {\n      \"id\": \"B07\", \"category\": \"B\", \"name\": \"串通投标、弄虚作假、行贿等违法行为\",\n      \"legal_basis\": \"实施条例第51条第(七)项；第39-42条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"串通\", \"弄虚作假\", \"行贿\", \"以他人名义\"],\n      \"exclude_patterns\": [\"无行贿\", \"无.{0,6}犯罪记录\", \"行贿犯罪记录承诺\"],\n      \"exclude_note\": \"『无行贿犯罪记录承诺函』是常规合规文件，不构成行贿行为\",\n      \"bid_patterns\": [],\n      \"check\": \"多主体投标必查，见 E 类六项客观推定\",\n      \"remedy\": \"无（中标无效+罚款+取消投标资格）\"\n    },\n    {\n      \"id\": \"B08\", \"category\": \"B\", \"name\": \"未提供投标担保或担保有瑕疵\",\n      \"legal_basis\": \"12号令第25条第(一)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"投标(保证金|担保)\", \"(保函|保险)\", \"基本(存款)?账户(转出|汇出)\"],\n      \"bid_patterns\": [],\n      \"check\": \"金额、形式（转账/保函）、到账时间、是否从基本账户转出，四项全对\",\n      \"remedy\": \"无（形式要件，重大偏差）\"\n    },\n    {\n      \"id\": \"B09\", \"category\": \"B\", \"name\": \"完成期限（工期）超过招标文件规定\",\n      \"legal_basis\": \"12号令第25条第(三)项\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"(工期|交货期|服务期)(要求)?\", \"(须|应|不得)超过.{0,8}(天|日|月)\"],\n      \"bid_patterns\": [],\n      \"check\": \"投标工期 ≤ 招标要求工期；含节点工期\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"B10\", \"category\": \"B\", \"name\": \"明显不符合技术规格、技术标准\",\n      \"legal_basis\": \"12号令第25条第(四)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"技术(规格|标准|参数)\", \"(主要|关键)技术(指标|参数)\", \"★\", \"▲\"],\n      \"bid_patterns\": [],\n      \"check\": \"招标文件带★/▲的关键参数必须全部满足，无偏离\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"B11\", \"category\": \"B\", \"name\": \"包装方式、检验标准和方法不符合要求\",\n      \"legal_basis\": \"12号令第25条第(五)项\",\n      \"severity\": \"风险\", \"manual\": true,\n      \"tender_patterns\": [\"(包装|检验)(方式|标准|方法)\"],\n      \"bid_patterns\": [],\n      \"check\": \"按招标文件载明的包装/检验要求响应\",\n      \"remedy\": \"可澄清补正\"\n    },\n    {\n      \"id\": \"B12\", \"category\": \"B\", \"name\": \"投标文件附有招标人不能接受的条件\",\n      \"legal_basis\": \"12号令第25条第(六)项\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"(不得|不允许).{0,10}(附加|保留|限制性)条件\"],\n      \"bid_patterns\": [\"(保留|附加|特别)说明\", \"我方(要求|希望)\"],\n      \"check\": \"投标文件不得附加任何招标人未接受的保留或限制条件\",\n      \"remedy\": \"删除附加条件\"\n    },\n    {\n      \"id\": \"B13\", \"category\": \"B\", \"name\": \"拒不按要求澄清、说明或补正\",\n      \"legal_basis\": \"12号令第22条；实施条例第52条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"澄清\", \"说明\", \"补正\"],\n      \"bid_patterns\": [],\n      \"check\": \"澄清不得超出投标文件范围、不得改变实质性内容；评标委员会不接受投标人主动提出的澄清\",\n      \"remedy\": \"按评标委员会要求书面回复，不主动提交\"\n    },\n    {\n      \"id\": \"B14\", \"category\": \"B\", \"name\": \"有效投标不足三个且明显缺乏竞争\",\n      \"legal_basis\": \"12号令第27条\",\n      \"severity\": \"提示\", \"manual\": true,\n      \"tender_patterns\": [\"(少于|不足)三个\", \"重新招标\"],\n      \"bid_patterns\": [],\n      \"check\": \"评标委员会可否决全部投标，招标人应重新招标\",\n      \"remedy\": \"重新招标\"\n    },\n\n    {\n      \"id\": \"C01\", \"category\": \"C\", \"name\": \"与招标人存在利害关系可能影响招标公正性\",\n      \"legal_basis\": \"实施条例第34条第1款\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"利害关系\", \"可能影响(招标)?公正\"],\n      \"bid_patterns\": [],\n      \"check\": \"投标人与招标人是否存在股权/人事/利益关联\",\n      \"remedy\": \"无（相关投标无效）\"\n    },\n    {\n      \"id\": \"C02\", \"category\": \"C\", \"name\": \"单位负责人同一 / 存在控股或管理关系的不同单位投同一标段\",\n      \"legal_basis\": \"实施条例第34条第2款\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"priority\": \"最高（优先于一切串标推定）\",\n      \"tender_patterns\": [\"同一标段\", \"未划分标段的同一招标项目\"],\n      \"bid_patterns\": [],\n      \"check\": \"★多主体投标的第一道闸门：①各方法定代表人是否同一人？②相互间有无股权控股？③有无统一管理关系（统一人事/财务/决策）？任一为是→不得投同一标段\",\n      \"remedy\": \"无。这是资格硬禁止，无需任何串通证据，客观状态成立即自始无效\"\n    },\n    {\n      \"id\": \"C03\", \"category\": \"C\", \"name\": \"资格预审后联合体增减、更换成员\",\n      \"legal_basis\": \"实施条例第37条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"联合体(成员|组成).{0,10}(不得|不得再)\", \"资格预审\"],\n      \"bid_patterns\": [],\n      \"check\": \"通过资格预审后联合体组成不得变更\",\n      \"remedy\": \"无（其投标无效）\"\n    },\n    {\n      \"id\": \"C04\", \"category\": \"C\", \"name\": \"以他人名义投标 / 出借或借用资质\",\n      \"legal_basis\": \"实施条例第42条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"以他人名义\", \"挂靠\", \"出借(资质|资格)\"],\n      \"bid_patterns\": [],\n      \"check\": \"与 E03 构成死结：同一批人不可能同时与两个主体建立真实劳动关系\",\n      \"remedy\": \"无\"\n    },\n\n    {\n      \"id\": \"D01\", \"category\": \"D\", \"name\": \"标底不得作为中标条件或否决条件\",\n      \"legal_basis\": \"实施条例第50条\",\n      \"severity\": \"提示\", \"manual\": false,\n      \"tender_patterns\": [\"(接近|靠近)标底\", \"标底.{0,8}(上下)?浮动\", \"超出标底.{0,10}(否决|废)\", \"最低限价\"],\n      \"bid_patterns\": [],\n      \"check\": \"★反向维权：招标文件若写『报价超出标底±X%作废标处理』『以接近标底为中标条件』『设最低限价』——该条款本身违法\",\n      \"remedy\": \"可依据第50条提出质疑/投诉\"\n    },\n    {\n      \"id\": \"D02\", \"category\": \"D\", \"name\": \"细微偏差不影响投标有效性\",\n      \"legal_basis\": \"12号令第26条\",\n      \"severity\": \"提示\", \"manual\": false,\n      \"tender_patterns\": [\"细微偏差\", \"(量化|扣分)标准\"],\n      \"bid_patterns\": [],\n      \"check\": \"★最救命的一条：个别漏项属细微偏差，只可被要求补正；招标文件没规定量化标准的，不得扣分。与『重大偏差=否决』严格区分\",\n      \"remedy\": \"若被以细微偏差扣分且招标文件无量化标准，可质疑\"\n    },\n    {\n      \"id\": \"D03\", \"category\": \"D\", \"name\": \"报价书写不一致按法定规则修正（不废标）\",\n      \"legal_basis\": \"12号令第19条\",\n      \"severity\": \"提示\", \"manual\": false,\n      \"tender_patterns\": [\"(大写|小写)金额不一致\", \"总价.{0,6}单价.{0,6}不一致\"],\n      \"bid_patterns\": [],\n      \"check\": \"大写 vs 小写→以大写为准；总价 vs 单价→以单价为准（小数点明显错误除外）；中外文本→以中文为准。★陷阱：以单价为准意味着写错的单价会直接成为结算依据\",\n      \"remedy\": \"交标前必须逐项复核『单价×工程量=总价』\"\n    },\n\n    {\n      \"id\": \"E01\", \"category\": \"E\", \"name\": \"不同投标人的投标文件由同一单位或个人编制\",\n      \"legal_basis\": \"实施条例第40条第(一)项（视为串通）\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [],\n      \"bid_patterns\": [],\n      \"check\": \"各主体独立编制投标文件；不共用模板/电脑/编制人员\",\n      \"remedy\": \"无（客观推定，不可反证）\"\n    },\n    {\n      \"id\": \"E02\", \"category\": \"E\", \"name\": \"不同投标人委托同一单位或个人办理投标事宜\",\n      \"legal_basis\": \"实施条例第40条第(二)项（视为串通）\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [],\n      \"bid_patterns\": [],\n      \"check\": \"各主体分别委托、分别递交；不由同一人代领招标文件\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"E03\", \"category\": \"E\", \"name\": \"不同投标人的项目管理成员为同一人\",\n      \"legal_basis\": \"实施条例第40条第(三)项（视为串通）\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [],\n      \"bid_patterns\": [],\n      \"check\": \"★与C04构成死结：成员同一→视为串标；造假劳动关系→弄虚作假。唯一解=各主体配置真实独立的人员团队\",\n      \"remedy\": \"无第三条路\"\n    },\n    {\n      \"id\": \"E04\", \"category\": \"E\", \"name\": \"投标文件异常一致或报价呈规律性差异\",\n      \"legal_basis\": \"实施条例第40条第(四)项（视为串通）\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [],\n      \"bid_patterns\": [],\n      \"check\": \"★禁止共用成本测算底稿。等差/等比/固定百分比阶梯报价即构成『规律性差异』。各主体独立测算、报价依据取自不同渠道并留痕\",\n      \"remedy\": \"无（多主体投标最常见翻车点）\"\n    },\n    {\n      \"id\": \"E05\", \"category\": \"E\", \"name\": \"不同投标人的投标文件相互混装\",\n      \"legal_basis\": \"实施条例第40条第(五)项（视为串通）\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [],\n      \"bid_patterns\": [],\n      \"check\": \"装订完成后全文检索其他主体的字号、名称、资质页、公章页\",\n      \"remedy\": \"低级错误，但一票致命；自检可完全避免\"\n    },\n    {\n      \"id\": \"E06\", \"category\": \"E\", \"name\": \"投标保证金从同一单位或个人的账户转出\",\n      \"legal_basis\": \"实施条例第40条第(六)项；第26条第2款\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [],\n      \"bid_patterns\": [],\n      \"check\": \"★只看资金流出账户，不问主观理由。各主体必须以本单位基本账户独立缴纳，退还账户亦须各自自有账户\",\n      \"remedy\": \"无（电子招投标环境下系统自动比对，几乎无法事后辩解）\"\n    }\n  ]\n}\n\nFile v2.9.0:scripts/docs/FAQ.md\n\n# BidHunter 常见问题（FAQ）\n\n> 检索方式：`python3 faq.py <关键词>` 或 `python3 bidhunter.py faq <关键词>`。\n> 每个问题含关键词标签，命中任一即返回。\n\n## Q: 为什么判读结果里很多\"需确认\"？\n关键词: 需确认 不确定 没匹配 漏标\nA: \"需确认\"表示标题未命中任何主体能力词。常见原因：\n1. 你的 `qual_rules.json` 的 `entities` 能力词没覆盖该标的范围 → 按营业执照补充能力词。\n2. 标题里能力词被边界感知规则挡掉（如\"电气设备\"里的\"电气\"因前有 CJK 字被挡）→ 属于正常防误匹配，可在标题里出现能力词词首时正常命中。\n3. 实在吃不准就人工看一眼，并在报告底部用\"反馈 #序号 准确/有误 原因\"告诉我们，帮你优化规则。\n\n## Q: 推送失败了怎么办 / 怎么查推送记录？\n关键词: 推送 失败 收不到 钉钉 企微 邮件 历史\nA: 先运行诊断 `python3 doctor.py` 看 E005。查历史与重试：\n- `python3 push_manager.py history` 看 30 天推送记录\n- `python3 push_manager.py stats` 看统计\n- `python3 push_manager.py retry-failed` 重发失败项\n- `python3 push_manager.py health-check` 看连续失败告警\n首次配置通道请用 `python3 config_wizard.py`，未通过连通性测试不会写入。\n\n## Q: 怎么配置资质规则（不会写代码）？\n关键词: 配置 规则 资质 能力词 不会 新手 怎么填\nA: 两种方式：\n1. 规则编辑器（推荐，零代码）：`python3 bidhunter.py rules edit` → 浏览器打开 http://localhost:8080 图形化编辑并保存。\n2. 行业模板起步：复制 `scripts/samples/` 下对应行业的模板，按营业执照改 `entities`/`red_alerts`。\n改完跑 `python3 qual_check.py --validate-rules qual_rules.json` 做健康检查。\n\n## Q: 支持哪些招投标平台？怎么加新平台？\n关键词: 平台 平台列表 新增平台 采集 数据源 支持\nA: 当前支持已在 `references/platforms.md` 列明的央企/公共资源平台（如 cnooc/sinopec/petrochina/cnpc 等）。新增平台：参考 `references/platforms.md` 的\"自定义数据源\"章节，把平台采集参数加入 `bid_monitor.sh` 的适配器；也可在 ClawHub/SkillHub 反馈你需要的平台，我们按优先级扩展（v1.5 已增补平台覆盖）。\n\n## Q: 报告里出现的\"评分\"是什么意思？\n关键词: 评分 分数 匹配度 强烈推荐 建议跟 优先级\nA: v1.5 新增资质匹配度评分（0-100），帮你在可投标里排优先级：\n- 能力词命中数（≤40）+ 重点地区（≤20）+ 行业偏好（≤15）+ 预算区间（≤15）\n- 等级：强烈推荐(≥80) / 建议跟(≥55) / 可投一般 / 需确认 / 不可投\n评分仅供参考，最终仍以人工研判为准。\n\n## Q: 投标日历/开标倒计时怎么用？\n关键词: 日历 倒计时 开标 截止 提醒 漏跟\nA: `python3 bidhunter.py calendar` 或 `calendar.py <qual文件> --days 30` 看未来窗口内的开标/截止日。加 `--remind` 可对临近截止（默认 48h 内）的标自动推送提醒（需先配置推送通道）。\n注意：多数平台 list 接口无截止日字段，日历日期从标题解析，未含明确日期的标会归入\"待核实截止日\"。\n\n## Q: AI 速读/投标建议要额外付费吗？\n关键词: AI 速读 投标建议 费用 花钱 MiniMax API Key 配置\nA: 不额外购买服务器。AI 速读/风险识别/投标建议调用你自己的 MiniMax API（doubao/MiniMax 等），仅消耗你的 API 余额。配置：`~/.config/bidhunter/ai.json` 写入 `{\"api_key\":\"...\",\"group_id\":\"...\"}`。未配置时 AI 功能自动跳过，不影响基础采集研判。\n\n## Q: 多维筛选（金额/地区/行业）怎么用？\n关键词: 筛选 金额 预算 地区 行业 订阅 过滤\nA: 在 `qual_rules.json` 设置 `region_priority.high`（重点地区）、`industry_categories`+`industry_priority`（行业）、`budget_priority`（预算区间）。运行时可加过滤：\n`python3 filter_multi.py qual_xxx.jsonl --min 500000 --max 20000000 --region 天津 --industry 智能设备`\n\n## Q: SkillHub / ClawHub 上怎么搜不到或装不上？\n关键词: SkillHub ClawHub 安装 搜不到 面板 技能市场 上架\nA: 两端都要发布才覆盖。ClawHub 为 openclaw 命令行生态（自助发布免审核）；SkillHub 是 WorkBuddy 技能面板数据源（需官方审核，审核通过后点\"上架\"才在面板可见）。若面板搜不到，通常是 SkillHub 还在审核中或未点\"上架\"。\n\n## Q: 我的数据会外传吗？\n关键词: 隐私 数据 外传 安全 保密\nA: 采集仅取公开招投标公告；资质规则、推送配置存在你本机（`~/.config/bidhunter/`、skill 内 `bid_cache/`）。AI 速读会把公告/招标文件文本发往你配置的 MiniMax API 做解析，不会进入任何 BidHunter 云端（我们无云端）。不外传任何私有信息。\n\n## Q: 运行报 Python 错误 / 模块找不到？\n关键词: 报错 错误 python 模块 找不到 环境\nA: `python3 --version` 需 ≥3.8。所有脚本仅用标准库，无需 pip 安装。若报错，运行 `python3 doctor.py` 获取带错误码（E001~E005 / W001~W004）的诊断与下一步。\n\nFile v2.9.0:scripts/qual_rules.json\n\n{\n  \"version\": \"1.2\",\n  \"_match_loose\": true,\n  \"_match_loose_note\": \"v1.2: 能力词匹配使用宽松子串模式，避免 CJK 左边界规则漏判标题中部的关键词（如…零星维修服务 里的 维修）。假阳性由 _exclude_contexts 过滤。\",\n  \"description\": \"Qualification rules template - users MUST customize entities and rules to match their own business scope. All data here is placeholder/example only.\",\n\n  \"_exclude_contexts\": {\n    \"note\": \"v1.1: 上下文排除表 — 防止能力词误匹配子串。key 为能力词，value 列表内含任意一词则排除该匹配。\",\n    \"电气\": [\"电气石\"],\n    \"广告\": [\"广告设施\", \"广告位\", \"广告牌\", \"户外广告\"],\n    \"设计\": [\"设计制造\"],\n    \"维修\": [\"汽车维修\", \"设备维修\"],\n    \"设备\": [\"采矿设备\", \"勘探设备\"],\n    \"传媒\": [\"数字传媒\", \"新媒体\"],\n    \"视频\": [\"视频会议\", \"视频监控\", \"视频系统\"],\n    \"系统集成\": [\"信息系统集成\"],\n    \"安装\": [\"安装工程\", \"设备安装\"],\n    \"销售\": [\"销售代理\", \"销售服务\"],\n    \"租赁\": [\"融资租赁\", \"租赁服务\"],\n    \"运输\": [\"运输服务\", \"物流运输\"],\n    \"信息技术\": [\"信息技术服务\"],\n    \"机械\": [\"农业机械\", \"工程机械\"]\n  },\n\n  \"entities\": {\n    \"entity_a\": {\n      \"name\": \"主体A（示例：传媒/活动类）\",\n      \"capabilities\": [\n        \"广告\", \"传媒\", \"活动策划\", \"会展\", \"设计\", \"制作\", \"宣传\",\n        \"视频\", \"影视\", \"文化\", \"品牌\", \"营销\", \"推广\", \"印刷\",\n        \"摄影\", \"标识\", \"展示\", \"装饰\", \"装修\"\n      ],\n      \"note\": \"v1.1: 智能匹配已启用。'广告'不会误匹配'户外广告设施拆除'，请按营业执照经营范围填入真实能力词。\"\n    },\n    \"entity_b\": {\n      \"name\": \"主体B（示例：通用/设备/维修类）\",\n      \"capabilities\": [\n        \"设备\", \"器材\", \"供应\", \"销售\", \"安装\", \"调试\", \"维修\",\n        \"租赁\", \"运输\", \"物流\", \"仓储\", \"办公\", \"通用\", \"机械\",\n        \"电气\", \"自动化\", \"系统集成\", \"信息技术\"\n      ],\n      \"note\": \"v1.1: 智能匹配已启用。'电气'不会误匹配'电气石'，请按营业执照经营范围填入真实能力词。\"\n    }\n  },\n\n  \"red_alerts\": [\n    \"车辆维修\", \"机动车维修\", \"劳务派遣\", \"食品生产\", \"食品加工\",\n    \"医疗器械\", \"建筑施工\", \"消防\", \"危险品\", \"房地产开发\",\n    \"电信\", \"互联网信息服务\", \"爆破\", \"保安\", \"安保\", \"测绘\",\n    \"勘察\", \"特种设备\", \"压力容器\", \"电梯\", \"制药\", \"矿产\",\n    \"采掘\", \"冶炼\", \"钻井\", \"修井\",\n    \"监理\"\n  ],\n\n  \"substring_alerts\": {\n    \"_note\": \"★v1.2 子串红警：绕过 smart_match 的 CJK 左边界规则（该规则导致出现在标题中部的词永远匹配不到）。下列为『必须专门资质/许可、主体一律不具备』的高风险词，出现即判不可投。\",\n    \"_list\": [\n      \"监理\", \"消防\", \"电梯\", \"压力容器\", \"特种设备\", \"爆破\", \"危险品\",\n      \"医疗器械\", \"劳务派遣\", \"保安服务\", \"安保服务\", \"测绘\", \"勘察\",\n      \"钻井\", \"修井\", \"房地产开发\", \"药品生产\", \"制药\"\n    ]\n  },\n\n  \"service_type_gate\": {\n    \"note\": \"★v1.2 服务类型门禁：判定可投性先看【采购标的的服务类型】，再看项目名里的动词。项目名常把服务类型藏在修饰语后面——例：『楼宇安全整治维修改造项目监理服务』真正采购的是【监理服务】，不是维修。仅凭名称里的『维修/改造/整治/施工』命中能力词，不得判可投。\",\n    \"blocked_types\": {\n      \"监理\": {\n        \"keywords\": [\"监理\"],\n        \"action\": \"not_investable\",\n        \"reason\": \"标的为监理服务，需监理资质；施工总承包资质 ≠ 监理资质。且施工单位投同一项目监理通常有回避要求。\"\n      },\n      \"设计/勘察\": {\n        \"keywords\": [\"设计服务\", \"工程设计\", \"勘察设计\", \"方案设计\"],\n        \"action\": \"needs_review\",\n        \"reason\": \"标的为设计/勘察服务，需对应设计资质，须人工核验主体资质\"\n      },\n      \"检测\": {\n        \"keywords\": [\"检测服务\", \"工程检测\", \"质量检测\", \"无损检测\", \"第三方检测\"],\n        \"action\": \"needs_review\",\n        \"reason\": \"标的为检测服务，需CMA/CNAS等检测资质，须人工核验\"\n      },\n      \"审计/评估\": {\n        \"keywords\": [\"审计服务\", \"资产评估\", \"评估服务\", \"造价咨询\", \"招标代理\", \"咨询服务\"],\n        \"action\": \"needs_review\",\n        \"reason\": \"标的为审计/评估/咨询类服务，需对应执业资质，须人工核验\"\n      }\n    }\n  },\n\n  \"special_rules\": [\n    {\n      \"id\": \"service_type_gate_监理\",\n      \"description\": \"★服务类型门禁：标的为监理服务的，一律不可投（主体无监理资质）\",\n      \"match_keywords\": [\"监理\"],\n      \"action\": \"not_investable\",\n      \"reason\": \"标的为监理服务，投标主体均无监理资质（2026-09-11 负责人确认，案例614535）\"\n    },\n    {\n      \"id\": \"service_type_review\",\n      \"description\": \"服务类标的（设计/勘察/检测/审计/评估/造价咨询/招标代理）需人工确认资质后再定\",\n      \"match_keywords\": [\"设计服务\", \"工程设计\", \"勘察设计\", \"检测服务\", \"工程检测\", \"审计服务\", \"资产评估\", \"评估服务\", \"造价咨询\", \"招标代理\"],\n      \"action\": \"needs_review\",\n      \"reason\": \"服务类标的需要对应专业资质，不得凭项目名中的施工/维修动词命中\"\n    },\n    {\n      \"id\": \"skip_procurement\",\n      \"description\": \"采购/采办/询价类不参与（垫资风险）\",\n      \"match_keywords\": [\"采购\", \"采办\", \"询价\", \"询比\", \"竞争性谈判\"],\n      \"action\": \"skip\",\n      \"reason\": \"垫资类项目不参与\"\n    },\n    {\n      \"id\": \"external_qual_allowed\",\n      \"description\": \"示例：某类标可外找资质，不依赖自有资质（match_keywords 按需填写，留空则不触发）\",\n      \"match_keywords\": [],\n      \"action\": \"investable\",\n      \"assigned_entity\": \"entity_a\",\n      \"reason\": \"此类标可外找资质，正常推进\"\n    }\n  ],\n\n  \"skip_keywords_result\": [\"结果公示\", \"中标公示\", \"成交公示\", \"中标公告\", \"成交公告\"],\n\n  \"region_priority\": {\n    \"high\": [],\n    \"note\": \"按需填写重点地区，如 [\\\"天津\\\", \\\"青岛\\\", \\\"深圳\\\"]\"\n  },\n\n  \"_a4_note\": \"v1.5 多维筛选(A4)可选字段，不填则对应加分为0：industry_categories 映射能力词→行业类目；industry_priority 重点行业列表；budget_priority 预算偏好区间(元)。\",\n  \"industry_categories\": {},\n  \"industry_priority\": [],\n  \"budget_priority\": {\"min\": null, \"max\": null, \"note\": \"按需填写预算偏好区间(元)，如 {\\\"min\\\":500000,\\\"max\\\":20000000}\"}\n}\n\nFile v2.9.0:scripts/quote/gate.json\n\n{\n  \"schema\": \"bidhunter-quote-gate/v1\",\n  \"disclaimer\": \"本闸门只做算式校验与清单提示，不产生报价意见，不替代人工判断。任一道不过即禁止输出金额；缺参数时只交框架与待补清单，绝不交带金额的报价函。\",\n\n  \"thresholds\": {\n    \"labor_coefficient_low\": 1.10,\n    \"labor_coefficient_high\": 1.25,\n    \"scale_tolerance_pct\": 15.0,\n    \"margin_floor_pct_default\": 17.0,\n    \"market_band_deviation_pct\": 50.0,\n    \"params_stale_days\": 90\n  },\n\n  \"computed_cards\": [\n    {\n      \"id\": \"C-1\",\n      \"name\": \"品类清算价筛查\",\n      \"rank\": 0,\n      \"requires\": [\"min_wage_monthly\", \"heads\", \"months\"],\n      \"formula\": \"对手地板价 ≈ 当地月最低工资 × 人数 × 月数 × (1.10 ~ 1.25)\",\n      \"block_when\": \"我方合规成本 >= 地板价下限\",\n      \"on_block\": \"判「结构性陪跑」：即使保本零毛利也进不了前列，直接不投，不要继续做标书。\",\n      \"on_pass\": \"地板价明显低于我方成本才继续；若两者接近，仍按陪跑处理。\",\n      \"note\": \"仅适用于纯人力品类（保洁/物业/保安/人力派驻）。系数覆盖耗材、管理、保险与微利。\"\n    },\n    {\n      \"id\": \"C2\",\n      \"name\": \"规模换算（线性校验）\",\n      \"rank\": 2,\n      \"requires\": [\"prior_amount\", \"prior_scale\", \"target_scale\"],\n      \"formula\": \"新口径金额 ≈ 旧口径金额 × 新规模 ÷ 旧规模\",\n      \"block_when\": \"实际填写的金额与线性推算值偏差 > 容差\",\n      \"on_block\": \"先解释规模差异的来源（台数/人月/点位/期数），解释不通则禁止沿用旧价。\",\n      \"note\": \"典型事故：沿用外地旧价报新标，未换算数量，量级偏差可达 10 倍以上。\"\n    },\n    {\n      \"id\": \"C3\",\n      \"name\": \"单位单价校验\",\n      \"rank\": 3,\n      \"requires\": [\"total_amount\", \"quantity\"],\n      \"formula\": \"单价 = 总价 ÷ 数量\",\n      \"block_when\": \"计算出单价落在已知单价带之外，且无书面解释\",\n      \"on_block\": \"单价是最硬的一把尺：先用单价反查总价，而不是用总价解释单价。\"\n    },\n    {\n      \"id\": \"M1\",\n      \"name\": \"毛利红线\",\n      \"rank\": 9,\n      \"requires\": [\"total_amount\", \"cost_amount\"],\n      \"formula\": \"毛利率 = (总价 - 成本) ÷ 总价\",\n      \"block_when\": \"毛利率 < 底线\",\n      \"on_block\": \"低于底线不得出价；若因战略需要压价，必须留下书面决策依据。\",\n      \"note\": \"底线默认取参数库，可在参数库中按品类覆盖。\"\n    }\n  ],\n\n  \"manual_cards\": [\n    {\n      \"id\": \"C1\",\n      \"name\": \"招标文件条款逐字读完\",\n      \"action\": \"逐条读评分办法、废标条款、付款周期、验收标准；把「必须/应/不得」和带★的参数全部摘出。\",\n      \"why\": \"漏读一条实质性要求，后面所有测算都白做。\"\n    },\n    {\n      \"id\": \"C0\",\n      \"name\": \"市场价带反推\",\n      \"action\": \"取同品类近期开标价或中标价，反推市场价带；我方报价偏离价带超过阈值必须能解释。\",\n      \"why\": \"价带是外部锚点，能挡住「自己算得很对但市场不认」的报价。\"\n    },\n    {\n      \"id\": \"C4\",\n      \"name\": \"服务模式逐项加减\",\n      \"action\": \"把服务频次、响应时限、驻场与否、含不含耗材、节假日是否加派逐项对上，每一项都落到金额增减。\",\n      \"why\": \"同类标之间的差异几乎全在这一层，直接套旧价必错。\"\n    },\n    {\n      \"id\": \"C5\",\n      \"name\": \"敏感性分析覆盖全部变量\",\n      \"action\": \"对人数、月数、耗材、税率、付款周期逐项做单变量扰动，确认结论不因单一假设翻转。\",\n      \"why\": \"只有一个点的测算不是测算，是一条线。\"\n    },\n    {\n      \"id\": \"C6\",\n      \"name\": \"成本口径与服务口径配套\",\n      \"action\": \"确认成本口径（含税/不含税、含不含管理费与社保）与评标口径一致；口径不一致先统一再比。\",\n      \"why\": \"口径错配会制造出并不存在的毛利或亏损。\"\n    }\n  ],\n\n  \"param_schema\": {\n    \"min_wage_monthly\": \"当地月最低工资（全日制），单位元\",\n    \"min_wage_region\": \"该工资标准适用的地区\",\n    \"min_wage_as_of\": \"该工资标准的执行起始日期（YYYY-MM-DD）\",\n    \"labor_coefficient\": \"[下限, 上限]，默认 [1.10, 1.25]\",\n    \"margin_floor_pct\": \"毛利红线，默认 17.0\",\n    \"scale_tolerance_pct\": \"规模换算容差，默认 15.0\",\n    \"tax_rate\": \"常用税率（服务类 0.06 / 货物类 0.13），用于含税与评标价换算\",\n    \"unit_price_bands\": \"可选：{品类: [下限, 上限]}，用于单位单价校验\"\n  }\n}\n\nFile v2.9.0:scripts/samples/demo_rules.json\n\n{\n  \"version\": \"1.5-demo\",\n  \"description\": \"DEMO 示例规则（虚构公司「鸿图文化传媒 / 鸿图智能设备」）。仅用于体验效果，正式使用请改成你自己的主体与能力词。\",\n\n  \"_exclude_contexts\": {\n    \"电气\": [\"电气石\"],\n    \"广告\": [\"广告设施\", \"广告位\", \"广告牌\", \"户外广告\"],\n    \"视频\": [\"视频会议\", \"视频监控\", \"视频系统\"],\n    \"安装\": [\"安装工程\", \"设备安装\"],\n    \"设备\": [\"采矿设备\", \"勘探设备\"]\n  },\n\n  \"entities\": {\n    \"hongtu_media\": {\n      \"name\": \"鸿图文化传媒（示例）\",\n      \"capabilities\": [\"广告\", \"传媒\", \"活动策划\", \"会展\", \"设计\", \"视频\", \"影视\", \"文化\", \"品牌\", \"宣传\", \"印刷\", \"摄影\", \"标识\", \"展示\", \"装修\"],\n      \"note\": \"虚构示例主体，演示传媒类能力匹配。\"\n    },\n    \"hongtu_tech\": {\n      \"name\": \"鸿图智能设备（示例）\",\n      \"capabilities\": [\"设备\", \"器材\", \"安装\", \"调试\", \"维修\", \"租赁\", \"电气\", \"自动化\", \"系统集成\", \"信息技术\"],\n      \"note\": \"虚构示例主体，演示设备类能力匹配。\"\n    }\n  },\n\n  \"red_alerts\": [\"车辆维修\", \"机动车维修\", \"劳务派遣\", \"食品生产\", \"医疗器械\", \"建筑施工\", \"消防\", \"危险品\", \"房地产开发\", \"爆破\", \"保安\", \"测绘\", \"特种设备\", \"电梯\", \"制药\"],\n\n  \"special_rules\": [\n    {\"id\": \"skip_procurement\", \"description\": \"采购/采办/询价类不参与（垫资风险）\", \"match_keywords\": [\"采购\", \"采办\", \"询价\", \"竞争性谈判\"], \"action\": \"skip\", \"reason\": \"垫资类项目不参与\"},\n    {\"id\": \"demo_investable\", \"description\": \"示例：视频制作类可投\", \"match_keywords\": [\"视频制作\", \"宣传片\"], \"action\": \"investable\", \"assigned_entity\": \"hongtu_media\", \"reason\": \"此类标可正常推进\"}\n  ],\n\n  \"skip_keywords_result\": [\"结果公示\", \"中标公示\", \"成交公示\", \"中标公告\", \"成交公告\"],\n\n  \"region_priority\": {\"high\": [\"天津\", \"青岛\", \"深圳\"], \"note\": \"示例重点地区\"},\n\n  \"industry_categories\": {\n    \"文化传媒\": [\"广告\", \"传媒\", \"活动策划\", \"会展\", \"设计\", \"视频\", \"影视\", \"文化\", \"品牌\", \"宣传\", \"印刷\", \"摄影\", \"标识\", \"展示\", \"装修\"],\n    \"智能设备\": [\"设备\", \"器材\", \"安装\", \"调试\", \"维修\", \"租赁\", \"电气\", \"自动化\", \"系统集成\", \"信息技术\"]\n  },\n  \"industry_priority\": [\"文化传媒\", \"智能设备\"],\n  \"budget_priority\": {\"min\": 500000, \"max\": 20000000, \"note\": \"示例预算偏好区间(元)\"}\n}\n\nArchive v2.8.0: 54 files, 158841 bytes\n\nFiles: references/field_standard.md (3541b), references/filter_rules.md (5854b), references/platforms.md (7283b), references/setup-guide.md (3831b), requirements.txt (248b), scripts/ai/analytics.py (3449b), scripts/ai/bid_advisor.py (7202b), scripts/ai/clause_extractor.py (15321b), scripts/ai/doc_parser.py (6185b), scripts/ai/doc_reader.py (2786b), scripts/ai/minimax_client.py (3847b), scripts/ai/risk_scanner.py (3908b), scripts/api_server.py (4275b), scripts/bid_monitor.sh (6779b), scripts/bidhunter.py (14036b), scripts/calendar.py (7133b), scripts/check_environment.py (3199b), scripts/compliance/compliance_scanner.py (14730b), scripts/compliance/redlines.json (17880b), scripts/config_wizard.py (6394b), scripts/custom_source.py (4908b), scripts/demo.py (2080b), scripts/docs/FAQ.md (5216b), scripts/doctor.py (6968b), scripts/faq.py (2216b), scripts/feedback.py (12686b), scripts/filter_multi.py (3061b), scripts/init_wizard.py (10852b), scripts/material_gap.py (14110b), scripts/pipeline.sh (8787b), scripts/push_manager.py (17165b), scripts/qual_check.py (20073b), scripts/qual_rules.json (6883b), scripts/quote_gate.py (19646b), scripts/quote_gen.py (2447b), scripts/quote/gate.json (4713b), scripts/report_html.py (10090b), scripts/report_text.py (6268b), scripts/rule_editor.py (15513b), scripts/samples/demo_cache.jsonl (1104b), scripts/samples/demo_qual.jsonl (4076b), scripts/samples/demo_rules.json (2539b), scripts/sources.example.json (746b), scripts/sources.presets/html_list.json (842b), scripts/sources.presets/json_api.json (1266b), scripts/sources.presets/README.md (2463b), scripts/sources.presets/rss.json (658b), scripts/status.py (7520b), scripts/usage.py (5479b), scripts/webhook_publish.py (2632b), skill-card.md (2352b), skill-dependencies.json (11905b), SKILL.md (26132b), _meta.json (128b)\n\nFile v2.8.0:SKILL.md\n\n---\nname: bidhunter\nslug: bidhunter\ndisplayName: 标讯猎手 BidHunter\nversion: \"2.8.0\"\nsummary: 国央企招投标信息监控与研判：自动采集多平台公告，按资质规则判断可投性，生成研判简报并推送；支持分片全覆盖读标、评分点分值守恒校验、待补材料清单、零响应检测、合规红线扫描与报价闸门。本地运行，零云成本。\nlicense: MIT-0\ndescription: \"国央企招投标信息监控与研判技能。自动采集多平台公告，按资质规则比对可投性（可投/不可投/需确认），生成带研判简报并多通道推送。v1.5 起新增：资质匹配度评分(0-100)、投标日历与开标倒计时、金额/地区/行业多维筛选、零代码规则编辑器、诊断中心、示例模式、集中FAQ、统一命令入口；v2.0 本地AI增强（招标文件AI速读+风险条款识别，零云成本）；v2.5 投标策略建议；v3.0 本地开放API+签名webhook；v3.5 合规红线引擎（31条法定废标红线本地扫描、交标前自查清单、多主体串标隔离，零API成本）；v2.7 报价闸门（品类清算价地板、规模换算线性、单位单价、毛利红线，任一道不过即禁止输出结论金额）。★v2.8 覆盖率重写：修复只读前9000字符导致200页标书95%未读的缺陷，改为结构化分片全覆盖并强制标注覆盖率；修复PDF/DOCX扫描静默失效（此前规则命中恒为0）；新增评分点逐项映射与分值守恒校验、待补材料清单（高危红标签字盖章页缺件）、零响应检测（空洞满足/待补占位/跨项目残留/数字型空洞），无AI key也能出完整简报。触发词：抓招投标、今日哪些能投、标讯监控、标书研判、招投标公告、央企招标、投标资质匹配、AI读标书、投标建议、这份标会不会被废、废标风险、交标前检查、合规红线扫描、多主体投标、会不会被认定串标、报价闸门、这个标报多少、报价复核、出价前检查、这个标值不值得投、报价会不会被废、待补材料清单、还差什么材料、零响应检测、评分点、评分表、评分办法、这个分怎么拿、漏项、丢分、扣分项、待补、待提供、准备什么材料、递交清单、应答表、偏离表。\"\nagent_created: true\n---\n\n# 标讯猎手 BidHunter\n\n> 采集国央企/公共资源招投标公告 → 资质规则比对可投性 → 生成带研判简报 → 多通道推送 → （v1.5+）评分排序/日历提醒/多维筛选/零代码配规则 → （v2.0+）AI 速读标书与风险识别 → （v2.5+）投标策略建议 → （v3.5+）**交标前法定红线扫描与废标预警**。\n> 自包含、已脱敏：不含任何私有主体、个人联系方式、公司档案。使用者按自己的营业执照与业务规则填充配置即可。\n\n## 5 分钟跑通（新用户看这里）\n\n两条路，挑一条：\n\n### A. 先看效果——不用配任何东西\n\n```bash\npython3 bidhunter.py paste 你的招标文件.pdf\n```\n\n丢一份招标文件进来，直接出**废标风险报告**（31 条法定红线本地扫描）。\n不需要 AI key、不需要采集源、离线可跑。\n\n### B. 开始监控——三问生成配置\n\n```bash\npython3 bidhunter.py init\n```\n\n问三个问题（主体名称 / 主营什么 / 盯哪些地区），自动生成你的资质规则库，\n再 `bash pipeline.sh` 开始采集。\n\n> 行业**不设固定选项**——可以直接粘贴营业执照经营范围，自动拆成能力词。\n> 想先看看效果不写盘：`python3 bidhunter.py init --preview`\n\n## 卡住了？先跑诊断\n\n任何异常先跑这一条，30 秒定位问题（E001~E005 + W001~W004，每条都带修复建议）：\n\n```bash\npython3 bidhunter.py doctor\n```\n\n> 最常见的失败原因是 **E002：规则库仍是示例占位符**。装上不等于能用——\n> 一条命令解决：`python3 bidhunter.py init`（三问自动生成，约 1 分钟）。\n\n## 版本能力一览\n\n| 版本 | 主题 | 关键能力 |\n|---|---|---|\n| v1.1 | 准 | 边界感知智能匹配、规则健康检查、精华版报告 |\n| v1.2 | 达 | 钉钉/企微/邮件多通道推送、配置向导、推送历史与告警 |\n| **v1.5** | 易+功能 | 匹配度评分、投标日历、多维筛选、规则编辑器、诊断/示例/FAQ/统一入口 |\n| **v2.0** | 智(本地AI) | 招标文件 AI 速读、排他/内定风险识别、业主品类画像（零云成本） |\n| **v2.5** | 策 | 投标策略建议生成（仅供参考，不代填报价/资质） |\n| **v3.0** | 开(本地) | 本地查询 API + 签名 webhook（云/SaaS 部分因成本约束未启用） |\n| **v3.5** | 规 | 合规红线引擎：31 条法定废标红线本地扫描 + 交标前自查清单 + 多主体串标隔离（零 API 成本） |\n| **v2.6** | 顺 | **上手转化**：`init` 三问生成配置（行业自由输入）、`paste` 零配置出废标风险报告、本地埋点、平台适配模板 |\n| **v2.7** | **价** | **报价闸门**：出价前算式校验（品类清算价地板、规模换算线性、单位单价、毛利红线），任一道不过即禁止输出结论金额；缺参数只交框架与待补清单 |\n| **v2.8** | **读全** | ★**覆盖率重写**：分片全覆盖（修掉只读前 9000 字符、200 页标书 95% 未读的缺陷）；PDF/DOCX 扫描静默失效已修（此前规则命中恒为 0）；**评分点逐项映射 + 分值守恒校验**；新增**待补材料清单**与**零响应检测**；无 AI key 也能出完整简报 |\n\n## ★ v2.8 为什么是这一版\n\n2026-10-05 复盘发现三个叠加缺陷，**每一个都单独足以让读标结论不可信**：\n\n| # | 缺陷 | 实测影响 | 修复 |\n|---|---|---|---|\n| 1 | `clause_extractor` / `risk_scanner` / `compliance_scanner` / `bid_advisor` 全部硬编码 `MAX_CHARS=9000` | 200~500 页标书（15~40 万字）**只喂入前 9000 字，约 4~6%**。且截断后照样输出完整 JSON —— **\"读了一页就当读完\"是最坏的失败模式** | `doc_parser.segment()` 按章节结构切片 + 逐片抽取 + 合并去重；输出强制带 `meta.coverage_pct` |\n| 2 | `compliance_scanner` 导入 `doc_parser.parse_document`（该函数不存在），异常被裸 `except` 吞掉 | **喂任何 PDF/DOCX，规则扫描恒为 0 条命中**，却照样打印一份自信的人工清单。B02 实测 0 → 修复后 9 条，其中命中\"缺漏项金额超 20% 视为非实质性响应\"（该标废标的真实原因） | 改用真实 `parse()`，并把 backend 与 chars_read 写进输出，让静默失败可见 |\n| 3 | `bid_advisor` 调 `extract(text)` 拿到的是**元组**，直接 `json.dumps` 传进 prompt | 策略建议基于一个字符串化的元组，**实际一直是坏的** | 接 `(clauses, meta)` 双返回；无 key 时降级出规则版简报而不是 exit 2 |\n\n**修复后实测（B02 保洁真实招标文件 PDF）**：覆盖率 79.9% → **100%**；合规命中 0 → **9 条**；无 AI key 也能出评标办法/截止时间/预算/资格要求/未确认字段。\n\n**新增两个纯规则（零 API）模块**：\n- `gap scan` 待补材料清单：三态（HAVE / MISSING / CHECK）+ 高危红标（**缺件项落在签字盖章页 = 形式审查直接不通过**）+ 有效期提醒\n- `gap zero` 零响应检测：空洞满足 / 借附件 / **待补占位** / 跨项目残留 / 承诺主体不明 / 数字型空洞（\"不低于要求\"却没数字）\n\n**新增评分点分值守恒校验**：评分项合计 ≠ 100 时报警并要求解释差额——总分对不上通常意味着**漏抄了评分项**，这正是漏分的根因。\n\n\n## 何时使用\n\n- \"抓一下招投标\" / \"今日哪些能投\" / \"重新分析一遍标讯\"\n- \"AI 读一下这份标书\" / \"这份招标文件有什么风险\" / \"帮我出投标建议\"\n- \"这份标会不会被废\" / \"交标前帮我过一遍\" / \"有没有废标风险\" / \"合规红线扫一下\"\n- \"还差什么材料\" / \"待补材料清单\" / \"这些材料要不要盖章\"（v2.8 `gap scan`）\n- \"帮我查查有没有漏项\" / \"有没有只写完全满足的\" / \"有没有上个项目的残留\"（v2.8 `gap zero`）\n- \"评分表在哪\" / \"评分点有几个\" / \"这个分怎么拿\"（v2.8 评分点逐项映射 + 分值守恒校验）\n- \"我们几家一起投 / 多主体投标会不会被认定串标\"（v3.5 先查实施条例第34条）\n- \"这个标报多少\" / \"报价复核一下\" / \"出价前帮我过一遍\" / \"这个标值不值得投\"（v2.7 走报价闸门）\n- 需要判断公告可投性、归属投标主体、监控重点平台\n- 搭建/优化招投标监控工作流\n\n## 安装与初始化\n\n1. 脚本已随 skill 就位（`~/.workbuddy/skills/bidhunter/scripts/`）。\n2. 编辑 `qual_rules.json` 填入你的投标主体与资质能力词：\n   - 零代码：运行 `python3 bidhunter.py rules edit` → 浏览器图形化编辑，内置「能源/建筑/IT/市政」行业模板可一键预填\n   - 或复制 `scripts/samples/demo_rules.json` 改\n   - 校验：`python3 qual_check.py --validate-rules qual_rules.json`\n3. （可选）配置推送：`python3 config_wizard.py`（钉钉/企微/邮件）\n4. （可选）配置 AI：`~/.config/bidhunter/ai.json` 写入 `{\"api_key\":\"你的MiniMaxKey\"}`（v2.0+ 用，仅消耗你的 API 余额，零云成本）。AI 速读 PDF/Word 建议先 `pip install -r requirements.txt`（PyPDF2/python-docx）；未装则自动降级为正则抽取。\n\n> 先看效果再配：直接 `python3 bidhunter.py demo` 跑内置示例。\n\n## 统一命令入口（v1.5 · A9，零命令行门槛）\n\n```bash\npython3 bidhunter.py run [--fresh] [--summary] [--calendar]   # 采集+比对+报告(+推送)\npython3 bidhunter.py status                                    # 今日状态\npython3 bidhunter.py doctor                                    # 一键诊断\npython3 bidhunter.py demo                                      # 示例效果\npython3 bidhunter.py calendar [--days 7]                        # 投标日历\npython3 bidhunter.py faq [关键词]                               # 查常见问题\npython3 bidhunter.py rules edit [--port 8080]                  # 图形化配规则\npython3 bidhunter.py ai read <标书.pdf>                        # v2.0 AI 速读\npython3 bidhunter.py ai advise <标书.pdf>                      # v2.5 投标建议\npython3 bidhunter.py api serve [--port 8765]                   # v3.0 本地API\npython3 bidhunter.py compliance scan <标书> [--mode tender|bid] # v3.5 合规红线扫描\npython3 bidhunter.py compliance checklist                      # v3.5 交标前自查清单\npython3 bidhunter.py gap scan <招标文件>                          # v2.8 待补材料清单\npython3 bidhunter.py gap zero <投标文件草稿>                      # v2.8 零响应检测\npython3 bidhunter.py quote params [--show]                     # v2.7 报价参数库（首次填一次）\npython3 bidhunter.py quote check --help                        # v2.7 报价闸门（不过禁止出金额）\npython3 bidhunter.py gap scan <招标文件>                        # v2.8 待补材料清单（零 API）\npython3 bidhunter.py gap zero <投标文件草稿> [--our-project 名称] # v2.8 零响应检测（零 API）\n```\n\n## 待补材料清单与零响应检测（v2.8）★\n\n读完标只是第一步，**最容易丢分的是\"以为写完了\"**。这两条命令专治这件事，纯规则、零 API 成本。\n\n```bash\n# 交标前还差什么：资格要求逐条三态判定 + 高危红标\npython3 bidhunter.py gap scan 招标文件.pdf\npython3 bidhunter.py gap scan 招标文件.pdf --json\n\n# 草稿写完后查零响应：空洞满足 / 借附件 / 待补占位 / 跨项目残留 / 数字型空洞\npython3 bidhunter.py gap zero 投标文件草稿.docx\npython3 bidhunter.py gap zero 草稿.docx --our-project \"XX项目\" --other-projects 上一标的项目名\n```\n\n**`gap scan` 输出**\n```\n共 3 项：缺 1 · 待确认 2 · 高风险 1 · 带有效期 2\n\n🔴 [MISSING] 3.3 业绩证明文件（资格评审第 4 项）★须按规定格式提交业绩表…\n     ⚠️ 出现在签字盖章页——缺件即形式审查不通过\n     标记：需盖章\n```\n\n三态含义：\n- `HAVE` — 规则库已有证据线索\n- `MISSING` — **原文写\"必须/应/须\"但未找到我方证据 → 最高优先级**\n- `CHECK` — 表述含糊，人工确认\n\n**高危判定**：缺件项若涉及合同/业绩/资质/承诺函/人员简历/盖章 → 🔴。因为这些要进签字盖章页，**占位符上会 = 形式审查直接不通过，不用到评标**。\n\n**`gap zero` 检出的六类零响应**\n| 类型 | 危险度 | 说明 |\n|---|---|---|\n| **待补占位**（待补/待提供/【 】/＿＿＿） | 致命 | 评标时等同未提供 |\n| **跨项目残留**（别的项目名/甲方名） | 致命 | 复制粘贴未替换 |\n| 空洞满足（完全满足/无偏离） | 风险 | 须紧跟具体做法或参数 |\n| 借附件（详见附件） | 风险 | 附件里必须真有内容 |\n| 数字型空洞（不低于要求/优于标准） | 风险 | 没给数字 = 按无偏离计分 = 零 |\n| 承诺主体不明（我司将…） | 提示 | 须落到具体章节与具体承诺 |\n\n\n## 标准流程\n\n### 1. 采集 + 比对 + 报告\n```bash\nbash pipeline.sh                  # 全流程（缓存优先）\nbash pipeline.sh --fresh         # 强制重采当天\nbash pipeline.sh --calendar      # 生成后额外打印投标日历\n# A4 多维筛选（后过滤）\nbash pipeline.sh --budget-min 500000 --budget-max 20000000 --region 天津 --industry 智能设备\n```\n报告：`bid_reports/report_YYYY-MM-DD.txt`（文字，适配 IM）、`report_YYYY-MM-DD.html`（浏览器）。\n\n### 2. 多通道推送（v1.2）\n首次 `python3 config_wizard.py` 配置；`pipeline.sh` 生成报告后自动推送。`push_manager.py` 支持 `test/history/stats/health-check/retry-failed`。关闭用 `pipeline.sh --no-push`。\n\n### 3. v1.5 新能力\n- **匹配度评分（A1）**：可投标按 0-100 分排序，等级 强烈推荐/建议跟/可投一般。报告直接显示分数。\n- **投标日历（A2）**：`python3 calendar.py <qual文件> --days 30` 看开标/截止日；`--remind` 对临近截止（默认48h）自动推送提醒。\n- **多维筛选（A4）**：规则库设 `region_priority.high` / `industry_categories`+`industry_priority` / `budget_priority`，运行时用 `--region/--industry/--budget-min/--budget-max` 过滤。\n- **规则编辑器（可视化）**：`python3 bidhunter.py rules edit` → http://localhost:8080，选行业模板、填能力词、实时试标、保存。\n- **诊断中心（A6）**：`python3 doctor.py` 输出带错误码（E001~E005 / W001~W004）的诊断与下一步。\n- **示例模式（A7）**：`python3 demo.py [--summary] [--calendar]` 用内置示例看完整效果。\n- **集中 FAQ（A8）**：`python3 faq.py <关键词>` 检索常见问题。\n- **平台扩展（A5）**：内置 3 适配器（cnooc/cebpubservice/ccgp）+ 自定义数据源 `sources.json`（json/rss/html 三种模式，零代码接入任意公开平台）。\n\n### 4. v2.0 本地 AI 增强（零云成本）\n```bash\npython3 bidhunter.py ai read 招标文件.pdf     # 解析+结构化抽取+风险扫描\npython3 bidhunter.py ai read 招标文件.pdf --llm   # 加 LLM 风险扫描\npython3 ai/analytics.py --days 30              # 本地业主/品类画像\n```\n调用你自己的 MiniMax API（仅耗余额），不外传数据到任何 BidHunter 云端（我们无云端）。\n\n### 5. v2.5 投标策略建议\n```bash\npython3 bidhunter.py ai advise 招标文件.pdf    # 资质自检+评分得分点+报价策略+时间节点\n```\n**合规边界**：只建议不代劳——不自动填报价、不伪造资质、不写技术方案。所有建议标注\"仅供参考，人工确认\"。\n\n### 6. v3.0 本地开放能力（零云成本子集）\n```bash\npython3 api_server.py --port 8765             # 本地查询 API（127.0.0.1，无云端）\npython3 webhook_publish.py qual_xxx.jsonl     # 把标讯签名推送到你自己的系统\n```\n> v3.0 原规划的云/SaaS 部分（多租户、第三方插件市场、数据市场、Salesforce/金蝶连接器）因涉及付费云基础设施，按成本约束未启用。本机 API + 签名 webhook 是其零成本替代。\n\n### 7. v3.5 合规红线引擎（零 API 成本）★\n\n找到标只是第一步，**交了标不被废**才是最后一公里。v3.5 把《招标投标法》《实施条例》《评标委员会和评标方法暂行规定》（12号令）蒸馏成机器可读的 **31 条法定红线**，本地扫描，**不调用任何 LLM，零 API 成本**。\n\n```bash\n# 扫招标文件：找出文件里埋了哪些\"雷\"（实质性要求、违规条款、致命形式要件）\npython3 bidhunter.py compliance scan 招标文件.pdf --mode tender\n\n# 扫投标文件：交标前最后一检，找自己文件里的致命项\npython3 bidhunter.py compliance scan 投标文件.pdf --mode bid\n\n# 交标前自查清单（31 条，逐条打勾）\npython3 bidhunter.py compliance checklist\n\n# 输出 JSON（供其他系统消费）/ 追加 LLM 深度扫描（耗 MiniMax 余额）\npython3 bidhunter.py compliance scan 招标文件.pdf --json\npython3 bidhunter.py compliance scan 招标文件.pdf --llm\n```\n\n**红线分类（31 条）**\n\n| 类 | 名称 | 条数 | 发生阶段 | 决定方 | 后果 |\n|---|---|---|---|---|---|\n| A | 拒收/不予受理 | 4 | 交标现场 | 招标人/代理机构 | 当场拒收，进不了评标 |\n| B | 否决投标 | 14 | 评标阶段 | 评标委员会 | 该份投标出局 |\n| C | 投标无效 | 4 | 全程 | 无需认定 | 相关投标**均**无效 |\n| D | 反向保护条款（盾牌） | 3 | 维权 | 投标人主张 | 可据此质疑/投诉 |\n| E | 多主体串标隔离 | 6 | 评审/调查 | 评标委员会/行政监督 | 视为串通，中标无效 |\n\n**三条最值钱的认知**（其余详见 `compliance/redlines.json`）：\n\n1. **多主体投同一标段，先查《实施条例》第34条**（C02）：单位负责人为同一人、或存在控股/管理关系的不同单位**不得**参加同一标段投标，违反则相关投标均无效。这是**资格硬禁止**，无需任何串通证据，且优先于一切串标推定。\n2. **细微偏差不影响投标有效性**（D02，12号令第26条）：个别漏项只会被要求补正，招标文件没规定量化标准的**不得扣分**。与\"重大偏差=否决\"严格区分——这条能救命。\n3. **标底不能作为否决依据**（D01，实施条例第50条）：招标文件若写\"报价超出标底±X%作废标处理\"，该条款**本身违法**，可据此质疑投诉。扫描器会自动识别此类违规条款并标为\"盾牌\"。\n\n**合规边界（与 v2.5 一致）**：\n- ✅ 做：法条索引、风险提示、自查清单、违规条款识别\n- ❌ 不做：法律意见、胜诉承诺、代填报价、伪造资质\n- ⚠️ 扫描结果**不构成法律意见**，最终判定以招标文件、评标委员会认定及有权机关解释为准。法规未给出量化标准的（如\"低于成本\"），本引擎**不设阈值**\n\n**深度审查联动**：本地扫描是\"浅层快速筛\"，需要逐条法理分析和举证策略时，联动蒸馏姊妹 skill（需另行安装）：`bid-rejection-guard`（25条红线深度审查）、`bid-price-redline`（低于成本举证自救）、`multi-entity-bid-isolation`（多主体串标隔离 10 条清单）。\n\n## 报价闸门（v2.7）—— 出价前必须过的四道算式卡\n\n找到标、保住标之后，**最贵的教训在报价上**：沿用旧价没换算规模、单价算错量级、毛利倒挂——错的数字会被下游当成可信基数一路沿用。\n\n```bash\n# 第一次填一次参数库（最低工资 / 毛利红线 / 容差），只写本机，不上传\npython3 bidhunter.py quote params\npython3 bidhunter.py quote params --show      # 查看 + 过期提醒（默认 90 天）\n\n# 跑闸门：给什么算什么，缺什么列什么\npython3 bidhunter.py quote check --labor --heads 7 --months 12 --cost 200000 --quote 260000\npython3 bidhunter.py quote check --prior-amount 600000 --prior-scale 300 --new-scale 60 --quote 120000\npython3 bidhunter.py quote check --help\npython3 bidhunter.py quote --selftest\n```\n\n**四道算式卡**（任一道不过 → **禁止输出结论金额**）：\n\n| 卡 | 名称 | 判据 |\n|---|---|---|\n| C-1 | 品类清算价筛查 | 对手地板价 ≈ 当地月最低工资 × 人数 × 月数 × (1.10~1.25)。我方合规成本 ≥ 地板价下限 → 判「结构性陪跑」，直接不投 |\n| C2 | 规模换算（线性校验） | 新金额 ≈ 旧金额 × 新规模 ÷ 旧规模，偏差超容差即卡住——防的就是沿用旧价没换算 |\n| C3 | 单位单价校验 | 单价 = 总价 ÷ 数量，越出品类单价带即卡住 |\n| M1 | 毛利红线 | 毛利率 = (总价 − 成本) ÷ 总价，低于红线不得出价 |\n\n外加 5 项**算式扫不出来、必须人工确认**的核对卡：条款逐字读完、市场价带反推、服务模式逐项加减、敏感性分析覆盖全部变量、成本口径与服务口径配套。\n\n**闸门铁律**：\n- 结论只有三种：`已过闸门` / `禁止出价` / `参数待补`\n- **只有「已过闸门」才回显金额**；另外两种只给\"卡在哪 + 缺什么参数\"\n- 缺参数时**只允许交成本模型框架与参数待补清单，不得交带金额的报价函**\n- 参数库在 `~/.config/bidhunter/quote_params.json`（权限 600）；最低工资随年度调整，超期会自动提醒\n\n**边界**：闸门只做算式校验与清单提示，**不产生报价意见、不替代人工判断**，也不联网取数。\n\n## 系统组件（位于 `scripts/`）\n\n| 文件 | 作用 | 版本 |\n|---|---|---|\n| `bid_monitor.sh` | 采集（含自定义数据源加载） | base+A5 |\n| `qual_rules.json` | 资质规则库（**必须自定义**） | base+A4字段 |\n| `qual_check.py` | 比对引擎 + A1 评分/预算/行业提取 | v1.5 |\n| `report_text.py` / `report_html.py` | 文字/HTML 简报（含评分展示） | v1.5 |\n| `push_manager.py` / `config_wizard.py` | 推送+配置向导 | v1.2 |\n| `calendar.py` | A2 投标日历/倒计时提醒 | v1.5 |\n| `filter_multi.py` | A4 多维筛选 | v1.5 |\n| `rule_editor.py` | 零代码规则编辑器（HTTP） | v1.5 |\n| `doctor.py` | A6 诊断中心 | v1.5 |\n| `demo.py` + `samples/` | A7 示例模式 | v1.5 |\n| `faq.py` + `docs/FAQ.md` | A8 集中 FAQ | v1.5 |\n| `bidhunter.py` | A9 统一命令入口 | v1.5 |\n| `custom_source.py` + `sources.example.json` | A5 自定义数据源 | v1.5 |\n| `ai/minimax_client.py` | MiniMax 客户端（urllib，零依赖） | v2.0 |\n| `ai/doc_parser.py` | B1 标书解析 + **v2.8 结构感知分片 segment() + 覆盖率统计** | v2.0/v2.8 |\n| `ai/clause_extractor.py` | B1 条款抽取（**v2.8 分片全覆盖 + 规则引擎兜底 + 评分点逐项映射 + 分值守恒校验**） | v2.0/v2.8 |\n| `ai/risk_scanner.py` | B2 风险条款识别 | v2.0 |\n| `ai/doc_reader.py` | B1 总装：AI 速读 | v2.0 |\n| `ai/analytics.py` | A3 业主/品类画像 | v2.0 |\n| `ai/bid_advisor.py` | v2.5 投标策略建议（**v2.8 修 tuple 传参 bug + 无 key 降级**） | v2.5/v2.8 |\n| `api_server.py` / `webhook_publish.py` | v3.0 本地开放能力 | v3.0 |\n| `compliance/redlines.json` | C1 法定红线规则库（31条：A4/B14/C4/D3/E6） | v3.5 |\n| `compliance/compliance_scanner.py` | C1 合规红线扫描引擎（**v2.8 修 PDF/DOCX 静默失效 + LLM 分片**） | v3.5/v2.8 |\n| `quote_gate.py` | v2.7 报价闸门引擎（四道算式卡 + 5 项人工核对卡，零依赖零联网） | v2.7 |\n| `quote/gate.json` | v2.7 闸门规则与阈值（阈值数据化，改阈值不必改代码） | v2.7 |\n| `material_gap.py` | **v2.8 待补材料清单（G1）+ 零响应检测（G2），纯规则零 API** | v2.8 |\n\n## 已知坑点\n\n- **IM 发文件失败**：个人 IM 不支持发文件，只能文字。可视化网页供电脑浏览器看。\n- **list API 无截止日**：部分平台返回仅 id/title，截止日需 detail 接口（常 401），故只采集当天近似；日历日期从标题解析，未含明确日期的标归入\"待核实截止日\"。\n- **IP 限流**：连发约 20 次后可能 401/403，翻页 sleep 2s + 失败重试冷却 10s。\n- **匹配边界**：边界感知规则会挡掉词中误匹配（如\"电气设备\"里的\"电气\"因前有 CJK 被挡属正常防误匹配）。能力词尽量让其出现在词首边界可稳定命中。\n- **AI 依赖**：v2.0/v2.5 需配置 MiniMax API Key；未配置时 AI 功能自动跳过。**v2.8 起不配置也能出完整简报**（规则引擎兜底），只损失策略建议的文字部分。\n- **标书解析**：最佳效果需 `pip install PyPDF2 python-docx`（可选）；未装时 PDF 走正则降级、DOCX 可能解析不全。\n- **纯扫描件无文字层**：v2.8 起会明确报错并提示需 OCR，**不再静默降级为\"读了但其实没读\"**。\n- **覆盖率标注**：v2.8 起所有读标输出都带 `coverage_pct`。**若显示覆盖率明显低于 100%（例如文件解析后只剩零散片段），结论不可信，须换解析后端或先 OCR。**\n\n## 反馈（零成本，30 秒）\n\n| 方式 | 怎么用 | 说明 |\n|---|---|---|\n| **快速反馈** | `python3 bidhunter.py feedback` | 交互式问三句 → 自动格式化 → 写进剪贴板 → 打开平台评论页，粘贴即可 |\n| SkillHub 评论区 | <https://skillhub.cn/skills/user_7a89592b/bidhunter> | 公开讨论，作者可见 |\n| ClawHub 评论区 | <https://clawhub.ai/419597334-sudo/bidhunter> | 公开讨论，作者可见 |\n\n> 反馈模块**不上传任何数据**：全程只在本机生成文本、写剪贴板、唤起你的浏览器，无任何后端与网络请求。\n\n## 参考文档\n\n- `references/platforms.md`：支持平台清单、自定义数据源指南\n- `references/filter_rules.md`：筛选规则结构\n- `references/field_standard.md`：标讯字段标准\n- `docs/FAQ.md`：常见问题（`faq.py` 检索）\n- `samples/`：示例规则与模板（demo / 行业模板）\n\nFile v2.8.0:scripts/sources.presets/README.md\n\n# 采集源配置指引\n\n> **为什么本 skill 不内置任何真实平台源？**\n>\n> 内置源一旦失效（改版 / 加鉴权 / 关停），用户首跑直接失败，反而比没有更糟。\n> 所以 BidHunter 的做法是：**给模板 + 给清单，不给现成答案**——你把要盯的平台填进来，\n> 它就是你自己的监控器，不依赖我们维护。\n\n---\n\n## 三步接入\n\n1. **选模式**：`json_api.json` / `rss.json` / `html_list.json`，按目标平台挑一个\n2. **改 URL 和字段**：把模板里的 `YOUR-DOMAIN` 换成真实域名，按返回结构改 `items_path` / `fields`\n3. **合并进 `sources.json`**：把改好的对象放进 `sources` 数组（可以放多个平台）\n\n`init` 已经帮你在 `scripts/sources.json` 生成了骨架，直接往 `sources` 数组里加即可\n（`bid_monitor.sh` 会自动加载 `scripts/sources.json`）。\n\n---\n\n## 常见平台清单（自行确认当前网址与可用性）\n\n> 下列仅为**品类提示**，具体网址与接口请以平台当前实际情况为准，本 skill 不保证其可用性。\n\n| 品类 | 说明 |\n|---|---|\n| 中国政府采购网 | 中央及地方政采公告，通常有列表页，部分地区提供 RSS |\n| 全国公共资源交易平台 | 各省有独立子站，按你所在省找对应入口 |\n| 省级 / 市级公共资源交易中心 | 工程、采购、土地矿权分类，多数有 HTML 列表页 |\n| 央企电子采购平台 | 能源、通信、建筑类央企各有自建平台，需自行注册查看公开公告区 |\n| 行业性招标平台 | 如机电产品、医疗器械等垂类平台 |\n\n**找源的小技巧**：打开平台列表页 → F12 → Network → 翻一页 → 看哪个请求返回了公告数据。\n那个请求的 URL 就是你要的 `url`，返回的 JSON 结构就是 `items_path` / `fields` 的依据。\n\n---\n\n## 合规提醒（重要）\n\n- 采集前确认目标站点的 `robots.txt` 与内容版权声明\n- 只采集**公开可访问**的页面，不要尝试绕过登录或鉴权\n- 控制请求频率，避免对目标站点造成压力\n- 采集内容仅供内部商机研判，二次传播前请自行评估版权风险\n\n---\n\n## 不想配源？先跑起来\n\n配源不是必须的。丢一份招标文件进来就能出结果：\n\n```bash\npython3 bidhunter.py paste <招标文件.pdf>\n```\n\n走合规红线扫描，**不需要 AI key、不需要采集源、离线可跑**，31 条法定废标红线本地扫描。\n\nFile v2.8.0:_meta.json\n\n{\n  \"ownerId\": \"kn79pvem3czfg69e3mx7gezyp1865jf9\",\n  \"slug\": \"bidhunter\",\n  \"version\": \"2.8.0\",\n  \"publishedAt\": 1791273027665\n}\n\nFile v2.8.0:references/field_standard.md\n\n# 标讯字段标准化 Schema\n\n## 核心字段定义\n\n| 字段名 | 类型 | 说明 | 示例 |\n|---|---|---|---|\n| `bid_id` | string | 标讯唯一标识（平台+原始ID） | `cnooc_12345` |\n| `source_platform` | string | 来源平台编码 | `cnooc` |\n| `source_url` | string | 原始链接 | `https://...` |\n| `title` | string | 项目名称 | `渤海某油田FPSO工程EPC总包` |\n| `content_text` | string | 正文纯文本（前5000字） | `...` |\n| `content_html` | string | 原始HTML（存档） | `...` |\n| `publish_time` | string | 公告发布时间（ISO 8601） | `2024-03-01T10:00:00+08:00` |\n| `deadline_time` | string | 投标截止时间 | `2024-03-15T09:00:00+08:00` |\n| `bid_open_time` | string | 开标时间 | `2024-03-15T09:30:00+08:00` |\n| `budget_amount` | number | 预算金额（元，标准化） | `420000000` |\n| `budget_amount_raw` | string | 原始金额字符串 | `4.2亿元` |\n| `currency` | string | 币种 | `CNY` |\n| `purchaser_name` | string | 采购单位名称（标准化） | `某某有限公司天津分公司` |\n| `purchaser_address` | string | 采购单位地址 | `天津市滨海新区...` |\n| `purchaser_contact` | string | 联系人及方式 | `张三 022-XXXX` |\n| `agency_name` | string | 招标代理机构 | `某某招标有限公司` |\n| `bid_type` | string | 项目类型编码 | `engineering` / `goods` / `service` |\n| `bid_method` | string | 采购方式编码 | `public_tender` / `invitation` / `inquiry` |\n| `region_code` | string | 地区编码（国家统计局6位码） | `120116` |\n| `industry_code` | string | 行业编码 | `B07` |\n| `qualification_requirements` | array | 资质要求 | `[\"一级资质\", \"安全生产许可证\"]` |\n| `attachment_list` | array | 附件清单 | `[{\"name\": \"招标文件.pdf\", \"size\": 10240000, \"url\": \"...\"}]` |\n| `status` | string | 标讯状态 | `new` / `updated` / `expired` / `opened` / `cancelled` |\n| `crawl_time` | string | 采集时间 | `2024-03-01T10:05:00+08:00` |\n| `crawl_version` | string | 解析规则版本 | `1.0` |\n\n## 判定结果字段\n\n| 字段名 | 类型 | 说明 | 取值 |\n|---|---|---|---|\n| `verdict` | string | 资质判定结果 | `investable` / `not_investable` / `needs_review` / `skip` |\n| `reason` | string | 判定原因 | `主体能力匹配：广告, 活动` / `红色预警：建筑施工` |\n| `assigned_entity` | string | 归属投标主体 | `entity_a` / `entity_b` |\n| `assigned_entity_name` | string | 归属投标主体名称 | `主体A（传媒/活动类）` |\n| `matched_capabilities` | array | 匹配到的能力词 | `[\"广告\", \"活动策划\"]` |\n| `region_info` | object | 地区信息 | `{\"is_priority\": true, \"region\": \"天津\"}` |\n\n## 金额标准化规则\n\n原始金额字符串 → 标准化元数值：\n\n| 原始格式 | 标准化结果 |\n|---|---|\n| `4.2亿元` | `420000000` |\n| `500万元` | `5000000` |\n| `300万` | `3000000` |\n| `1.2亿` | `120000000` |\n| `未填写` / 空 | `null` |\n\n## 地区编码\n\n使用国家统计局 6 位行政区划编码：\n\n| 编码 | 地区 |\n|---|---|\n| `110000` | 北京市 |\n| `120000` | 天津市 |\n| `310000` | 上海市 |\n| `440000` | 广东省 |\n| `510000` | 四川省 |\n| ... | ... |\n\n完整编码表参考国家统计局最新版行政区划代码。\n\n## 行业分类编码\n\n采用 GB/T 4754《国民经济行业分类》：\n\n| 编码 | 行业 |\n|---|---|\n| `B07` | 石油和天然气开采业 |\n| `B08` | 黑色金属矿采选业 |\n| `E48` | 土木工程建筑业 |\n| `I63` | 电信、广播电视和卫星传输服务 |\n| ... | ... |\n\nFile v2.8.0:references/filter_rules.md\n\n# 筛选规则结构与条件维度\n\n## 规则组结构\n\n规则组支持多组并行运行：\n\n```\n规则组（多组并行）\n├── 规则组名称：如\"海上工程总包\"\n├── 启用状态：启用/停用\n├── 匹配逻辑：AND（全部满足）/ OR（任一满足）\n├── 筛选条件（见下表）\n├── 输出设置：推送通道 + 输出格式\n└── 优先级：1-10（同一条标讯匹配多规则时，按优先级去重）\n```\n\n## 资质判定优先级（高 → 低）\n\n1. **★服务类型门禁**（v1.2）：采购标的的服务类型优先于项目名里的动词\n2. **★子串红警**（v1.2）：不受 CJK 边界限制的强制拦截词\n3. **special_rules 覆盖**：如\"某类标外找资质可投\"、\"某类标垫资不参与 → skip\"\n4. **红色预警命中** → 不可投 + 原因\n5. **主体能力匹配** → 可投（按主体能力词归属投标公司）\n6. **都不命中** → 需确认\n\n## ★v1.2 修正（2026-09-11，案例 614535）\n\n### 一、服务类型门禁 service_type_gate\n\n**采购标的的服务类型，优先于项目名里的动词关键词。**\n\n项目名常把真正的服务类型藏在修饰语后面：\n\n| 项目名 | 真正的标的 | 错误判定 | 正确判定 |\n|---|---|---|---|\n| 楼宇安全整治**维修改造**项目**监理服务** | 监理服务 | 按\"维修\"命中→可投 | **不可投**（无监理资质） |\n| XX项目**设计服务** | 设计服务 | 按\"施工/改造\"命中 | 需确认 |\n\n配置项 `service_type_gate.blocked_types`：监理（不可投）／设计·勘察／检测／审计·评估·造价咨询·招标代理（需确认）。\n**资质序列不可跨用**：施工总承包资质 ≠ 监理资质；且施工单位投同一项目监理通常有**回避要求**。\n\n### 二、匹配边界陷阱（重要）\n\n`smart_match` 的左边界规则要求**关键词前一字符不得为中日韩字符**，导致出现在标题**中部**的关键词永远匹配不到：\n\n- ❌ \"…零星**维修**服务\" → \"维修\"前是\"星\"→ 漏判（该投的标被判\"需确认\"）\n- ❌ \"…消防设施改造\" → \"消防\"前是\"厂\"→ 红警漏拦\n\n**修正**：\n1. `_match_loose: true` → 能力词改用**纯子串匹配**（漏判代价 > 误判代价，假阳性由 `_exclude_contexts` 过滤）\n2. `substring_alerts` → 高风险资质词（消防/电梯/压力容器/特种设备/爆破/危险品/劳务派遣/保安服务/测绘/勘察/钻井/修井等）强制子串拦截\n3. 已知保留项：`skip_procurement` 的\"采购\"**仍用严格匹配**——因\"XX服务采购\"是服务标常见命名，宽松会误杀大量可投标；若要拦物资采购标，请改用\"物资采购/采购项目/采办\"等更特异的关键词\n\n### 三、自检命令\n\n```bash\npython3 qual_check.py --validate-rules qual_rules.json   # 规则库体检\n```\n\n判定回归用例（改规则后必跑）：监理标→不可投、消防标→不可投、设计标→需确认、零星维修标→可投。\n\n## 筛选条件维度\n\n| 维度 | 条件类型 | 运算符 | 输入示例 |\n|---|---|---|---|\n| 关键词 | 标题包含 | 包含任意/全部包含/不包含 | `FPSO OR \"浮式生产\" NOT \"退役\"` |\n| 关键词 | 正文包含 | 同上 | `\"一级资质\" AND \"安全生产许可证\"` |\n| 关键词 | 附件名称包含 | 包含任意 | `技术规格书 OR 图纸` |\n| 地区 | 项目所在地 | 省/市多选、排除、半径圈选 | `天津市, 青岛市, 半径50km` |\n| 地区 | 采购单位所在地 | 同上 | `北京市海淀区` |\n| 金额 | 预算金额 | ≥ / ≤ / 区间 / 未填写 | `500万-5000万` |\n| 金额 | 最高限价 | 同上 | `≥1亿` |\n| 时间 | 公告发布时间 | 近N天 / 日期范围 | `近7天` |\n| 时间 | 投标截止时间 | ≥N天后 / 日期范围 | `截止≥7天后` |\n| 时间 | 开标时间 | 同上 | `2024-03-01 至 2024-06-30` |\n| 项目属性 | 项目类型 | 多选 | `工程, 货物` |\n| 项目属性 | 采购方式 | 多选 | `公开招标, 邀请招标` |\n| 项目属性 | 行业领域 | 多选 | `石油化工, 海洋工程` |\n| 资质要求 | 要求资质 | 包含/不包含 | `海洋石油工程专业承包一级` |\n| 资质要求 | 资质等级 | ≥ / = / ≤ | `≥二级` |\n| 业主画像 | 采购单位 | 白名单/黑名单 | `包含: 某某分公司` |\n| 业主画像 | 历史合作 | 是否合作过 | `仅显示合作过业主` |\n\n## 规则冲突处理\n\n当一条标讯同时匹配多个规则组时：\n\n1. **分别输出**（默认）：用户收到多条推送，标注所属规则组\n2. **仅保留高优先级**：配置去重模式\n3. **合并为一条**：标注\"多规则匹配\"\n\n## qual_rules.json 结构说明\n\n```json\n{\n  \"version\": \"1.0\",\n  \"entities\": {\n    \"entity_a\": {\n      \"name\": \"主体A名称\",\n      \"capabilities\": [\"关键词1\", \"关键词2\"],\n      \"note\": \"替换为营业执照经营范围关键词\"\n    }\n  },\n  \"red_alerts\": [\"车辆维修\", \"劳务派遣\", \"...\"],\n  \"special_rules\": [\n    {\n      \"id\": \"rule_id\",\n      \"description\": \"规则描述\",\n      \"match_keywords\": [\"关键词\"],\n      \"action\": \"skip|investable|not_investable\",\n      \"assigned_entity\": \"entity_a\",\n      \"reason\": \"原因说明\"\n    }\n  ],\n  \"skip_keywords_result\": [\"结果公示\", \"中标公示\"],\n  \"region_priority\": {\n    \"high\": [\"天津\", \"青岛\"],\n    \"note\": \"按需填写重点地区\"\n  }\n}\n```\n\n## 推送策略\n\n| 策略 | 说明 | 配置 |\n|---|---|---|\n| 即时推送 | 单条标讯匹配后立即推送 | 仅高优先级规则组/紧急标讯 |\n| 定时汇总 | 按固定时间合并推送 | 每日9:00 / 每周一9:00 |\n| 智能合并 | 同规则组多条标讯合并为一条消息 | 阈值：5条或间隔30分钟 |\n| 免打扰时段 | 指定时间不推送 | 默认22:00-08:00 |\n| 去重窗口 | 同一标讯N天内不重复推送 | 默认30天 |\n\nFile v2.8.0:references/platforms.md\n\n# 支持平台清单与配置\n\n## 内置平台适配器\n\n以下平台已在 `bid_monitor.sh` 中实现采集适配器：\n\n| 平台编码 | 平台名称 | 网址 | 采集方式 | 认证要求 | 状态 |\n|---|---|---|---|---|---|\n| `cnooc` | 中海油采办业务管理与交易系统 | bid.cnooc.com.cn | API (JSON) | ~~免登录~~ **现需鉴权** | 🔴 **2026-09-02 实测失效** |\n| `cebpubservice` | 中国招标投标公共服务平台 | ctbpsp.com | API (JSON POST) | 免登录 | 🔴 **2026-09-02 实测失效**（404） |\n| `ccgp` | 中国政府采购网 | ccgp.gov.cn | HTML 解析 | 免登录 | ✅ 可用 |\n\n### ⚠️ 数据源实测状态（2026-09-02 更新）\n\n三个内置源实测结果，**两个已失效**，依赖它们的每日简报会漏标：\n\n| 源 | 实测现象 | 根因 |\n|---|---|---|\n| `cnooc` | curl 请求稳定返回 **401 Authorization Required**（nginx 层）；真实浏览器访问返回 **502 Bad Gateway**。`/`、`/home/`、`/api/v1/bid/list` 全路径均不可达 | 网关/WAF 拦截（DNS 已 CNAME 至 `bid.cnooc.com.cn.wsdvs.com`），源站对当前网络无响应 |\n| `cebpubservice` | POST `/cutomNoticeApi/getNoticeList` → **404** | 上游接口路径已变更 |\n| `ccgp` | HTTP 200，可访问 | ✅ 正常。但注意：**中海油/央企属企业招标，不走政采**，搜\"海油\"关键词返回 0 条，无法作为海油标的替代源 |\n\n**处置建议：**\n1. `cnooc` 适配器暂时停用，避免静默返回 0 条造成\"今天没标\"的误判\n2. 中海油标的替代路径：① 用已登录浏览器会话 + 浏览器自动化抓取（需先确认本地网络能否访问）② 第三方招标聚合平台 ③ 海油各子公司自有发布渠道\n3. 恢复抓取前，先用 `curl -o /dev/null -w \"%{http_code}\" https://bid.cnooc.com.cn/` 探活，返回 200 再启用\n\n## 计划适配平台\n\n以下平台已识别但尚未实现适配器，可按\"自定义数据源\"流程接入：\n\n| 平台类别 | 平台名称 | 网址 | 技术难点 | 优先级 |\n|---|---|---|---|---|\n| 央企招采 | 中石油电子招标投标平台 | bid.cnpcbidding.com | 需注册账号 | P0 |\n| 央企招采 | 中石化物资采购电子商务平台 | sourcing.sinopec.com | 需企业认证 | P0 |\n| 央企招采 | 国家电网电子商务平台 | ecp.sgcc.com.cn | 需电子钥匙 | P1 |\n| 央企招采 | 中国南方电网阳光电子商务平台 | bidding.csg.cn | 需注册 | P1 |\n| 能源电力 | 中国华能集团电子商务平台 | ec.chng.com.cn | 需注册 | P1 |\n| 能源电力 | 中国大唐集团电子采购平台 | cdt-ec.com | 需注册 | P1 |\n| 能源电力 | 国家电投电子商务平台 | eptp.com.cn | 需注册 | P1 |\n| 能源建设 | 中国能建电子采购平台 | ec.ceec.net.cn | 需注册 | P1 |\n| 能源建设 | 中国电建招标与采购网 | powerchina.cn | 需注册 | P1 |\n| 公共资源 | 全国公共资源交易平台 | ggzyjyw.com | 数据聚合，需解析 | P0 |\n| 公共资源 | 各省市公共资源交易中心 | 分省平台 | 模板差异极大 | P1 |\n| 行业垂直 | 军队采购网 | plap.mil.cn | 需军队供应商库资质 | P2 |\n| 行业垂直 | 铁路建设工程网 | railway.cn | 需注册 | P2 |\n| 行业垂直 | 民航专业工程招标投标管理系统 | caac.gov.cn | 访问受限 | P2 |\n\n## 平台适配器开发规范\n\n每个适配器需实现一个 `fetch_<platform>()` bash 函数：\n\n1. **输入**：`$1` = 目标日期 (YYYY-MM-DD)\n2. **输出**：JSON lines 到 stdout，每行一条公告\n3. **格式**：\n   ```json\n   {\n     \"id\": \"公告唯一标识\",\n     \"title\": \"项目名称\",\n     \"source\": \"平台编码\",\n     \"url\": \"详情页链接\",\n     \"publish_time\": \"发布时间\"\n   }\n   ```\n4. **注意事项**：\n   - 翻页时 sleep 2s 防限流\n   - 401/403 时冷却 10s 重试一次\n   - 过滤结果公示类（中标/成交公告）\n   - 只采集当天发布（近似排除已开标标）\n\n## 自定义数据源（v1.5 新增 · 零代码扩平台）\n\n不想写 bash 适配器？用 `sources.json` 配置即可接入任意平台。`bid_monitor.sh` 运行时若发现 `sources.json` 会自动加载。\n\n**步骤**：\n1. 复制 `scripts/sources.example.json` → `scripts/sources.json`\n2. 按你的平台改 `name` / `url` / `mode` / `fields`\n3. 支持三种模式：\n   - `json`：接口返回 JSON，`items_path` 指向数组路径，`fields` 映射字段\n   - `rss`：标准 RSS/Atom（`item`/`link`/`title`/`pubDate`）\n   - `html`：列表页，自动抓取含「招标/采购/投标」等关键词的 `<a>` 链接\n4. 测试：`bash bid_monitor.sh --fresh`（会自动包含 custom 源）\n\n> 示例（某gov平台 JSON 接口）：\n> ```json\n> {\"name\":\"my_gov\",\"mode\":\"json\",\"url\":\"https://x/api/notice?date={DATE}\",\n>  \"items_path\":\"data.list\",\"fields\":{\"id\":\"id\",\"title\":\"title\",\"url\":\"url\"},\n>  \"url_prefix\":\"https://x/detail?id=\"}\n> ```\n\n## 计划适配平台（可经自定义数据源或适配器接入）\n\n| 平台类别 | 平台名称 | 网址 | 接入方式 | 优先级 |\n|---|---|---|---|---|\n| 央企招采 | 中石油电子招标投标平台 | bid.cnpcbidding.com | 账号/自定义json | P0 |\n| 央企招采 | 中石化物资采购电子商务平台 | sourcing.sinopec.com | 企业认证/自定义 | P0 |\n| 央企招采 | 国家电网电子商务平台 | ecp.sgcc.com.cn | 电子钥匙/自定义 | P1 |\n| 央企招采 | 中国南方电网阳光电子商务平台 | bidding.csg.cn | 注册/自定义 | P1 |\n| 能源电力 | 中国华能/大唐/国家电投电子商务平台 | 见各官网 | 注册/自定义 | P1 |\n| 能源建设 | 中国能建/中国电建招标采购网 | ec.ceec.net.cn / powerchina.cn | 注册/自定义 | P1 |\n| 公共资源 | 全国公共资源交易平台 | ggzyjyw.com | 数据聚合/自定义html | P0 |\n| 公共资源 | 各省市公共资源交易中心 | 分省平台 | 模板差异大/自定义 | P1 |\n| 行业垂直 | 军队采购网 | plap.mil.cn | 军队供应商库 | P2 |\n| 行业垂直 | 铁路建设工程网 / 民航专业工程系统 | railway.cn / caac.gov.cn | 注册/受限 | P2 |\n\n> v1.5 起\"平台覆盖\"短板通过「自定义数据源」机制补强：内置 3 个适配器 + 用户可零代码接入任意公开接口。需要官方内置某平台可在 ClawHub/SkillHub 反馈，我们按 P0 优先级实现。\n\n## 适配器开发规范（进阶）\n\n每个 bash 适配器需实现 `fetch_<platform>()` 函数（详见上文\"平台适配器开发规范\"）。自定义数据源已覆盖绝大多数场景，仅在接口鉴权复杂时才需写适配器。\n\n## detail_url_template\n\n各平台详情页链接格式：\n\n| 平台 | 模板 |\n|---|---|\n| cnooc | `https://bid.cnooc.com.cn/home/#/newsAlertDetails?index=0&childrenActive=1&id={ID}&type=null` |\n| cebpubservice | `https://ctbpsp.com/#/noticeDetail?id={ID}` |\n| ccgp | 从列表页 HTML 中直接提取 |\n\n## 数据源配置项\n\n每个平台适配器支持的配置：\n\n- **启用/停用**：在 `PLATFORMS` 数组中增删\n- **监控范围**：在 `fetch_<platform>()` 函数中调整 API 参数\n- **采集深度**：标题+摘要（默认）/ 全文+附件列表（需 detail 接口）\n- **更新频率**：通过定时任务配置（默认每日）\n- **认证配置**：免登录（默认）/ 账号 / CA证书（需自行实现）\n\nFile v2.8.0:references/setup-guide.md\n\n# BidHunter 配置指南（依赖型 Skill 标准件）\n\n本 Skill 核心流程（采集、资质比对、评分、日历、筛选、规则编辑器、诊断、FAQ、示例、统一入口）**零外部依赖**，开箱即用。以下仅配置「可选增强」。\n\n环境检查（只读，不泄露凭据值）：\n\n```bash\npython3 scripts/check_environment.py\n```\n\n---\n\n## 一、资质规则库（必填，非外部依赖）\n\n编辑 `scripts/qual_rules.json` 填入你的投标主体与能力词：\n\n- 零代码：运行 `python3 bidhunter.py rules edit` → 浏览器图形化编辑，内置「能源/建筑/IT/市政」行业模板一键预填\n- 或复制 `scripts/samples/demo_rules.json` 改\n- 校验：`python3 qual_check.py --validate-rules qual_rules.json`\n\n不填则 `doctor` 会报 E002（仍为示例占位），基础采集可用但比对全为「需确认」。\n\n---\n\n## 二、MiniMax API（可选 · v2.0+ AI 能力）\n\n依赖 id：`minimax-api`\n\n用途：AI 速读标书、风险条款识别、投标策略建议。仅消耗你的 API 余额，无云端。\n\n官方入口：\n\n- 产品主页：https://www.minimaxi.com/\n- 开放平台登录：https://platform.minimaxi.com/login\n- 接口密钥页：https://platform.minimaxi.com/user-center/basic-information/interface-key\n- 接口文档：https://platform.minimaxi.com/document/guides/chat-model/V2\n\n1. 注册并登录开放平台账号\n2. 获取密钥：账户管理 → 接口密钥 → 创建密钥（只申请文本模型调用权限）\n3. 写入本地配置文件（权限自动 600，密钥不回显、不上传）：\n\n   ```bash\n   mkdir -p ~/.config/bidhunter\n   cat > ~/.config/bidhunter/ai.json <<'EOF'\n   {\"api_key\":\"你的MiniMaxKey\",\"group_id\":\"可选\",\"model\":\"MiniMax-M2.7\",\"base_url\":\"https://api.minimaxi.com/v1/chat/completions\"}\n   EOF\n   chmod 600 ~/.config/bidhunter/ai.json\n   ```\n\n4. 最小验证：\n\n   ```bash\n   python3 -c \"from scripts.ai.minimax_client import MiniMaxClient; MiniMaxClient.from_config(); print('OK')\"\n   ```\n\n安全：密钥仅存本地文件；轮换/撤销在 MiniMax 控制台操作；本 Skill 不向任何第三方发送你的数据。\n\n降级：未配置时 AI 功能自动跳过，基础采集研判不受影响。\n\n---\n\n## 三、多通道推送（可选 · v1.2）\n\n用途：把日报推到钉钉 / 企业微信 / 邮件。本项是纯本地配置能力，不绑定任一第三方服务账号，因此未列入依赖清单；缺失时只影响推送，不影响核心流程。\n\n```bash\npython3 config_wizard.py        # 交互式，未通过连通性测试不写入\npython3 config_wizard.py --show # 脱敏查看当前配置\n```\n\n- 钉钉：群设置 → 智能群助手 → 自定义机器人 → 加签（推荐）\n- 企业微信：群聊 → 群机器人 → 复制 Webhook\n- 邮件：SMTP（如 QQ 邮箱用授权码，非登录密码）\n\n配置文件 `~/.config/bidhunter/push.json` 权限 600，密码/密钥脱敏显示。\n\n降级：未配置时仅生成报告文件，不推送。\n\n---\n\n## 四、标书解析依赖（可选 · v2.0 最佳效果）\n\n依赖 id：`pdf-docx-runtime`\n\n官方包页：https://pypi.org/project/PyPDF2/ 、 https://pypi.org/project/python-docx/\n\n```bash\npip install -r requirements.txt   # PyPDF2 + python-docx\n```\n\n降级：未装时 PDF 走正则抽取（部分文本）、DOCX 可能解析不全，仍走 AI 流程但质量下降。\n\n---\n\n## 五、常见问题\n\n- **Q：必须联网吗？** 采集需要访问招投标平台；其余（比对/评分/日历/规则编辑/诊断/FAQ）全本地。\n- **Q：会外传我的标讯或资质吗？** 不会。所有比对/评分/画像在本地完成；AI 仅把标书文本发往你自己的 MiniMax Key 对应的 API。\n- **Q：配置失败会破坏什么吗？** 不会。检查只读，写入前均连通性测试或原子备份。\n\nFile v2.8.0:scripts/compliance/redlines.json\n\n{\n  \"schema\": \"bidhunter-compliance-redlines/v1\",\n  \"version\": \"3.5.0\",\n  \"updated\": \"2026-09-08\",\n  \"legal_basis\": [\n    \"《中华人民共和国招标投标法》（2017修正）\",\n    \"《中华人民共和国招标投标法实施条例》（2019修订）\",\n    \"《评标委员会和评标方法暂行规定》（七部委12号令，2013修订）\"\n  ],\n  \"disclaimer\": \"本规则库为法规条文的机器可读索引，用于本地风险提示。不构成法律意见，最终判定以招标文件、评标委员会认定及有权机关解释为准。法规未给出量化标准的（如『低于成本』），本库不设阈值。\",\n  \"usage_note\": \"tender_patterns 用于扫描【招标文件】找埋雷；bid_patterns 用于扫描【投标文件】找致命项；manual=true 表示纯人工核对项，正则扫不出来。\",\n\n  \"categories\": {\n    \"A\": {\"name\": \"拒收/不予受理\", \"phase\": \"交标现场\", \"decider\": \"招标人/代理机构\", \"consequence\": \"当场拒收，进不了评标\"},\n    \"B\": {\"name\": \"否决投标\", \"phase\": \"评标阶段\", \"decider\": \"评标委员会\", \"consequence\": \"该份投标出局\"},\n    \"C\": {\"name\": \"投标无效\", \"phase\": \"全程（法定自始无效）\", \"decider\": \"无需认定\", \"consequence\": \"相关投标均无效\"},\n    \"D\": {\"name\": \"反向保护条款（盾牌）\", \"phase\": \"维权\", \"decider\": \"投标人主张\", \"consequence\": \"可据此质疑/投诉\"},\n    \"E\": {\"name\": \"多主体串标隔离\", \"phase\": \"评审/调查\", \"decider\": \"评标委员会/行政监督\", \"consequence\": \"视为串通投标，中标无效\"}\n  },\n\n  \"redlines\": [\n    {\n      \"id\": \"A01\", \"category\": \"A\", \"name\": \"逾期送达 / 未在截止时间前送达\",\n      \"legal_basis\": \"实施条例第36条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"投标截止(时间|日期)\", \"递交(投标)?文件(的)?截止\", \"逾期(送达|递交)\"],\n      \"bid_patterns\": [],\n      \"check\": \"核对招标文件载明的截止时间与递交方式（现场/邮寄/电子平台），预留≥2小时缓冲\",\n      \"remedy\": \"无。逾期即拒收，不可申辩。建议交标前一日完成装订\"\n    },\n    {\n      \"id\": \"A02\", \"category\": \"A\", \"name\": \"未通过资格预审仍提交投标文件\",\n      \"legal_basis\": \"实施条例第36条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"资格预审\", \"通过资格预审的申请人\", \"未通过资格预审\"],\n      \"bid_patterns\": [],\n      \"check\": \"确认已收到资格预审合格通知书；未通过者不得投标\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"A03\", \"category\": \"A\", \"name\": \"未按招标文件要求密封 / 标记\",\n      \"legal_basis\": \"实施条例第36条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"密封\", \"封套\", \"标记\", \"加盖(骑缝|密封)章\"],\n      \"bid_patterns\": [],\n      \"check\": \"逐项比对密封、封套标注、骑缝章、正副本份数要求\",\n      \"remedy\": \"交标现场前可补救；一旦递交不可补\"\n    },\n    {\n      \"id\": \"A04\", \"category\": \"A\", \"name\": \"递交方式/平台不符合要求\",\n      \"legal_basis\": \"实施条例第36条；电子招投标办法\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"电子(招标)?投标\", \"递交(至|到).{0,10}(平台|系统)\", \"CA(证书|锁|签章)\"],\n      \"bid_patterns\": [],\n      \"check\": \"电子标确认 CA 锁有效、文件已成功上传并解密测试通过\",\n      \"remedy\": \"无\"\n    },\n\n    {\n      \"id\": \"B01\", \"category\": \"B\", \"name\": \"投标文件未经投标单位盖章和单位负责人签字\",\n      \"legal_basis\": \"实施条例第51条第(一)项；12号令第25条第(二)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"(签字|签章).{0,6}(并|和).{0,6}(盖章|加盖)\", \"法定代表人(或|和)授权代表(签字|签章)\", \"逐页(签字|盖章|小签)\"],\n      \"bid_patterns\": [\"(未|漏|缺少).{0,8}(盖章|签字|签章)\"],\n      \"check\": \"『盖章和签字』是并列关系，缺一即触发。逐页检查要求小签/盖章处\",\n      \"remedy\": \"装订前完成；这是废标率最高且完全不可申辩的一项\"\n    },\n    {\n      \"id\": \"B02\", \"category\": \"B\", \"name\": \"联合体未提交共同投标协议\",\n      \"legal_basis\": \"实施条例第51条第(二)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"联合体\", \"共同投标协议\", \"联合体(各方|成员)\"],\n      \"exclude_patterns\": [\"(不|不予)?接受联合体\", \"不接受.{0,8}联合体\", \"禁止联合体\", \"不得(以)?联合体\"],\n      \"exclude_note\": \"招标文件明确不接受联合体投标时，本条不适用\",\n      \"bid_patterns\": [\"联合体\"],\n      \"check\": \"联合体各方须签署共同投标协议并随投标文件提交\",\n      \"remedy\": \"无（形式要件，属重大偏差，不补正即废）\"\n    },\n    {\n      \"id\": \"B03\", \"category\": \"B\", \"name\": \"不符合国家或招标文件规定的资格条件\",\n      \"legal_basis\": \"实施条例第51条第(三)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"(资质|资格)(要求|条件)\", \"(须|应|必须)(具有|具备)\", \"业绩(要求|条件)\", \"注册资本\", \"安全生产许可证\"],\n      \"bid_patterns\": [],\n      \"check\": \"逐条比对资质等级/业绩/人员/财务门槛，标红缺口\",\n      \"remedy\": \"缺项无法补；只能换有资质的主体或放弃\"\n    },\n    {\n      \"id\": \"B04\", \"category\": \"B\", \"name\": \"同一投标人提交两个以上不同的投标文件或报价\",\n      \"legal_basis\": \"实施条例第51条第(四)项\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"备选(投标|方案)\", \"只允许(提交)?一个(投标)?(文件|报价)\"],\n      \"bid_patterns\": [],\n      \"check\": \"除招标文件明确允许备选方案外，只能有一份投标文件/一个报价\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"B05\", \"category\": \"B\", \"name\": \"报价低于成本或高于最高投标限价\",\n      \"legal_basis\": \"实施条例第51条第(五)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"最高(投标)?限价\", \"招标控制价\", \"超过.{0,8}限价.{0,10}(否决|废|无效)\", \"低于成本\"],\n      \"bid_patterns\": [],\n      \"check\": \"【上限硬】超过最高限价直接否决，无解释空间；【下限软】低于成本须经『要求说明→举证→举证不能才否决』三步\",\n      \"remedy\": \"超限必废；低于成本有法定举证窗口，见 bid-price-redline\"\n    },\n    {\n      \"id\": \"B06\", \"category\": \"B\", \"name\": \"未对招标文件的实质性要求和条件作出响应（兜底条款）\",\n      \"legal_basis\": \"实施条例第51条第(六)项；12号令第25条第(七)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"实质性(要求|条款|响应)\", \"(必须|应|不得).{0,20}\", \"承诺函\", \"偏离表\"],\n      \"bid_patterns\": [\"偏离\", \"无偏离\", \"不响应\"],\n      \"check\": \"凡用『必须/应/不得』表述或标注『实质性条款』的，逐条做『要求→投标文件对应位置』对照表。这是实务中『莫名其妙被废』的主因\",\n      \"remedy\": \"逐条响应；技术参数偏离须在偏离表中说明\"\n    },\n    {\n      \"id\": \"B07\", \"category\": \"B\", \"name\": \"串通投标、弄虚作假、行贿等违法行为\",\n      \"legal_basis\": \"实施条例第51条第(七)项；第39-42条\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"串通\", \"弄虚作假\", \"行贿\", \"以他人名义\"],\n      \"exclude_patterns\": [\"无行贿\", \"无.{0,6}犯罪记录\", \"行贿犯罪记录承诺\"],\n      \"exclude_note\": \"『无行贿犯罪记录承诺函』是常规合规文件，不构成行贿行为\",\n      \"bid_patterns\": [],\n      \"check\": \"多主体投标必查，见 E 类六项客观推定\",\n      \"remedy\": \"无（中标无效+罚款+取消投标资格）\"\n    },\n    {\n      \"id\": \"B08\", \"category\": \"B\", \"name\": \"未提供投标担保或担保有瑕疵\",\n      \"legal_basis\": \"12号令第25条第(一)项\",\n      \"severity\": \"致命\", \"manual\": false,\n      \"tender_patterns\": [\"投标(保证金|担保)\", \"(保函|保险)\", \"基本(存款)?账户(转出|汇出)\"],\n      \"bid_patterns\": [],\n      \"check\": \"金额、形式（转账/保函）、到账时间、是否从基本账户转出，四项全对\",\n      \"remedy\": \"无（形式要件，重大偏差）\"\n    },\n    {\n      \"id\": \"B09\", \"category\": \"B\", \"name\": \"完成期限（工期）超过招标文件规定\",\n      \"legal_basis\": \"12号令第25条第(三)项\",\n      \"severity\": \"致命\", \"manual\": true,\n      \"tender_patterns\": [\"(工期|交货期|服务期)(要求)?\", \"(须|应|不得)超过.{0,8}(天|日|月)\"],\n      \"bid_patterns\": [],\n      \"check\": \"投标工期 ≤ 招标要求工期；含节点工期\",\n      \"remedy\": \"无\"\n    },\n    {\n      \"id\": \"B10\", \"category\": \"B\", \"name\": \"明显不符合技术规格、技术标准\",\n      \"legal_basis\": \"12号令\n\nArchive v2.7.0: 53 files, 142221 bytes\n\nFiles: references/field_standard.md (3541b), references/filter_rules.md (5854b), references/platforms.md (7283b), references/setup-guide.md (3831b), requirements.txt (248b), scripts/ai/analytics.py (3449b), scripts/ai/bid_advisor.py (4446b), scripts/ai/clause_extractor.py (2719b), scripts/ai/doc_parser.py (3308b), scripts/ai/doc_reader.py (2786b), scripts/ai/minimax_client.py (3847b), scripts/ai/risk_scanner.py (3908b), scripts/api_server.py (4275b), scripts/bid_monitor.sh (6779b), scripts/bidhunter.py (11953b), scripts/calendar.py (7133b), scripts/check_environment.py (3199b), scripts/compliance/compliance_scanner.py (12461b), scripts/compliance/redlines.json (17880b), scripts/config_wizard.py (6394b), scripts/custom_source.py (4908b), scripts/demo.py (2080b), scripts/docs/FAQ.md (5216b), scripts/doctor.py (6968b), scripts/faq.py (2216b), scripts/feedback.py (12686b), scripts/filter_multi.py (3061b), scripts/init_wizard.py (10846b), scripts/pipeline.sh (8787b), scripts/push_manager.py (17165b), scripts/qual_check.py (20073b), scripts/qual_rules.json (6883b), scripts/quote_gate.py (19646b), scripts/quote_gen.py (2447b), scripts/quote/gate.json (4713b), scripts/report_html.py (10090b), scripts/report_text.py (6268b), scripts/rule_editor.py (15513b), scripts/samples/demo_cache.jsonl (1104b), scripts/samples/demo_qual.jsonl (4076b), scripts/samples/demo_rules.json (2539b), scripts/sources.example.json (746b), scripts/sources.presets/html_list.json (842b), scripts/sources.presets/json_api.json (1266b), scripts/sources.presets/README.md (2463b), scripts/sources.presets/rss.json (658b), scripts/status.py (7520b), scripts/usage.py (5479b), scripts/webhook_publish.py (2632b), skill-card.md (2931b), skill-dependencies.json (11905b), SKILL.md (19700b), _meta.json (128b)\n\nArchive v2.6.0: 51 files, 128962 bytes\n\nFiles: references/field_standard.md (3541b), references/filter_rules.md (5854b), references/platforms.md (7283b), references/setup-guide.md (3207b), requirements.txt (248b), scripts/ai/analytics.py (3449b), scripts/ai/bid_advisor.py (4446b), scripts/ai/clause_extractor.py (2719b), scripts/ai/doc_parser.py (3308b), scripts/ai/doc_reader.py (2786b), scripts/ai/minimax_client.py (3847b), scripts/ai/risk_scanner.py (3908b), scripts/api_server.py (4275b), scripts/bid_monitor.sh (6779b), scripts/bidhunter.py (10456b), scripts/calendar.py (7133b), scripts/check_environment.py (3199b), scripts/compliance/compliance_scanner.py (12461b), scripts/compliance/redlines.json (17880b), scripts/config_wizard.py (6394b), scripts/custom_source.py (4908b), scripts/demo.py (2080b), scripts/docs/FAQ.md (5216b), scripts/doctor.py (6968b), scripts/faq.py (2216b), scripts/feedback.py (12686b), scripts/filter_multi.py (3061b), scripts/init_wizard.py (10846b), scripts/pipeline.sh (8787b), scripts/push_manager.py (17165b), scripts/qual_check.py (20073b), scripts/qual_rules.json (6883b), scripts/quote_gen.py (2447b), scripts/report_html.py (10090b), scripts/report_text.py (6268b), scripts/rule_editor.py (15513b), scripts/samples/demo_cache.jsonl (1104b), scripts/samples/demo_qual.jsonl (4076b), scripts/samples/demo_rules.json (2539b), scripts/sources.example.json (746b), scripts/sources.presets/html_list.json (842b), scripts/sources.presets/json_api.json (1266b), scripts/sources.presets/README.md (2463b), scripts/sources.presets/rss.json (658b), scripts/status.py (7520b), scripts/usage.py (5479b), scripts/webhook_publish.py (2632b), skill-card.md (2389b), skill-dependencies.json (5343b), SKILL.md (16323b), _meta.json (128b)\n\nArchive v2.5.3: 45 files, 112544 bytes\n\nFiles: references/field_standard.md (3541b), references/filter_rules.md (3620b), references/platforms.md (7283b), references/setup-guide.md (3207b), requirements.txt (248b), scripts/ai/analytics.py (3449b), scripts/ai/bid_advisor.py (4446b), scripts/ai/clause_extractor.py (2719b), scripts/ai/doc_parser.py (3308b), scripts/ai/doc_reader.py (2786b), scripts/ai/minimax_client.py (3847b), scripts/ai/risk_scanner.py (3908b), scripts/api_server.py (4275b), scripts/bid_monitor.sh (6779b), scripts/bidhunter.py (8116b), scripts/calendar.py (7133b), scripts/check_environment.py (3199b), scripts/compliance/compliance_scanner.py (12461b), scripts/compliance/redlines.json (17880b), scripts/config_wizard.py (6394b), scripts/custom_source.py (4908b), scripts/demo.py (2080b), scripts/docs/FAQ.md (5216b), scripts/doctor.py (6353b), scripts/faq.py (2216b), scripts/feedback.py (12686b), scripts/filter_multi.py (3061b), scripts/pipeline.sh (8787b), scripts/push_manager.py (17165b), scripts/qual_check.py (16243b), scripts/qual_rules.json (3691b), scripts/quote_gen.py (2447b), scripts/report_html.py (10090b), scripts/report_text.py (6268b), scripts/rule_editor.py (15513b), scripts/samples/demo_cache.jsonl (1104b), scripts/samples/demo_qual.jsonl (4076b), scripts/samples/demo_rules.json (2539b), scripts/sources.example.json (746b), scripts/status.py (7520b), scripts/webhook_publish.py (2632b), skill-card.md (2747b), skill-dependencies.json (5343b), SKILL.md (15617b), _meta.json (128b)\n\nArchive v2.5.2: 45 files, 112524 bytes\n\nFiles: references/field_standard.md (3541b), references/filter_rules.md (3620b), references/platforms.md (7283b), references/setup-guide.md (3207b), requirements.txt (248b), scripts/ai/analytics.py (3449b), scripts/ai/bid_advisor.py (4446b), scripts/ai/clause_extractor.py (2719b), scripts/ai/doc_parser.py (3308b), scripts/ai/doc_reader.py (2786b), scripts/ai/minimax_client.py (3847b), scripts/ai/risk_scanner.py (3908b), scripts/api_server.py (4275b), scripts/bid_monitor.sh (6779b), scripts/bidhunter.py (8116b), scripts/calendar.py (7133b), scripts/check_environment.py (3199b), scripts/compliance/compliance_scanner.py (12461b), scripts/compliance/redlines.json (17880b), scripts/config_wizard.py (6394b), scripts/custom_source.py (4908b), scripts/demo.py (2080b), scripts/docs/FAQ.md (5216b), scripts/doctor.py (6232b), scripts/faq.py (2216b), scripts/feedback.py (12686b), scripts/filter_multi.py (3061b), scripts/pipeline.sh (8787b), scripts/push_manager.py (17165b), scripts/qual_check.py (16243b), scripts/qual_rules.json (3691b), scripts/quote_gen.py (2447b), scripts/report_html.py (10090b), scripts/report_text.py (6268b), scripts/rule_editor.py (15513b), scripts/samples/demo_cache.jsonl (1104b), scripts/samples/demo_qual.jsonl (4076b), scripts/samples/demo_rules.json (2539b), scripts/sources.example.json (746b), scripts/status.py (7520b), scripts/webhook_publish.py (2632b), skill-card.md (2929b), skill-dependencies.json (5343b), SKILL.md (15617b), _meta.json (128b)\n\nArchive v2.5.1: 44 files, 107196 bytes\n\nFiles: references/field_standard.md (3541b), references/filter_rules.md (3620b), references/platforms.md (7283b), references/setup-guide.md (3207b), requirements.txt (248b), scripts/ai/analytics.py (3449b), scripts/ai/bid_advisor.py (4446b), scripts/ai/clause_extractor.py (2719b), scripts/ai/doc_parser.py (3308b), scripts/ai/doc_reader.py (2786b), scripts/ai/minimax_client.py (3847b), scripts/ai/risk_scanner.py (3908b), scripts/api_server.py (4275b), scripts/bid_monitor.sh (6779b), scripts/bidhunter.py (6848b), scripts/calendar.py (7133b), scripts/check_environment.py (3199b), scripts/compliance/compliance_scanner.py (12461b), scripts/compliance/redlines.json (17880b), scripts/config_wizard.py (6394b), scripts/custom_source.py (4908b), scripts/demo.py (2080b), scripts/docs/FAQ.md (5216b), scripts/doctor.py (6232b), scripts/faq.py (2216b), scripts/filter_multi.py (3061b), scripts/pipeline.sh (8787b), scripts/push_manager.py (17165b), scripts/qual_check.py (16243b), scripts/qual_rules.json (3691b), scripts/quote_gen.py (2447b), scripts/report_html.py (10090b...","readmeExcerpt":"Skill: 标讯猎手 BidHunter Owner: 419597334-sudo Summary: 国央企招投标信息监控与研判技能。自动采集多平台公告，按资质规则比对可投性（可投/不可投/需确认），生成带研判简报并多通道推送。v1.5 起新增：资质匹配度评分(0-100)、投标日历与开标倒计时、金额/地区/行业多维筛选、零代码规则编辑器、诊断中心、示例模式、集中FAQ、统一命令入口；v2.0 本地AI增强（招标文件AI速读+风险条款识别，零云成本）；v2.5 投标策略建议；v3.0 本地开放API+签名webhook；v3.5 合规红线引擎（31条法定废标红线本地扫描、交标前自查清单、多主体串标隔离，零API成本）；v2.7 报价闸门（品类清算价地板、规模换算线性、单位单价、毛利红线，任一道不过即禁止输出结论金额）。★v2.8 覆盖率重写：修复只读前9000字符导致200页标书95%未读的缺陷，改为结构化分片全覆盖并强制标","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"python3 bidhunter.py paste 你的招标文件.pdf"},{"language":"bash","snippet":"python3 bidhunter.py init"},{"language":"bash","snippet":"python3 bidhunter.py doctor"},{"language":"bash","snippet":"python3 bidhunter.py run [--fresh] [--summary] [--calendar]   # 采集+比对+报告(+推送)\npython3 bidhunter.py status                                    # 今日状态\npython3 bidhunter.py doctor                                    # 一键诊断\npython3 bidhunter.py demo                                      # 示例效果\npython3 bidhunter.py calendar [--days 7]                        # 投标日历\npython3 bidhunter.py faq [关键词]                               # 查常见问题\npython3 bidhunter.py rules edit [--port 8080]                  # 图形化配规则\npython3 bidhunter.py ai read <标书.pdf>                        # v2.0 AI 速读\npython3 bidhunter.py ai advise <标书.pdf>                      # v2.5 投标建议\npython3 bidhunter.py api serve [--port 8765]                   # v3.0 本地API\npython3 bidhunter.py compliance scan <标书> [--mode tender|bid] # v3.5 合规红线扫描\npython3 bidhunter.py compliance checklist                      # v3.5 交标前自查清单\npython3 bidhunter.py gap scan <招标文件>                          # v2.8 待补材料清单\npython3 bidhunter.py gap zero <投标文件草稿>                      # v2.8 零响应检测\npython3 bidhunter.py quote params [--show]                     # v2.7 报价参数库（首次填一次）\npython3 bidhunter.py quote check --help                        # v2.7 报价闸门（不过禁止出金额）\npython3 bidhunter.py gap scan <招标文件>                        # v2.8 待补材料清单（零 API）\npython3 bidhunter.py gap zero <投标文件草稿> [--our-project 名称] # v2.8 零响应检测（零 API）"},{"language":"bash","snippet":"# 交标前还差什么：资格要求逐条三态判定 + 高危红标\npython3 bidhunter.py gap scan 招标文件.pdf\npython3 bidhunter.py gap scan 招标文件.pdf --json\n\n# 草稿写完后查零响应：空洞满足 / 借附件 / 待补占位 / 跨项目残留 / 数字型空洞\npython3 bidhunter.py gap zero 投标文件草稿.docx\npython3 bidhunter.py gap zero 草稿.docx --our-project \"XX项目\" --other-projects 上一标的项目名"},{"language":"text","snippet":"共 3 项：缺 1 · 待确认 2 · 高风险 1 · 带有效期 2\n\n🔴 [MISSING] 3.3 业绩证明文件（资格评审第 4 项）★须按规定格式提交业绩表…\n     ⚠️ 出现在签字盖章页——缺件即形式审查不通过\n     标记：需盖章"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: bidhunter\nslug: bidhunter\ndisplayName: 标讯猎手 BidHunter\nversion: \"2.9.1\"\nsummary: 国央企招投标信息监控与研判：自动采集多平台公告，按资质规则判断可投性，生成研判简报并推送；支持分片全覆盖读标、评分点分值守恒校验、评分点台账（五态状态机+四条必报警）、正向覆盖矩阵（A/B/C 三档）、待补材料清单、零响应检测、合规红线扫描与报价闸门。本地运行，零云成本。\nlicense: MIT-0\ndescription: \"国央企招投标信息监控与研判技能。自动采集多平台公告，按资质规则比对可投性（可投/不可投/需确认），生成带研判简报并多通道推送。v1.5 起新增：资质匹配度评分(0-100)、投标日历与开标倒计时、金额/地区/行业多维筛选、零代码规则编辑器、诊断中心、示例模式、集中FAQ、统一命令入口；v2.0 本地AI增强（招标文件AI速读+风险条款识别，零云成本）；v2.5 投标策略建议；v3.0 本地开放API+签名webhook；v3.5 合规红线引擎（31条法定废标红线本地扫描、交标前自查清单、多主体串标隔离，零API成本）；v2.7 报价闸门（品类清算价地板、规模换算线性、单位单价、毛利红线，任一道不过即禁止输出结论金额）。★v2.8 覆盖率重写：修复只读前9000字符导致200页标书95%未读的缺陷，改为结构化分片全覆盖并强制标注覆盖率；修复PDF/DOCX扫描静默失效（此前规则命中恒为0）；新增评分点逐项映射与分值守恒校验、待补材料清单（高危红标签字盖章页缺件）、零响应检测（空洞满足/待补占位/跨项目残留/数字型空洞），无AI key也能出完整简报。触发词：抓招投标、今日哪些能投、标讯监控、标书研判、招投标公告、央企招标、投标资质匹配、AI读标书、投标建议、这份标会不会被废、废标风险、交标前检查、合规红线扫描、多主体投标、会不会被认定串标、报价闸门、这个标报多少、报价复核、出价前检查、这个标值不值得投、报价会不会被废、待补材料清单、还差什么材料、零响应检测、评分点、评分表、评分办法、这个分怎么拿、漏项、丢分、扣分项、待补、待提供、准备什么材料、递交清单、应答表、偏离表、评分台账、评分项跟踪、覆盖矩阵、哪些评分项没写、哪条要求没响应。\"\nagent_created: true\n---\n\n# 标讯猎手 BidHunter\n\n> 采集国央企/公共资源招投标公告 → 资质规则比对可投性 → 生成带研判简报 → 多通道推送 → （v1.5+）评分排序/日历提醒/多维筛选/零代码配规则 → （v2.0+）AI 速读标书与风险识别 → （v2.5+）投标策略建议 → （v3.5+）**交标前法定红线扫描与废标预警**。\n> 自包含、已脱敏：不含任何私有主体、个人联系方式、公司档案。使用者按自己的营业执照与业务规则填充配置即可。\n\n## 5 分钟跑通（新用户看这里）\n\n两条路，挑一条：\n\n### A. 先看效果——不用配任何东西\n\n```bash\npython3 bidhunter.py paste 你的招标文件.pdf\n```\n\n丢一份招标文件进来，直接出**废标风险报告**（31 条法定红线本地扫描）。\n不需要 AI key、不需要采集源、离线可跑。\n\n### B. 开始监控——三问生成配置\n\n```bash\npython3 bidhunter.py init\n```\n\n问三个问题（主体名称 / 主营什么 / 盯哪些地区），自动生成你的资质规则库，\n再 `bash pipeline.sh` 开始采集。\n\n> 行业**不设固定选项**——可以直接粘贴营业执照经营范围，自动拆成能力词。\n> 想先看看效果不写盘：`python3 bidhunter.py init --preview`\n\n## 卡住了？先跑诊断\n\n任何异常先跑这一条，30 秒定位问题（E001~E005 + W001~W004，每条都带修复建议）：\n\n```bash\npython3 bidhunter.py doctor\n```\n\n> 最常见的失败原因是 **E002：规则库仍是示例占位符**。装上不等于能用——\n> 一条命令解决：`python3 bidhunter.py init`（三问自动生成，约 1 分钟）。\n\n## 版本能力一览\n\n| 版本 | 主题 | 关键能力 |\n|---|---|---|\n| v1.1 | 准 | 边界感知智能匹配、规则健康检查、精华版报告 |\n| v1.2 | 达 | 钉钉/企微/邮件多通道推送、配置向导、推送历史与告警 |\n| **v1.5** | 易+功能 | 匹配度评分、投标日历、多维筛选、规则编辑器、诊断/示例/FAQ/统一入口 |\n| **v2.0** | 智(本地AI) | 招标文件 AI 速读、排他/内定风险识别、业主品类画像（零云成本） |\n| **v2.5** | 策 | 投标策略建议生成（仅供参考，不代填报价/资质） |\n| **v3.0** | 开(本地) | 本地查询 API + 签名 webhook（云/SaaS 部分因成本约束未启用） |\n| **v3.5** | 规 | 合规红线引擎：31 条法定废标红线本地扫描 + 交标前自查清单 + 多主体串标隔离（零 API 成本） |\n| **v2.6** | 顺 | **上手转化**：`init` 三问生成配置（行业自由输入）、`paste` 零配置出废标风险报告、本地埋点、平台适配模板 |\n| **v2.7** | **价** | **报价闸门**：出价前算式校验（品类清算价地板、规模换算线性、单位单价、毛利红线），任一道不过即禁止输出结论金额；缺参数只交框架与待补清单 |\n| **v2.8** | **读全** | ★**覆盖率重写**：分片全覆盖（修掉只读前 9000 字符、200 页标书 95% 未读的缺陷）；PDF/DOCX 扫描静默失效已修（此前规则命中恒为 0）；**评分点逐项映射 + 分值守恒校验**；新增**待补材料清单**与**零响应检测**；无 AI key 也能出完整简报 |\n| **v2.9** | **对表** | **评分点台账**（五态状态机 + 四条必报警：分值不守恒/同章节重复锚点/状态回退未确认/临截止仍缺项）；**正向覆盖矩阵**（资格·技术·商务逐条判 A 完全 / B 部分 / C 未覆盖，非布尔）；两表共用 `response_location` 字段；CSV 保底 / xlsx 有库才出 |\n\n## ★ v2.8 为什么是这一版\n\n2026-10-05 复盘发现三个叠加缺陷，**每一个都单独足以让读标结论不可信**：\n\n| # | 缺陷 | 实测影响 | 修复 |\n|---|---|---|---|\n| 1 | `clause_extractor` / `risk_scanner` / `compliance_scanner` / `bid_advisor` 全部硬编码 `MAX_CHARS=9000` | 200~500 页标书（15~40 万字）**只喂入前 9000 字，约 4"},{"path":"scripts/sources.presets/README.md","content":"# 采集源配置指引\n\n> **为什么本 skill 不内置任何真实平台源？**\n>\n> 内置源一旦失效（改版 / 加鉴权 / 关停），用户首跑直接失败，反而比没有更糟。\n> 所以 BidHunter 的做法是：**给模板 + 给清单，不给现成答案**——你把要盯的平台填进来，\n> 它就是你自己的监控器，不依赖我们维护。\n\n---\n\n## 三步接入\n\n1. **选模式**：`json_api.json` / `rss.json` / `html_list.json`，按目标平台挑一个\n2. **改 URL 和字段**：把模板里的 `YOUR-DOMAIN` 换成真实域名，按返回结构改 `items_path` / `fields`\n3. **合并进 `sources.json`**：把改好的对象放进 `sources` 数组（可以放多个平台）\n\n`init` 已经帮你在 `scripts/sources.json` 生成了骨架，直接往 `sources` 数组里加即可\n（`bid_monitor.sh` 会自动加载 `scripts/sources.json`）。\n\n---\n\n## 常见平台清单（自行确认当前网址与可用性）\n\n> 下列仅为**品类提示**，具体网址与接口请以平台当前实际情况为准，本 skill 不保证其可用性。\n\n| 品类 | 说明 |\n|---|---|\n| 中国政府采购网 | 中央及地方政采公告，通常有列表页，部分地区提供 RSS |\n| 全国公共资源交易平台 | 各省有独立子站，按你所在省找对应入口 |\n| 省级 / 市级公共资源交易中心 | 工程、采购、土地矿权分类，多数有 HTML 列表页 |\n| 央企电子采购平台 | 能源、通信、建筑类央企各有自建平台，需自行注册查看公开公告区 |\n| 行业性招标平台 | 如机电产品、医疗器械等垂类平台 |\n\n**找源的小技巧**：打开平台列表页 → F12 → Network → 翻一页 → 看哪个请求返回了公告数据。\n那个请求的 URL 就是你要的 `url`，返回的 JSON 结构就是 `items_path` / `fields` 的依据。\n\n---\n\n## 合规提醒（重要）\n\n- 采集前确认目标站点的 `robots.txt` 与内容版权声明\n- 只采集**公开可访问**的页面，不要尝试绕过登录或鉴权\n- 控制请求频率，避免对目标站点造成压力\n- 采集内容仅供内部商机研判，二次传播前请自行评估版权风险\n\n---\n\n## 不想配源？先跑起来\n\n配源不是必须的。丢一份招标文件进来就能出结果：\n\n```bash\npython3 bidhunter.py paste <招标文件.pdf>\n```\n\n走合规红线扫描，**不需要 AI key、不需要采集源、离线可跑**，31 条法定废标红线本地扫描。"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn79pvem3czfg69e3mx7gezyp1865jf9\",\n  \"slug\": \"bidhunter\",\n  \"version\": \"2.9.1\",\n  \"publishedAt\": 1791280523773\n}"},{"path":"references/field_standard.md","content":"# 标讯字段标准化 Schema\n\n## 核心字段定义\n\n| 字段名 | 类型 | 说明 | 示例 |\n|---|---|---|---|\n| `bid_id` | string | 标讯唯一标识（平台+原始ID） | `cnooc_12345` |\n| `source_platform` | string | 来源平台编码 | `cnooc` |\n| `source_url` | string | 原始链接 | `https://...` |\n| `title` | string | 项目名称 | `渤海某油田FPSO工程EPC总包` |\n| `content_text` | string | 正文纯文本（前5000字） | `...` |\n| `content_html` | string | 原始HTML（存档） | `...` |\n| `publish_time` | string | 公告发布时间（ISO 8601） | `2024-03-01T10:00:00+08:00` |\n| `deadline_time` | string | 投标截止时间 | `2024-03-15T09:00:00+08:00` |\n| `bid_open_time` | string | 开标时间 | `2024-03-15T09:30:00+08:00` |\n| `budget_amount` | number | 预算金额（元，标准化） | `420000000` |\n| `budget_amount_raw` | string | 原始金额字符串 | `4.2亿元` |\n| `currency` | string | 币种 | `CNY` |\n| `purchaser_name` | string | 采购单位名称（标准化） | `某某有限公司天津分公司` |\n| `purchaser_address` | string | 采购单位地址 | `天津市滨海新区...` |\n| `purchaser_contact` | string | 联系人及方式 | `张三 022-XXXX` |\n| `agency_name` | string | 招标代理机构 | `某某招标有限公司` |\n| `bid_type` | string | 项目类型编码 | `engineering` / `goods` / `service` |\n| `bid_method` | string | 采购方式编码 | `public_tender` / `invitation` / `inquiry` |\n| `region_code` | string | 地区编码（国家统计局6位码） | `120116` |\n| `industry_code` | string | 行业编码 | `B07` |\n| `qualification_requirements` | array | 资质要求 | `[\"一级资质\", \"安全生产许可证\"]` |\n| `attachment_list` | array | 附件清单 | `[{\"name\": \"招标文件.pdf\", \"size\": 10240000, \"url\": \"...\"}]` |\n| `status` | string | 标讯状态 | `new` / `updated` / `expired` / `opened` / `cancelled` |\n| `crawl_time` | string | 采集时间 | `2024-03-01T10:05:00+08:00` |\n| `crawl_version` | string | 解析规则版本 | `1.0` |\n\n## 判定结果字段\n\n| 字段名 | 类型 | 说明 | 取值 |\n|---|---|---|---|\n| `verdict` | string | 资质判定结果 | `investable` / `not_investable` / `needs_review` / `skip` |\n| `reason` | string | 判定原因 | `主体能力匹配：广告, 活动` / `红色预警：建筑施工` |\n| `assigned_entity` | string | 归属投标主体 | `entity_a` / `entity_b` |\n| `assigned_entity_name` | string | 归属投标主体名称 | `主体A（传媒/活动类）` |\n| `matched_capabilities` | array | 匹配到的能力词 | `[\"广告\", \"活动策划\"]` |\n| `region_info` | object | 地区信息 | `{\"is_priority\": true, \"region\": \"天津\"}` |\n\n## 金额标准化规则\n\n原始金额字符串 → 标准化元数值：\n\n| 原始格式 | 标准化结果 |\n|---|---|\n| `4.2亿元` | `420000000` |\n| `500万元` | `5000000` |\n| `300万` | `3000000` |\n| `1.2亿` | `120000000` |\n| `未填写` / 空 | `null` |\n\n## 地区编码\n\n使用国家统计局 6 位行政区划编码：\n\n| 编码 | 地区 |\n|---|---|\n| `110000` | 北京市 |\n| `120000` | 天津市 |\n| `310000` | 上海市 |\n| `440000` | 广东省 |\n| `510000` | 四川省 |\n| ... | ... |\n\n完整编码表参考国家统计局最新版行政区划代码。\n\n## 行业分类编码\n\n采用 GB/T 4754《国民经济行业分类》：\n\n| 编码 | 行业 |\n|---|---|\n| `B07` | 石油和天然气开采业 |\n| `B08` | 黑色金属矿采选业 |\n| `E48` | 土木工程建筑业 |\n| `I63` | 电信、广播电视和卫星传输服务 |\n| ... | ... |"},{"path":"references/filter_rules.md","content":"# 筛选规则结构与条件维度\n\n## 规则组结构\n\n规则组支持多组并行运行：\n\n```\n规则组（多组并行）\n├── 规则组名称：如\"海上工程总包\"\n├── 启用状态：启用/停用\n├── 匹配逻辑：AND（全部满足）/ OR（任一满足）\n├── 筛选条件（见下表）\n├── 输出设置：推送通道 + 输出格式\n└── 优先级：1-10（同一条标讯匹配多规则时，按优先级去重）\n```\n\n## 资质判定优先级（高 → 低）\n\n1. **★服务类型门禁**（v1.2）：采购标的的服务类型优先于项目名里的动词\n2. **★子串红警**（v1.2）：不受 CJK 边界限制的强制拦截词\n3. **special_rules 覆盖**：如\"某类标外找资质可投\"、\"某类标垫资不参与 → skip\"\n4. **红色预警命中** → 不可投 + 原因\n5. **主体能力匹配** → 可投（按主体能力词归属投标公司）\n6. **都不命中** → 需确认\n\n## ★v1.2 修正（2026-09-11，案例 614535）\n\n### 一、服务类型门禁 service_type_gate\n\n**采购标的的服务类型，优先于项目名里的动词关键词。**\n\n项目名常把真正的服务类型藏在修饰语后面：\n\n| 项目名 | 真正的标的 | 错误判定 | 正确判定 |\n|---|---|---|---|\n| 楼宇安全整治**维修改造**项目**监理服务** | 监理服务 | 按\"维修\"命中→可投 | **不可投**（无监理资质） |\n| XX项目**设计服务** | 设计服务 | 按\"施工/改造\"命中 | 需确认 |\n\n配置项 `service_type_gate.blocked_types`：监理（不可投）／设计·勘察／检测／审计·评估·造价咨询·招标代理（需确认）。\n**资质序列不可跨用**：施工总承包资质 ≠ 监理资质；且施工单位投同一项目监理通常有**回避要求**。\n\n### 二、匹配边界陷阱（重要）\n\n`smart_match` 的左边界规则要求**关键词前一字符不得为中日韩字符**，导致出现在标题**中部**的关键词永远匹配不到：\n\n- ❌ \"…零星**维修**服务\" → \"维修\"前是\"星\"→ 漏判（该投的标被判\"需确认\"）\n- ❌ \"…消防设施改造\" → \"消防\"前是\"厂\"→ 红警漏拦\n\n**修正**：\n1. `_match_loose: true` → 能力词改用**纯子串匹配**（漏判代价 > 误判代价，假阳性由 `_exclude_contexts` 过滤）\n2. `substring_alerts` → 高风险资质词（消防/电梯/压力容器/特种设备/爆破/危险品/劳务派遣/保安服务/测绘/勘察/钻井/修井等）强制子串拦截\n3. 已知保留项：`skip_procurement` 的\"采购\"**仍用严格匹配**——因\"XX服务采购\"是服务标常见命名，宽松会误杀大量可投标；若要拦物资采购标，请改用\"物资采购/采购项目/采办\"等更特异的关键词\n\n### 三、自检命令\n\n```bash\npython3 qual_check.py --validate-rules qual_rules.json   # 规则库体检\n```\n\n判定回归用例（改规则后必跑）：监理标→不可投、消防标→不可投、设计标→需确认、零星维修标→可投。\n\n## 筛选条件维度\n\n| 维度 | 条件类型 | 运算符 | 输入示例 |\n|---|---|---|---|\n| 关键词 | 标题包含 | 包含任意/全部包含/不包含 | `FPSO OR \"浮式生产\" NOT \"退役\"` |\n| 关键词 | 正文包含 | 同上 | `\"一级资质\" AND \"安全生产许可证\"` |\n| 关键词 | 附件名称包含 | 包含任意 | `技术规格书 OR 图纸` |\n| 地区 | 项目所在地 | 省/市多选、排除、半径圈选 | `天津市, 青岛市, 半径50km` |\n| 地区 | 采购单位所在地 | 同上 | `北京市海淀区` |\n| 金额 | 预算金额 | ≥ / ≤ / 区间 / 未填写 | `500万-5000万` |\n| 金额 | 最高限价 | 同上 | `≥1亿` |\n| 时间 | 公告发布时间 | 近N天 / 日期范围 | `近7天` |\n| 时间 | 投标截止时间 | ≥N天后 / 日期范围 | `截止≥7天后` |\n| 时间 | 开标时间 | 同上 | `2024-03-01 至 2024-06-30` |\n| 项目属性 | 项目类型 | 多选 | `工程, 货物` |\n| 项目属性 | 采购方式 | 多选 | `公开招标, 邀请招标` |\n| 项目属性 | 行业领域 | 多选 | `石油化工, 海洋工程` |\n| 资质要求 | 要求资质 | 包含/不包含 | `海洋石油工程专业承包一级` |\n| 资质要求 | 资质等级 | ≥ / = / ≤ | `≥二级` |\n| 业主画像 | 采购单位 | 白名单/黑名单 | `包含: 某某分公司` |\n| 业主画像 | 历史合作 | 是否合作过 | `仅显示合作过业主` |\n\n## 规则冲突处理\n\n当一条标讯同时匹配多个规则组时：\n\n1. **分别输出**（默认）：用户收到多条推送，标注所属规则组\n2. **仅保留高优先级**：配置去重模式\n3. **合并为一条**：标注\"多规则匹配\"\n\n## qual_rules.json 结构说明\n\n```json\n{\n  \"version\": \"1.0\",\n  \"entities\": {\n    \"entity_a\": {\n      \"name\": \"主体A名称\",\n      \"capabilities\": [\"关键词1\", \"关键词2\"],\n      \"note\": \"替换为营业执照经营范围关键词\"\n    }\n  },\n  \"red_alerts\": [\"车辆维修\", \"劳务派遣\", \"...\"],\n  \"special_rules\": [\n    {\n      \"id\": \"rule_id\",\n      \"description\": \"规则描述\",\n      \"match_keywords\": [\"关键词\"],\n      \"action\": \"skip|investable|not_investable\",\n      \"assigned_entity\": \"entity_a\",\n      \"reason\": \"原因说明\"\n    }\n  ],\n  \"skip_keywords_result\": [\"结果公示\", \"中标公示\"],\n  \"region_priority\": {\n    \"high\": [\"天津\", \"青岛\"],\n    \"note\": \"按需填写重点地区\"\n  }\n}\n```\n\n## 推送策略\n\n| 策略 | 说明 | 配置 |\n|---|---|---|\n| 即时推送 | 单条标讯匹配后立即推送 | 仅高优先级规则组/紧急标讯 |\n| 定时汇总 | 按固定时间合并推送 | 每日9:00 / 每周一9:00 |\n| 智能合并 | 同规则组多条标"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"国央企招投标信息监控与研判技能。自动采集多平台公告，按资质规则比对可投性（可投/不可投/需确认），生成带研判简报并多通道推送。v1.5 起新增：资质匹配度评分(0-100)、投标日历与开标倒计时、金额/地区/行业多维筛选、零代码规则编辑器、诊断中心、示例模式、集中FAQ、统一命令入口；v2.0 本地AI增强（招标文件AI速读+风险条款识别，零云成本）；v2.5 投标策略建议；v3.0 本地开放API+签名webhook；v3.5 合规红线引擎（31条法定废标红线本地扫描、交标前自查清单、多主体串标隔离，零API成本）；v2.7 报价闸门（品类清算价地板、规模换算线性、单位单价、毛利红线，任一道不过即禁止输出结论金额）。★v2.8 覆盖率重写：修复只读前9000字符导致200页标书95%未读的缺陷，改为结构化分片全覆盖并强制标注覆盖率；修复PDF/DOCX扫描静默失效（此前规则命中恒为0）；新增评分点逐项映射与分值守恒校验、待补材料清单（高危红标签字盖章页缺件）、零响应检测（空洞满足/待补占位/跨项目残留/数字型空洞），无AI key也能出完整简报。触发词：抓招投标、今日哪些能投、标讯监控、标书研判、招投标公告、央企招标、投标资质匹配、AI读标书、投标建议、这份标会不会被废、废标风险、交标前检查、合规红线扫描、多主体投标、会不会被认定串标、报价闸门、这个标报多少、报价复核、出价前检查、这个标值不值得投、报价会不会被废、待补材料清单、还差什么材料、零响应检测、评分点、评分表、评分办法、这个分怎么拿、漏项、丢分、扣分项、待补、待提供、准备什么材料、递交清单、应答表、偏离表、评分台账、评分项跟踪、覆盖矩阵、哪些评分项没写、哪条要求没响应。 Skill: 标讯猎手 BidHunter Owner: 419597334-sudo Summary: 国央企招投标信息监控与研判技能。自动采集多平台公告，按资质规则比对可投性（可投/不可投/需确认），生成带研判简报并多通道推送。v1.5 起新增：资质匹配度评分(0-100)、投标日历与开标倒计时、金额/地区/行业多维筛选、零代码规则编辑器、诊断中心、示例模式、集中FAQ、统一命令入口；v2.0 本地AI增强（招标文件AI速读+风险条款识别，零云成本）；v2.5 投标策略建议；v3.0 本地开放API+签名webhook；v3.5 合规红线引擎（31条法定废标红线本地扫描、交标前自查清单、多主体串标隔离，零API成本）；v2.7 报价闸门（品类清算价地板、规模换算线性、单位单价、毛利红线，任一道不过即禁止输出结论金额）。★v2.8 覆盖率重写：修复只读前9000字符导致200页标书95%未读的缺陷，改为结构化分片全覆盖并强制标","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1044,"uniquenessScore":59,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T09:03:20.337Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T09:03:20.337Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-11T11:24:23.547Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}