{"id":"1b41b15e-160c-4731-a94c-28dcff78c72b","entityType":"agent","slug":"clawhub-chichihaixiaojian666-biaoshu-writer-read","name":"招标文件解读工具","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chichihaixiaojian666-biaoshu-writer-read","canonicalPath":"/agent/clawhub-chichihaixiaojian666-biaoshu-writer-read","generatedAt":"2026-10-10T09:27:17.247Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T18:12:43.737Z","emptyReason":null},"description":"上传招标/投标文件，AI 一站式完成智能解读（废标红线/评分标准/控标洞察）、成品投标文件(.docx)生成、标书审查（分级风险+雷同检测）和标书查重（2-3份投标文件相似/雷同风险检查）。覆盖投标、招标、标书、投标文件、竞标、围标、控标、废标、评分标准、资格条件、技术标、商务标、暗标、响应文件、应答文件、雷同检测、相似检查、标书查重等场景——当用户提供或提及招标/投标文件、问「这个标能不能投 / 有哪些废标红线 / 帮我写投标书 / 检查标书有没有问题 / 两份投标文件像不像 / 会不会被判雷同」，或想解读招标文件、生成投标文件、做标书审查或查重时使用。需百炼®标书 Api Key（官网注册 Skill: 招标文件解读工具 Owner: chichihaixiaojian666 Summary: 上传招标/投标文件，AI 一站式完成智能解读（废标红线/评分标准/控标洞察）、成品投标文件(.docx)生成、标书审查（分级风险+雷同检测）和标书查重（2-3份投标文件相似/雷同风险检查）。覆盖投标、招标、标书、投标文件、竞标、围标、控标、废标、评分标准、资格条件、技术标、商务标、暗标、响应文件、应答文件、雷同检测、相似检查、标书查重等场景——当用户提供或提及招标/投标文件、问「这个标能不能投 / 有哪些废标红线 / 帮我写投标书 / 检查标书有没有问题 / 两份投标文件像不像 / 会不会被判雷同」，或想解读招标文件、生成投标文件、做标书审查或查重时使用。需百炼®标书 Api Key（官网注册 Tags: latest:1.0.17 Version history: v1.0.17 | 2026-09-16T08:14:23","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.2K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17fdnkpzsb1ek1tpn5c955qs184dded:biaoshu-writer-read","sourceUrl":"https://clawhub.ai/chichihaixiaojian666/biaoshu-writer-read","homepage":"https://clawhub.ai/chichihaixiaojian666/skills/biaoshu-writer-read","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/chichihaixiaojian666/biaoshu-writer-read","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/chichihaixiaojian666/skills/biaoshu-writer-read","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":67,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"上传招标/投标文件，AI 一站式完成智能解读（废标红线/评分标准/控标洞察）、成品投标文件(.docx)生成、标书审查（分级风险+雷同检测）和标书查重（2-3份投标文件相似/雷同风险检查）。覆盖投标、招标、标书、投标文件、竞标、围标、控标、废标、评分标准、资格条件、技术标、商务标、暗标、响应文件、应答文件、雷同检测、相"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T18:12:43.737Z","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-09T18:12:43.737Z","emptyReason":null},"stars":null,"forks":null,"downloads":2151,"packageName":null,"latestVersion":"1.0.17","tractionLabel":"2.2K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T18:12:43.710Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T18:12:43.737Z","lastCrawledAt":"2026-10-09T18:12:43.710Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T18:12:43.710Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.17","createdAt":"2026-09-16T08:14:23.078Z","changelog":"- No file changes detected in this version. - Documentation, permissions, and feature descriptions remain unchanged from the prior release. - No new features, fixes, or updates included in this version.","fileCount":27,"zipByteSize":84783},{"version":"1.0.16","createdAt":"2026-09-16T08:05:49.417Z","changelog":"Version 1.0.16 – Major update with enhanced documentation, modularization, and stricter credential/file handling - Added extensive documentation in the references/ directory, including detailed API reference markdown files. - Introduced modular Python libraries under scripts/report_lib and scripts/zcm_lib to separate core logic and utility functions. - Updated credential management: strongly enforces that Api Key is stored only in the skill's own config.json and never exposed via chat or links. - Revised the SKILL.md with clarified instructions for Api Key setup, stricter permissions, better step-by-step guides, and accurate charging descriptions. - Removed obsolete documentation file (skill-card.md). - Ensured preservation of user config.json and output files during upgrades.","fileCount":27,"zipByteSize":84763},{"version":"1.0.15","createdAt":"2026-09-01T10:35:25.061Z","changelog":"Version 1.0.15 - Updated the skill name and description for broader coverage and clearer scenarios (招标/投标/查重等). - Expanded to “四大功能”，新增“标书查重”功能支持2-3份投标文件相似/雷同检查。 - 调整功能分区与使用说明，增强文件格式/容量支持说明（如多文件最大数量/大小）。 - 全面更新Api Key相关表述与开通流程，明确“手机号注册赠5万字”与消耗规则。 - 优化用户指引、合规要求与交付细节描述，突出路径交付规范和凭证保护。 - 移除了示例/说明文件 skill-card.md，文档结构精简。","fileCount":8,"zipByteSize":57685},{"version":"1.0.14","createdAt":"2026-08-24T13:16:52.516Z","changelog":"重大版本更新： 主要补充了知识库查询与待填项回填相关能力。已支持按分类查询企业信息、企业资质、企业业绩和财务报告，并可配合本地模型完成标书待填项匹配回填；同时同步更新了字段说明、使用文档和安全边界说明。","fileCount":8,"zipByteSize":50579},{"version":"1.0.13","createdAt":"2026-08-18T11:55:06.174Z","changelog":"主要更新： 1.标书生成说明补齐：选包、抽需求、生成大纲、生成正文、填充制式模板、导出。 2.total_pages上限说明同步为 500。 3.补充页数规划说明：会结合分包结构、技术/商务内容、表格、图表综合规划。 4.补充制式模板说明：能自动填充的尽量填，无法确认的信息保留为待填项。 5.合规审查输出补齐：风险统计、一句话结论、检查范围、语义审查状态、部分结果摘要、多文件雷同、人工核查清单。 6.合规 HTML 报告增强：总览区新增“审查完整性”和“阶段性/部分结果摘要”。","fileCount":7,"zipByteSize":46957},{"version":"1.0.12","createdAt":"2026-08-10T11:40:22.648Z","changelog":"- 移除了 skill-card.md 文件。 - 更新了环境变量的权限描述，明确 ZCM_CONFIG 不再被读取，凭证路径固定为 skill 内 config.json，环境变量不可重定向凭证。 - 新增了积分计费说明，明确解读、抽包、合规审查本身不扣积分，标书生成才真正消耗积分，但余额需大于0才能提交任务。 - 其他文档描述细节同步优化，对功能和权限说明部分进行了微调和补充说明。","fileCount":7,"zipByteSize":44564},{"version":"1.0.11","createdAt":"2026-07-23T02:46:12.188Z","changelog":"biaoshu-writer-read 1.0.11 - 移除了 skill-card.md 文件。 - 更新了环境变量声明：App Key 仅允许通过本地 config.json 读取，禁止从环境变量获取。 - 调整了元数据，ZCM_APP_KEY 不再列为可选环境变量，强调凭证安全和最小权限。 - 权限声明和说明文本同步为更严谨的凭证保护逻辑与数据采集范围。","fileCount":7,"zipByteSize":43767},{"version":"1.0.10","createdAt":"2026-07-22T11:28:51.309Z","changelog":"重大版本更新： - App Key 提供与凭证流程优化：用户需自行在 skill 目录创建 config.json 并填写 Key，不再在对话中直接粘贴 Key。 - 文件交互限定：支持本地文件路径（云端文件请用户先下载）；不再通过 URL 拉取。 - 加强隐私与数据安全提醒，明确文件外发、数据留存、计费和权限细节，首次使用前需用户确认知悉。 - 用户操作简化：用户仅需提供文件和需求；配置凭证后无需多余命令操作。 - 所有产物必须输出文件的完整绝对路径；严禁在对话中出现指令、凭证、携带 Key 的链接。 - 文档细节调整，相关功能描述、示例场景、输出规范更精确。","fileCount":7,"zipByteSize":45389}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17fdnkpzsb1ek1tpn5c955qs184dded:biaoshu-writer-read","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-chichihaixiaojian666-biaoshu-writer-read/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-read/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-read/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-read/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-read/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-read/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-10T09:27:17.242Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-read/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-read/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-read/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-read/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-09T18:12:43.737Z","emptyReason":null},"readme":"Skill: 招标文件解读工具\n\nOwner: chichihaixiaojian666\n\nSummary: 上传招标/投标文件，AI 一站式完成智能解读（废标红线/评分标准/控标洞察）、成品投标文件(.docx)生成、标书审查（分级风险+雷同检测）和标书查重（2-3份投标文件相似/雷同风险检查）。覆盖投标、招标、标书、投标文件、竞标、围标、控标、废标、评分标准、资格条件、技术标、商务标、暗标、响应文件、应答文件、雷同检测、相似检查、标书查重等场景——当用户提供或提及招标/投标文件、问「这个标能不能投 / 有哪些废标红线 / 帮我写投标书 / 检查标书有没有问题 / 两份投标文件像不像 / 会不会被判雷同」，或想解读招标文件、生成投标文件、做标书审查或查重时使用。需百炼®标书 Api Key（官网注册\n\nTags: latest:1.0.17\n\nVersion history:\n\nv1.0.17 | 2026-09-16T08:14:23.078Z | user\n\n- No file changes detected in this version.\n- Documentation, permissions, and feature descriptions remain unchanged from the prior release.\n- No new features, fixes, or updates included in this version.\n\nv1.0.16 | 2026-09-16T08:05:49.417Z | user\n\nVersion 1.0.16 – Major update with enhanced documentation, modularization, and stricter credential/file handling\n\n- Added extensive documentation in the references/ directory, including detailed API reference markdown files.\n- Introduced modular Python libraries under scripts/report_lib and scripts/zcm_lib to separate core logic and utility functions.\n- Updated credential management: strongly enforces that Api Key is stored only in the skill's own config.json and never exposed via chat or links.\n- Revised the SKILL.md with clarified instructions for Api Key setup, stricter permissions, better step-by-step guides, and accurate charging descriptions.\n- Removed obsolete documentation file (skill-card.md).\n- Ensured preservation of user config.json and output files during upgrades.\n\nv1.0.15 | 2026-09-01T10:35:25.061Z | user\n\nVersion 1.0.15\n\n- Updated the skill name and description for broader coverage and clearer scenarios (招标/投标/查重等).\n- Expanded to “四大功能”，新增“标书查重”功能支持2-3份投标文件相似/雷同检查。\n- 调整功能分区与使用说明，增强文件格式/容量支持说明（如多文件最大数量/大小）。\n- 全面更新Api Key相关表述与开通流程，明确“手机号注册赠5万字”与消耗规则。\n- 优化用户指引、合规要求与交付细节描述，突出路径交付规范和凭证保护。\n- 移除了示例/说明文件 skill-card.md，文档结构精简。\n\nv1.0.14 | 2026-08-24T13:16:52.516Z | user\n\n重大版本更新：\n主要补充了知识库查询与待填项回填相关能力。已支持按分类查询企业信息、企业资质、企业业绩和财务报告，并可配合本地模型完成标书待填项匹配回填；同时同步更新了字段说明、使用文档和安全边界说明。\n\nv1.0.13 | 2026-08-18T11:55:06.174Z | user\n\n主要更新：\n\t1.标书生成说明补齐：选包、抽需求、生成大纲、生成正文、填充制式模板、导出。\n\t2.total_pages上限说明同步为 500。\n\t3.补充页数规划说明：会结合分包结构、技术/商务内容、表格、图表综合规划。\n\t4.补充制式模板说明：能自动填充的尽量填，无法确认的信息保留为待填项。\n\t5.合规审查输出补齐：风险统计、一句话结论、检查范围、语义审查状态、部分结果摘要、多文件雷同、人工核查清单。\n\t6.合规 HTML 报告增强：总览区新增“审查完整性”和“阶段性/部分结果摘要”。\n\nv1.0.12 | 2026-08-10T11:40:22.648Z | user\n\n- 移除了 skill-card.md 文件。\n- 更新了环境变量的权限描述，明确 ZCM_CONFIG 不再被读取，凭证路径固定为 skill 内 config.json，环境变量不可重定向凭证。\n- 新增了积分计费说明，明确解读、抽包、合规审查本身不扣积分，标书生成才真正消耗积分，但余额需大于0才能提交任务。\n- 其他文档描述细节同步优化，对功能和权限说明部分进行了微调和补充说明。\n\nv1.0.11 | 2026-07-23T02:46:12.188Z | user\n\nbiaoshu-writer-read 1.0.11\n\n- 移除了 skill-card.md 文件。\n- 更新了环境变量声明：App Key 仅允许通过本地 config.json 读取，禁止从环境变量获取。\n- 调整了元数据，ZCM_APP_KEY 不再列为可选环境变量，强调凭证安全和最小权限。\n- 权限声明和说明文本同步为更严谨的凭证保护逻辑与数据采集范围。\n\nv1.0.10 | 2026-07-22T11:28:51.309Z | user\n\n重大版本更新：\n\n- App Key 提供与凭证流程优化：用户需自行在 skill 目录创建 config.json 并填写 Key，不再在对话中直接粘贴 Key。\n- 文件交互限定：支持本地文件路径（云端文件请用户先下载）；不再通过 URL 拉取。\n- 加强隐私与数据安全提醒，明确文件外发、数据留存、计费和权限细节，首次使用前需用户确认知悉。\n- 用户操作简化：用户仅需提供文件和需求；配置凭证后无需多余命令操作。\n- 所有产物必须输出文件的完整绝对路径；严禁在对话中出现指令、凭证、携带 Key 的链接。\n- 文档细节调整，相关功能描述、示例场景、输出规范更精确。\n\nv1.0.9 | 2026-07-22T11:07:38.776Z | user\n\nbiaoshu-writer-read v1.0.9\n\n- 明确调整为“凭证文件制”，App Key 仅由用户本地自建 config.json 配置，Key 不进入对话和回复。\n- 本地/文件权限与数据外发说明加强：清楚告知所有上传、计费、本地操作与数据留存情况，用户需知情同意。\n- 云端文件路径上传不再支持，全部场景须用户提供本地绝对路径。\n- 插件描述、权限声明和用户交互指引全面更新，强调不得在回复中出现 Key、敏感链接或指令。\n- 各功能使用示例和产物路径展示要求未变，所有功能与引导流程一致收敛到新版规范。\n- 官网注册获取 App Key 和功能说明的流程指引统一修订为最新版。\n\nv1.0.8 | 2026-07-22T11:03:25.063Z | user\n\nbiaoshu-writer-read 1.0.8\n\n- 显著升级「快速开始」流程：安装后自动开通试用账号并发放 200 积分，用户无需手动输入 App Key 即可试用（正式 Key 用完积分后再引导获取）。\n- 支持招标文件通过「本地路径」或「云端可下载 URL」提供，提升文件输入灵活性。\n- 使用场景话术和功能介绍进一步优化，强化示例完整性与用户体验。\n- 对「如何提供文件」的用户指引更加明确，新增本地和云端路径示例。\n- 品牌与平台名称升级为「百炼®标书」，内容同步调整完善。\n- 移除冗余 skill-card.md 文件，文档更为精简。\n\nv1.0.7 | 2026-07-20T14:04:40.668Z | user\n\n重大版本更新：\n- App Key 配置流程简化：用户现在可直接将 Key 粘贴到对话中保存，无需手动创建配置文件。\n- 安装引导与获取 App Key 部分已对应更新，具体交互指引和示例话术同步调整。\n- 本地凭证文件位置描述更新，凭证保存和告知方式优化为 skill 内 config.json 文件。\n- 增加经验沉淀与问题反馈说明，明确需征得用户同意后再回传。\n- 移除 skill-card.md 文件。\n\nv1.0.6 | 2026-07-13T13:16:18.093Z | auto\n\n- Skill重命名为“biaoshu-writer-read”，并同步品牌描述、快速入门与功能介绍，更加聚焦“AI 标书助手”定位。\n- 文档结构优化，三大核心功能描述更突出，并新增智能解读与合规审查报告图片示例。\n- App Key 获取与配置流程简化为两步，指引更明确，新用户体验更友好。\n- 明确所有用户示例和关键指引需原文照抄，突出输出、凭证和安全相关第一铁律要求。\n- 移除冗余 skill-card.md，精简无关内容。\n\nv1.0.5 | 2026-07-11T08:28:53.212Z | user\n\n- 更新「App Key」配置方式：改为用户本地手动创建 `~/.zcm/config.json` 凭证文件，不再建议通过对话粘贴 Key，提升账号安全。\n- 明确禁止任何场景下索要或引导用户在对话中提供 App Key，减少敏感信息泄露风险。\n- 「开始前你需要」和相关输出内新增凭证文件的完整配置指引，包括存放路径和内容模板。\n- 删除 `skill-card.md` 文件，不影响核心功能和用户操作。\n- 调整「对用户输出的第一铁律」排序与内容，确保后台命令永不出现在用户回复中，功能介绍和使用示例展示要求更加具体。\n\nv1.0.4 | 2026-07-11T07:12:31.703Z | user\n\nbiaoshu-writer-read 1.0.4\n\n- 移除了 skill-card.md 文件。\n- 权限声明更新：删除对云端文件下载的支持，仅允许访问招采猫 API 官方域名，禁止抓取其他云端链接。\n- 安全性增强：用户凭证（App Key）不得在回复中输出或转发，相关平台操作仅给出不带参数的官网链接。\n- 数据处理说明完善：明确产物与上传文件将留存在招采猫服务器（历史数据留存、7天过期）。\n- 智能解读入口调整：仅支持本地文件路径，云端文件需用户自行下载到本地再操作。\n\nv1.0.3 | 2026-07-11T06:06:35.341Z | user\n\n- skill-card.md 文件移除。\n- 文件写入权限从 `~/.zcm/credentials.json` 改为 `~/.zcm/config.json`，SKILL.md 中权限声明相应更新。\n\nv1.0.2 | 2026-07-11T05:32:20.737Z | user\n\n- 强化了对用户输出的规则：「产物必须逐个给绝对全路径」成为输出铁律，用户每次都会拿到文件的完整绝对路径，禁止用目录名代替。\n- 安装成功介绍和“能干什么/怎么拿 App Key”问答，需同时输出完整“怎么获取 App Key”步骤（含粘贴示例）和所有功能的详细使用示例，缺一不可，不可删减。\n- 明确禁止输出命令、后台操作和配置指引到用户界面，包括进度、报错转述等。\n- 优化了文档措辞，补充了绝对全路径展示的场景说明，全部产物需明确举例路径形态。\n- 核心功能、权限说明与原有能力保持一致。\n\nv1.0.1 | 2026-07-11T05:17:45.400Z | user\n\n- Major update: Rebranded and fully rewritten skill with new strict user interaction rules and improved compliance for file processing.\n- Skill name, description, access permissions, and UX principles have all been overhauled for greater clarity and safety.\n- Now enforces \"no command leakage\": backend commands and scripts are never shown to the user, only natural language guides and function explanations.\n- Sample scenarios and usage instructions for all three core functions (解读/标书生成/合规) are now mandatory and shown verbatim; how to safely acquire and provide App Key is explained step by step.\n- Stronger notices added on file uploading, network, and billing; file outputs must always provide full absolute paths to the user.\n- Minor: removed file skill-card.md.\n\nv1.0.0 | 2026-07-08T11:05:33.813Z | auto\n\nbiaoshu-writer-ace 1.0.0 introduces an AI-powered tool for the complete creation and review of Chinese bidding documents.\n\n- Supports App Key–based access with easy onboarding (trial, registration, or manual key).\n- Three main features: intelligent tender file interpretation, technical/business document generation, and compliance checking.\n- Handles large file uploads, generates full-featured reports (HTML/Word/.docx), and highlights bidding risks and suggestions.\n- Robust guides, error handling, and clear output rules ensure reliability and smooth use.\n- Results and progress can also be viewed on the Baolian Zhaocai Mao online platform.\n\nArchive index:\n\nArchive v1.0.17: 27 files, 84783 bytes\n\nFiles: references/api-auth.md (3471b), references/api-bid-workflow.md (5633b), references/api-compliance.md (2408b), references/api-duplicate.md (2330b), references/api.md (2814b), references/knowledge-fields.md (3123b), references/usage.md (29863b), scripts/report_lib/__init__.py (133b), scripts/report_lib/common.py (18478b), scripts/report_lib/generator.py (2466b), scripts/report_lib/renderers.py (17511b), scripts/report_lib/writers.py (37522b), scripts/report.py (322b), scripts/zcm_lib/__init__.py (47b), scripts/zcm_lib/billing.py (1280b), scripts/zcm_lib/cli.py (29595b), scripts/zcm_lib/files.py (2383b), scripts/zcm_lib/http_client.py (1918b), scripts/zcm_lib/jobs.py (8965b), scripts/zcm_lib/parser.py (12080b), scripts/zcm_lib/progress.py (3809b), scripts/zcm_lib/reporting.py (3856b), scripts/zcm_lib/storage.py (3518b), scripts/zcm.py (353b), skill-card.md (3057b), SKILL.md (21560b), _meta.json (139b)\n\nFile v1.0.17:SKILL.md\n\n---\nname: biaoshu-bailian\ndescription: 上传招标/投标文件，AI 一站式完成智能解读（废标红线/评分标准/控标洞察）、成品投标文件(.docx)生成、标书审查（分级风险+雷同检测）和标书查重（2-3份投标文件相似/雷同风险检查）。覆盖投标、招标、标书、投标文件、竞标、围标、控标、废标、评分标准、资格条件、技术标、商务标、暗标、响应文件、应答文件、雷同检测、相似检查、标书查重等场景——当用户提供或提及招标/投标文件、问「这个标能不能投 / 有哪些废标红线 / 帮我写投标书 / 检查标书有没有问题 / 两份投标文件像不像 / 会不会被判雷同」，或想解读招标文件、生成投标文件、做标书审查或查重时使用。需百炼®标书 Api Key（官网注册可领赠送字数）；文件经百炼®标书云端处理，智能解读免费，标书制作/审查/查重按可用字数计费。\nallowed-tools: Read, Write, Bash\npermissions:\n  network:\n    allow:\n      - biaoshu.zhiliaobiaoxun.com\n    deny:\n      - all-other-domains\n  filesystem:\n    read:\n      - 用户明确提供的招标文件\n      - 用户明确提供的投标文件\n      - 本 skill 自身脚本与 references 文档\n      - skill 内 config.json\n    write:\n      - biaoshu-bailian-files/\n      - skill 内 config.json\n    deny:\n      - 用户未明确授权的其他本地路径\n  environment:\n    allow:\n      - ZCM_HOME\n      - ZCM_OUTPUT_DIR\n    deny:\n      - all-other-environment-variables\n  billing:\n    - 标书生成会消耗 Api Key 所属账户可用字数\n  credentials:\n    input:\n      - Api Key 仅由用户本人写入 skill 内 config.json\n    deny:\n      - 在对话中索取或回显 Api Key\n  data-handling:\n    deny:\n      - 附件地址外传\n      - 文件流外传\n      - base64 外传\n---\n\n# 百炼®标书写作助手\n\n> Language policy: Follow the user's language for all explanations, summaries, prompts, and ordinary replies. If the user language is unclear, ask or mirror the latest user language. Platform menu names, source procurement terms, risk labels, and generated report artifacts may remain in Simplified Chinese (zh-CN) when they reflect the upstream platform or report template.\n\n## MCP Permission Declaration\n\nThis skill declares the minimum capabilities below and should be reviewed against exactly this boundary:\n- `Read`: only user-provided tender/bid files, this skill's own scripts/docs, and local `config.json`.\n- `Write`: only generated outputs in `biaoshu-bailian-files/` and local `config.json`.\n- `Network`: only `https://biaoshu.zhiliaobiaoxun.com` for the 百炼®标书开放 API.\n- `Environment`: only optional `ZCM_HOME` and `ZCM_OUTPUT_DIR` for local storage paths.\n\nThis skill does not request shell-wide wildcard privileges beyond running its bundled local client `scripts/zcm.py`, does not access arbitrary domains, and does not read unrelated local files or environment variables.\n\nFor avoidance of doubt:\n- No arbitrary web browsing.\n- No access to unrelated local folders.\n- No reading of unrelated environment variables.\n- No credential collection inside chat.\n- No attachment export, file stream export, or base64 export to third parties.\n\n\n> 📌 本文档同时是 AI 助手的执行手册：文末「🚫 对用户输出的第一铁律」与「⚠️ 权限与数据说明」优先级最高、覆盖全文，任何面向用户的输出都必须先满足其要求；一切任务命令由助手后台代跑（后台操作手册见 [references/usage.md](references/usage.md)）。\n\n## 快速开始：获取 Api Key\n\n用百炼®标书写作助手出解读/标书/标书审查/标书查重，只需一个 Api Key。用户本人按官网流程注册可领赠送字数，三步搞定（向用户转述时**逐步骤完整给出**，链接必须原样显示完整 URL，不要写成「百炼®标书平台」之类的链接文字）：\n\n1. 打开官网 https://biaoshu.zhiliaobiaoxun.com/?ch=c666 ，由用户本人按官网流程注册并登录（注册可领赠送字数）；\n2. 登录后点**左侧菜单『Skill 接入 → 获取 Api Key』**，在弹出面板中**查看/复制 Api Key**（首次打开自动生成，形如 `bk_live_xxxxx`；重置后旧 Key 立即失效）；\n3. 在**当前已安装的 biaoshu-bailian skill 根目录**创建凭证文件 `config.json`，写入一行 `{\"app_key\": \"bk_live_xxxxx\"}`（把 `bk_live_xxxxx` 换成自己的 Key），并将文件权限设为 `600`。**Api Key 是账户的完整凭证，请用户本人写入，不要在对话里索取手机号、短信验证码、Api Key，也不要让用户粘贴或复述 Key。**\n\n**安装说明/提示词必须这样约束 Api Key 落盘**：请 AI 助手先定位当前安装的 `biaoshu-bailian/SKILL.md` 所在目录，然后指导用户在同级目录创建或更新 `config.json`。不要写到 `~/.zcm/` 等全局旧目录，不要用环境变量替代 skill 内凭证文件，也不要把 Api Key 拼进任何链接。\n\n**升级 skill 必须保留配置**：如果当前已安装目录存在 `config.json`，升级时不得删除、覆盖或替换该文件；只能更新 `SKILL.md`、`scripts/`、`references/` 等 skill 内容文件。本地生成目录 `biaoshu-bailian-files/` 也必须保留。\n\n无 Key 时各功能会打印上述获取指引而非崩溃。更多配置细节见 [references/usage.md](references/usage.md)（仅供助手后台使用）。\n\n## 四大功能\n\n### 🔍 智能解读\n- **输入**：招标文件（`.pdf` / `.doc` / `.docx`，**≤ 50 MB**），仅限本地文件路径（云端文件请让用户先自行下载到本地）。\n- **输出**：8 维度结构化解读——项目信息 / 合标项 / 废标红线 / 评分标准 / 关键要求 / 商务条款 / 报价要求 / 采购背景；外加**控标洞察**（参与建议、控标信号、行动建议）。可导出解读报告（HTML / Word）。\n- **使用示例**（用户可以这样说）：\n  - 「帮我解读这份招标文件 `/Users/me/某采购项目招标文件.pdf`」\n  - 「看看这个标能不能投？有哪些废标红线？文件我已经放在 `/Users/me/下载/某项目招标文件.docx`」\n  - 「分析一下这份招标文件的评分标准和控标风险，顺便出一份解读报告」\n  - 「这个采购项目值不值得投？我们资格够不够？」（把文件放本地、给我路径即可，我来定制分析）\n  - 用户得到：「参与建议：谨慎参与 · 控标风险：高 · 废标红线 30 条 · 技术主观分占 45%」等解读要点 + 报告绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_智能解读.html`）（后续制作/审查自动复用该项目，无需重传）。\n\n![智能解读报告示例](https://raw.githubusercontent.com/chichihaixiaojian666/biaoshu-skill/main/report-interpret.png)\n\n### 📝 标书制作\n- **输入**：已解读项目 + 分包选择（无分包时自动跳过选包）+ 目标页数；平台当前最大页数上限为 1200 页，实际提交页数还必须以抽包结果里的 `max_total_pages` 为准。若用户在上传/提供招标文件后明确要求制作标书或投标文件，且未指定页数，则默认生成200页的标书，并用 `max_total_pages` 校验；同时要告诉用户也可以指定 1 到 max_total_pages 范围内的页数。\n- **输出**：成品投标文件 `.docx`——按招标文件名自动命名，自动完成选包、抽需求、生成大纲、生成正文、抽取制式模板并导出，含目录、章节与「待填项」定位书签。（此步按生成内容消耗可用字数。）\n- **使用示例**（用户可以这样说）：\n  - 「就用刚才解读的项目，帮我生成投标文件」\n  - 「这是招标文件，直接帮我做一份标书」\n  - 「选 01 包，生成一份 80 页左右的标书，存到桌面」\n  - 「这个项目出标书，包和页数你先列出来让我确认」\n  - 「时间紧，先给我出个标书框架，页数用系统建议，但开始前先问我」\n  - 用户得到：解读完成后，助手必须先抽取分包。当用户只要求解读或尚未明确制作意图时，如存在多个分包，展示分包清单并让用户选择；如无分包/单项目，不再询问包选择，直接进入页数确认。页数确认时展示「系统建议页数 / 最大页数 / 预计消耗字数」，并明确说明预计消耗仅供参考，实际消耗以平台最终结算为准；用户确认前不得提交生成任务。若用户在上传/提供招标文件后明确要求制作标书或投标文件（如「做标书」「生成投标文件」「出一份响应文件」），视为已授权自动制作：无分包/单包时自动继续，直接走 interpret → packages → generate --no-wait → progress-stream → download-url；多包项目必须停下来让用户确认具体包，不默认全选。未指定页数时默认 200 页，并带入 max_total_pages 校验；如果 200 超过 max_total_pages，则按上限提示用户确认或使用上限页数。无论走自动制作还是确认流程，面向用户都要说明“默认按 200 页生成，也可以指定 1 到 max_total_pages 范围内的页数”。用户已指定包/页数时按指定值执行并校验上限。用户明确说「先列出来让我确认」「开始前先问我」时，按确认流程暂停。提交生成后不做字数不足示警。生成过程中必须持续播报阶段、百分比、已用时间和当前章节，平台暂未返回细节时也要每 5 秒转述运行中心跳。若生成中途因 `insufficient_balance` / `insufficient_points` 停止，必须明确说明平台不会自动续跑；如果后端已导出半成品，先交付半成品下载链接，并提示充值或购买字数包后可用 `continue-generate` 继续生成正文。最后交付短时下载链接或本地成品路径；下载链接有效期以平台返回的 `expires_in` 为准，失效后只能重新获取新链接。制式表格/范本会尽量自动抽取或生成，无法确认的信息保留为待填项。（此步按生成内容消耗可用字数，生成耗时可能超过 10 分钟；章节级进度取决于后端 `progress` 是否持续写入。）\n\n### ✅ 标书审查\n- **输入**：招标文件（已解读）+ **一份或多份**投标文件（`.doc` / `.docx` / `.pdf`，**支持多选，最多 100 份**；**单份 ≤ 1024 MB**，**总大小不超过 2GB**）。\n- **审查选项**：支持标记暗标、电子投标；可填写敏感单位名称用于检索；可按需关闭语义审查，仅保留规则类检查。\n- **输出**：分级风险问题清单（高风险 / 待复核 / 提示，每条带招标依据、投标证据、修改建议）+ 一句话结论 + 检查范围 + 语义审查状态/部分结果提示 + 多文件雷同检测 + 人工核查清单。可导出审查报告。（此步按平台规则消耗可用字数。）\n- **使用示例**（用户可以这样说，招标文件需已解读）：\n  - 「审查一下这份投标文件 `/Users/me/某项目_投标文件.docx` 有没有废标风险」\n  - 「把 `A公司投标.docx` 和 `B公司投标.docx` 一起查一遍，看看有没有雷同和风险」\n  - 「这是暗标，帮我查格式和红线问题，出一份合规报告」\n  - 「投之前帮我把把关，别废标」（把投标文件放本地、给我路径即可）\n  - 用户得到：「高风险 0 · 待复核 39 · 提示 25」+ 一句话结论、检查范围、语义审查是否完整、整改建议 + 报告绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_合规审查.html`）（多份文件时含雷同检测结果；部分结果不得说成完整审查）。\n\n![合规审查报告示例](https://raw.githubusercontent.com/chichihaixiaojian666/biaoshu-skill/main/report-compliance.png)\n\n> 报告采用 editorial 版式（侧栏目录、风险统计、卡片化问题与证据），HTML 可离线打开、可打印。\n\n### 🔁 标书查重\n- **入口判断**：用户说「查重 / 雷同 / 相似 / 两份像不像 / 会不会被判雷同 / 围标风险线索」时，才进入标书查重；不要误走标书审查。查重只比较**不同投标文件之间**的相似/雷同风险。\n- **输入**：必须先收齐 `2-3` 份合法持有的**投标文件**（`.doc` / `.docx` / `.pdf`，仅限本地文件路径，云端文件请让用户先自行下载到本地）。招标文件不是投标文件，不能凑数；如用户提供招标文件，只能作为可选的 `1` 份公共表述基线（≤ 50 MB）。投标文件单份 ≤ 1024 MB，总大小不超过 2GB。\n- **发起前确认**：未收齐至少 2 份投标文件前，不得发起查重；收齐后还必须先确认用户合法持有并有权处理全部上传文件。查重结果仅供提交前内部自查，不构成围标、串标或违法违规的法律认定。\n- **输出**：按文件对展示文本相似、图片相似、文档元数据、主体线索、招标原文共同表述等风险线索，包含风险率、证据片段和修改建议。当前 skill 输出完整 JSON 结果，可在百炼®标书平台查看历史报告。（此步按平台规则消耗可用字数。）\n- **使用示例**（用户可以这样说）：\n  - 「帮我查一下这两份投标文件有没有雷同风险：`/Users/me/A公司投标.docx` 和 `/Users/me/B公司投标.docx`」\n  - 「这三份响应文件做一下相似检查，招标文件是 `/Users/me/招标文件.pdf`」\n  - 「投之前帮我看两份标书像不像，会不会有围标风险线索」\n  - 用户得到：如果投标文件不足 2 份，先提示「还需要至少 2 份投标文件才能查重」；如果已收齐，先请用户确认合法持有和处理权限，再发起查重。完成后展示文件对风险率、相似片段、图片/元数据/主体线索风险提示和修改建议。\n\n智能解读、标书生成、标书审查、标书查重的结果均可同步在百炼®标书平台查看：<https://biaoshu.zhiliaobiaoxun.com/?ch=c666>\n\n> 百炼®标书是面向投标场景的**投标全流程工作台**。网页工作台之外，也支持通过**开放 API 与 Skill 接入**完成解读、抽包、生成、标书审查与标书查重。\n>\n> **字数计费说明**：智能解读免费，可用字数为 0 也能发起；标书制作、标书审查、标书查重通过开放 API / Skill 按平台规则消耗可用字数。标书生成的预计消耗仅供页数确认参考，实际消耗以平台最终结算为准；生成前不做余额不足示警，也不做余额拦截。抽包、任务查询、结果获取、知识库查询等辅助查询不作为独立成果单独计费。\n\n## 🪶 轻咨询也接得住 & 顺势衔接下一步\n\n- **只给片段、问通用问题也接得住**：用户只粘了一段招标公告/采购需求，或问「投标要注意什么 / 暗标有什么要求 / 技术方案怎么写 / 常见废标原因有哪些 / 控标怎么识别」时，先给一段通用要点应答，**再按第一铁律说清「怎么给完整文件」**（上传文件，或给本地绝对路径并举个示例；本 skill 只读本地文件，云端文件请让用户先自行下载到本地），引导补上文件后做定制解读/审查。\n- **一步做完，顺势提示下一步**（用户不接就不再追）：解读完 → 问「要不要接着基于它生成投标文件？」；但用户一开始已明确要求制作标书或投标文件时，无分包/单包项目不追问、不停顿，直接跑完“智能解读 → 抽包 → 标书制作 → 交付成品”；多包项目必须停下来让用户确认包。标书生成完 → 问「要不要再做一遍标书审查、排查废标风险？」；标书审查完 → 问「要不要按整改清单改完后复审一次？」；用户提供多份不同主体投标文件时 → 可提示「要不要单独做标书查重，看雷同/相似风险线索？」。\n\n## 🚫 对用户输出的第一铁律（优先级最高，覆盖本文档其余所有内容）\n\n- 本 skill 的一切命令（`python3 …`、`zcm.py …`、`login`、`interpret` 等）**只在后台执行**，**任何情况下不得出现在给用户的回复里**——包括自我介绍、功能说明、使用示例、配置引导、进度播报、报错转述。\n- 用户只需要做两件事：**提供文件、说需求**；Api Key 由用户按「快速开始」自行写入本地凭证文件（Key 不进对话）。其余任务命令全部由你（助手）代跑。\n- 用户问「怎么用 / 给我些示例」时，**只展示上方各功能「使用示例」里的场景话术**（用户怎么说 → 得到什么），并告诉他「把文件给我、直接说需求即可」。[references/usage.md](references/usage.md) 里的命令是你的后台操作手册，**不是可以展示给用户的内容**。\n- **安装成功后的介绍、或用户问「这个 skill 能干什么 / 怎么拿 Api Key」时，必须完整传达两块信息；可按用户当前语言转述，涉及平台菜单、风险等级、报告标题等专有术语可保留简体中文原词**：\n  ① **怎么获取 Api Key**——「快速开始：获取 Api Key」的三步流程完整给出，**尤其第 3 步的凭证配置方式**（用户在 skill 目录下自建 `config.json`、写入 `{\"app_key\": \"bk_live_xxxxx\"}`、Key 不进对话）必须说清；\n  ② **有什么功能**——「四大功能」小节，**尤其各功能「使用示例」的场景话术和「用户得到」**必须完整出现。\n  两块都要**完整传达关键信息与示例**，可以按用户当前语言转述，不必逐字照抄；示例不可省略。\n- **让用户提供文件时，必须说清「怎么给」**：无论是要招标文件还是投标文件，都不能只说「发给我」。要明确告诉用户两种方式任选——**① 直接上传文件；② 给出本地文件路径**（绝对路径，形如 `/Users/你的用户名/Downloads/某采购项目招标文件.pdf`），并**举一个具体路径示例**（本 skill 只读本地文件，云端文件请让用户先自行下载到本地）。别让用户猜格式。\n- **产物交付必须清楚**：解读报告 / 合规报告 / 查重报告每次产出后，把**每个文件的完整绝对路径**（形如 `/Users/you/biaoshu-bailian-files/某项目_智能解读.html`）逐行告诉用户；成品标书默认交付**短时下载链接**（脚本会打印链接、文件名、大小、有效期），用户明确要本地文件时再用 `result <job_id> -o <路径>.docx` 下载并告知绝对路径。标书查重未请求报告时只总结 JSON 核心结论，不编造本地报告路径。\n- **凭证保护**：不得在回复中复述/输出 Api Key，也不得转发任何**携带 Key 的链接**（如平台 402 返回的 `?bind_key=` 充值/绑定链接——会经会话记录、截图、链接预览泄露）；涉及充值/账户操作只给不含参数的官网普通链接。\n\n## ⚠️ 权限与数据说明（首次使用前告知用户）\n\n- **文件外发**：用户提供的招标/投标文件会**上传至百炼®标书服务器**（`biaoshu.zhiliaobiaoxun.com`）处理。此类文件常含商业、报价与个人信息，上传前须确认用户知悉并同意。\n- **网络访问**：仅访问上述百炼®标书域名（API 调用），无其他外联；不抓取任何云端链接。\n- **本地读写**：读取用户指定的文件；产物（标书/报告）写入 `biaoshu-bailian-files/`；凭证存 skill 内 `config.json`（权限 600，logout 可删，保存后把文件位置告知用户）。\n- **数据留存**：上传的文件与产出结果以 Api Key 所属账户身份**留存在百炼®标书服务器**——任务结果与成品 .docx 约 7 天后过期，历史数据可登录官网查看管理。\n- **计费**：标书生成消耗 Api Key 所属账户的可用字数，提交前脚本会预检可用字数。\n- **环境变量**：仅读取上方 frontmatter 声明的 `ZCM_*` 可选配置项，不读取其他任何环境变量。\n- **不采集**：本 skill 不采集设备信息、不代注册账号、不收集手机号/验证码。\n\n## 进一步\n\n凭 **Api Key** 调用百炼®标书开放 API，完成投标全流程。所有任务走「**提交 → 自动轮询 → 取结果**」统一异步模型，以 Api Key 所属用户身份执行（复用其知识库与可用字数账户）。底层由零依赖 Python 客户端封装鉴权、轮询与友好错误码（具体命令见 [references/usage.md](references/usage.md)）。\n\n- **执行任务前先读** [references/usage.md](references/usage.md)：各步参数、命名规则、计费与凭证规则、报告/边界情形、断点续查、幂等、错误处理。\n- **输出铁律**（除非用户明确说不要）：运行脚本时进度照常显示、不重定向吞掉；解读/标书/合规结果文件的**绝对全路径**必须打印给用户。详见 usage.md 顶部「⚠️ 输出约定」。\n- **链接铁律**：凡向用户展示百炼®标书平台地址（注册、查看结果、充值、绑定等），一律**原样输出完整 URL**（如 https://biaoshu.zhiliaobiaoxun.com/?ch=c666 ），不要用「百炼®标书平台」「官网」这类超链接文字代替或省略。\n- **接口契约**（开放 API 端点、错误码、解读/合规/查重返回字段）→ 见 [references/api.md](references/api.md)。\n\nFile v1.0.17:_meta.json\n\n{\n  \"ownerId\": \"kn7dz1pzdygwz7z5fwfmrvhrnn84cs8q\",\n  \"slug\": \"biaoshu-writer-read\",\n  \"version\": \"1.0.17\",\n  \"publishedAt\": 1789546463078\n}\n\nFile v1.0.17:references/api-auth.md\n\n# 鉴权、任务与可用字数接口\n\n只在处理 Api Key、账户权益、任务轮询、结果下载、错误处理时读取本文件。\n\n## 鉴权\n\n- Base URL：`https://biaoshu.zhiliaobiaoxun.com/api/open/v1`\n- Header：`X-App-Key: <Api Key>`\n- 可选 Header：`Idempotency-Key: <UUID>`，同一个 key 24 小时内复用同一 `job_id`，避免重复提交。\n- 开放 API 受平台总开关控制；关闭时整层 404。\n\nApi Key 获取路径：打开 https://biaoshu.zhiliaobiaoxun.com/?ch=c666 → 用户本人按官网流程注册/登录 → 左侧菜单「Skill 接入 → 获取 Api Key」。\n\n## `GET /me`\n\n查询当前 Api Key 所属用户的权益与限制。\n\n```json\n{\n  \"available_words\": 1397084,\n  \"wallet_balance\": 1397084,\n  \"limits\": {\"rate_per_min\": 60, \"max_concurrent_jobs\": 3, \"running_jobs\": 0}\n}\n```\n\n- `available_words` 是当前可用字数。\n- `wallet_balance` 仅为兼容旧客户端，展示给用户时统一说“可用字数”。\n\n## `GET /word-entitlements`\n\n查询当前用户权益明细，返回会员周期字数、永久字数包、历史积分迁移字数、冻结字数等。历史积分迁移字数按“字数包”展示，永久有效。\n\n## 任务状态\n\n### `GET /jobs/{job_id}`\n\n返回任务状态、进度、错误信息。\n\n```json\n{\n  \"job_id\": \"...\",\n  \"service\": \"interpretation|bid_document|compliance|bid_duplicate\",\n  \"status\": \"queued|running|succeeded|failed|canceled\",\n  \"progress\": {\n    \"percent\": 47,\n    \"stage\": \"content\",\n    \"stage_label\": \"生成内容\",\n    \"message\": \"正在写正文 32/80 节\",\n    \"current_step\": 32,\n    \"total_steps\": 80,\n    \"current_step_label\": \"项目实施方案\",\n    \"elapsed_seconds\": 360,\n    \"estimated_remaining_seconds\": 120\n  },\n  \"error\": null\n}\n```\n\n长任务必须把 `percent/stage_label/message/current_step_label/elapsed_seconds` 转述给用户，避免看起来卡住。\n\n### `GET /jobs/{job_id}/result`\n\n- 智能解读、标书审查、标书查重返回 JSON。\n- 标书制作返回 `.docx` 二进制流。\n\n### `GET /jobs/{job_id}/download-url`\n\n仅标书制作任务成功后可用，返回短时下载链接。\n\n```json\n{\n  \"filename\": \"某项目投标文件.docx\",\n  \"download_url\": \"https://biaoshu.zhiliaobiaoxun.com/api/open/v1/jobs/job_xxx/download?token=短时token\",\n  \"expires_in\": 86400,\n  \"size_bytes\": 3980000\n}\n```\n\n短时 token 绑定 `job_id/user_id/export_id/过期时间`，不包含 Api Key。用户看到的就是 `filename/download_url/expires_in/size_bytes`；标书半成品还会返回 `partial/continue_available/outline_id/completion`。\n\n## 计费与 402\n\n- 智能解读免费，可用字数为 0 也能发起。\n- 标书制作、标书审查、标书查重按平台规则消耗可用字数。\n- 标书审查、标书查重提交前可用字数不足返回 402 `insufficient_balance`。\n- 标书生成会按页数做提交前预估，默认 `500` 字/页，再乘以安全系数；预估仅供参考，实际消耗以平台最终结算为准；生成前不根据余额做字数不足示警，不阻止提交。\n- 生成中如果字数用尽，任务会停止继续写正文；如果平台已导出半成品，先交付半成品下载链接，并提示购买会员或字数包后用 `continue-generate` 继续生成正文。\n- 不要把平台返回的 `recharge_url` / `bind_url` 原样转发给用户，因为可能包含 `bind_key`。只给官网普通地址：`https://biaoshu.zhiliaobiaoxun.com/recharge?ch=c666`。\n\nFile v1.0.17:references/api-bid-workflow.md\n\n# 智能解读与标书制作 API\n\n用于“解读招标文件 → 抽包 → 选页数 → 生成成品标书”的完整流程。智能解读和标书制作强相关，放在同一分册。\n\n## 流程\n\n1. `POST /interpretations` 上传招标文件，得到解读任务。\n2. `GET /jobs/{job_id}` 轮询解读进度。\n3. `GET /jobs/{job_id}/result` 获取 `project_id` 和 8 维度解读结果。\n4. `POST /bid-documents/{project_id}/packages` 抽取分包。\n5. 展示分包、系统建议页数、最大页数、预计消耗字数、当前可用字数，让用户确认。\n6. `POST /bid-documents/{project_id}/generate` 生成成品标书。\n7. `GET /jobs/{job_id}/download-url` 获取短时下载链接。\n\n## `POST /interpretations`\n\n- 入参：multipart `file` 或 JSON `{\"file_url\":\"https://...\"}`。\n- 文件：招标文件 `.pdf/.doc/.docx`，≤ 50 MB。\n- 返回：`{\"job_id\":\"...\"}`\n- 计费：智能解读免费，可用字数为 0 也能发起；生成前按页数做消耗预估，预估仅供参考，实际消耗以平台最终结算为准。\n\n结果中的 `result.project_id` 是后续抽包、生成、标书审查的统一项目句柄。\n\n核心字段：\n\n- `project_info[]`：项目基本信息。\n- `compliance[]`：合标/资格要求。\n- `disqualification[]`：废标红线。\n- `evaluation[]`：评分标准。\n- `key_requirements[]`：关键要求。\n- `business_terms[]`：商务条款。\n- `pricing[]`：报价要求。\n- `procurement_analysis{}`：采购背景。\n- `decision_analysis{}`：控标洞察、参与建议、风险信号、行动建议。\n\n## `POST /bid-documents/{project_id}/packages`\n\n- 无 body。\n- 返回分包列表和页数建议。\n- 抽包是标书制作的准备动作，不作为独立成果单独计费。\n\n典型结果：\n\n```json\n{\n  \"service\": \"bid_document\",\n  \"result\": {\n    \"packages\": [],\n    \"is_multi_package\": false,\n    \"package_count\": 1,\n    \"suggested_pages\": 200,\n    \"max_total_pages\": 1200,\n    \"estimated_words_per_page\": 500,\n    \"estimate_reserve_factor\": 1.05,\n    \"suggested_estimated_words\": 105000,\n    \"estimate_note\": \"按目标页数约 500 字/页估算，预计消耗仅供参考，实际消耗以平台最终结算为准\"\n  }\n}\n```\n\n规则：\n\n- `is_multi_package=true`：必须展示 `packages` 给用户选择，收集 `package_ids`。\n- `is_multi_package=false`：不问包，直接进入页数确认，生成时传 `--no-package`。\n- 用户未确认页数前不得提交生成任务；用户输入页数不能超过 `max_total_pages`。\n- 使用系统建议页数时，也必须把抽包结果里的 `suggested_pages` 明确带入 Skill 生成命令，不能默认按固定页数处理。\n\n## `POST /bid-documents/{project_id}/generate`\n\n入参：\n\n```json\n{\"package_ids\":[11,12],\"total_pages\":80}\n```\n\n非多包项目可省略 `package_ids`。`total_pages` 最高 1200。\n\n计费与拦截：\n\n- 标书制作按实际生成内容消耗可用字数。\n- Open API / Skill 提交前按 `total_pages * 500 * 1.05` 预估所需字数；预估仅供页数确认参考，实际消耗以平台最终结算为准；生成前不做余额不足示警。\n- Skill 调用 `generate` 时需把抽包结果里的 `max_total_pages` 作为动态上限；超过则本地拒绝，不提交 Open API。\n- 生成前只展示预计消耗，不根据余额做字数不足示警，也不阻止创建长任务；生成中如果真实消耗超过剩余可用字数，再按平台规则停止并返回不足提示。\n- 生成中如果真实消耗超过剩余可用字数，任务会停止继续写正文，错误码可能是 `insufficient_balance` / `insufficient_points`。如果后端已经成功导出半成品，skill 应先交付半成品下载链接；充值或购买字数包后，用 `continue-generate` 基于同一 `outline_id` 继续生成正文，不要重新解读、抽包或重建大纲。\n\n进度阶段：\n\n- `select`：选包。\n- `requirements`：抽需求。\n- `outline`：生成大纲。\n- `content`：生成正文。\n- `templates`：抽取制式模板并识别待填项。\n- `export`：导出 Word。\n\n进度字段：\n\n- `/jobs/{job_id}` 应持续返回 `progress.percent`、`progress.stage` / `stage_label`、`progress.message`、`progress.current_step`、`progress.total_steps`、`progress.current_step_label`、`progress.elapsed_seconds`，可选返回 `estimated_remaining_seconds`。\n- 如果后端没有写入上述字段，skill 只能展示排队/运行心跳，不能生成章节级进度。\n\n完成前完整性校验：\n\n- 后端在标记 `succeeded` 前应校验计划章节数、已生成章节数、空章节、模板占位符、待填项和导出 docx 结构。\n- 发现缺章节或结构异常时，不应标记成功；应自动补写，或把任务置为 `failed` 并返回明确错误码/原因供 skill 转述。\n\n生成成功后先取 `download-url` 给用户短时链接；用户明确要本地文件时，再用 `result -o` 下载本地文件。若 `download-url` 返回 `partial=true`，必须说明这是半成品、展示 `completion.generated/total/missing`，并提示补足可用字数后执行 `continue-generate <project_id> --outline-id <outline_id> --no-wait`。下载链接有效期以后端返回 `expires_in` 为准；如需统一为 1 天，后端签发 token 的 TTL 应为 `86400` 秒，skill 只展示该值。\n\n耗时对齐：\n\n- Open API / skill 链路应与网页端使用同一套生成 worker、模型、并发、缓存与模板填充策略。\n- 若耗时明显慢于网页端，排查时记录 `job_id`、页数、包号、提交/完成时间和各阶段进度，先定位是否走了降级慢链路。\n\nFile v1.0.17:references/api-compliance.md\n\n# 标书审查 API\n\n用于发起标书合规审查。标书审查不是免费能力，按平台规则消耗可用字数。\n\n## `POST /projects/{project_id}/compliance-reviews`\n\n前置：`project_id` 来自智能解读结果。招标文件必须先解读，审查复用同一个 project，不重复上传招标文件。\n\n入参：\n\n- multipart `bid_files`：一份或多份投标文件。\n- 或 JSON `{\"file_urls\":[...],\"is_blind_bid\":false,\"is_electronic_bid\":false}`。\n\n文件限制：\n\n- 投标文件支持 `.doc/.docx/.pdf`。\n- 最多 100 份。\n- 单份 ≤ 1024 MB。\n- 总大小 ≤ 2 GB。\n\n选项：\n\n- `is_blind_bid`：暗标。\n- `is_electronic_bid`：电子投标。\n- `sibling_unit_names`：敏感单位名称。\n- `semantic_review=false` 或 `enable_semantic_review=false`：关闭语义审查，仅保留规则类检查。\n\n返回：`{\"job_id\":\"...\"}`\n\n计费：\n\n- 发起前校验可用字数。\n- 审查完成后按平台规则消耗可用字数；具体消耗以平台流水为准。\n- 可用字数不足返回 402 `insufficient_balance`。\n\n## 结果字段\n\n`GET /jobs/{job_id}/result` 返回：\n\n```json\n{\n  \"service\": \"compliance\",\n  \"result\": {\n    \"compliance\": {\n      \"run_id\": 42,\n      \"status\": \"completed\",\n      \"summary\": {},\n      \"partial_summary\": {},\n      \"bid_files\": [],\n      \"issues\": [],\n      \"similarity_issues\": [],\n      \"manual_items\": [],\n      \"scope_summary_lines\": [],\n      \"error_message\": null\n    }\n  }\n}\n```\n\n重点字段：\n\n- `summary`：高风险/待复核/提示数量、一句话结论、语义审查状态。\n- `partial_summary`：部分结果或阶段性结果提示。\n- `issues[]`：合规问题，含风险等级、招标依据、投标证据、修改建议。\n- `similarity_issues[]`：多份投标文件之间的雷同线索。\n- `manual_items[]`：人工核查清单。\n- `scope_summary_lines[]`：检查范围。\n\n如果 `semantic_review` 或 `partial_summary` 表示语义审查未完整完成，必须如实说“当前为部分结果/语义审查未完整完成”，不能说成完整审查。\n\n## 常见错误\n\n- 409 `report_task_conflict`：同一用户已有合规/查重类任务运行中，等完成后再发起。\n- 422 `validation_error`：投标文件缺失、类型不支持、数量或选项不合法。\n- 413：文件超出单份或总大小限制。\n- 402：可用字数不足，提示购买会员或字数包后重试。\n\nFile v1.0.17:references/api-duplicate.md\n\n# 标书查重 API\n\n用于比较 2-3 份不同投标文件之间的雷同/相似风险。标书查重不是免费能力，按平台规则消耗可用字数。\n\n## 发起前流程\n\n1. 先收齐 2-3 份投标文件。\n2. 招标文件可选，只能作为 `tender_file` 公共表述基线，不能算作投标文件。\n3. 发起前必须确认用户合法持有并有权处理全部投标文件/招标文件。\n\n## `POST /bid-duplicate/runs`\n\n入参：\n\n- multipart `bid_files`：2-3 份投标文件。\n- multipart `tender_file`：可选 1 份招标文件。\n- 或 JSON / 表单 URL 字段：`bid_file_urls`、`tender_file_url`。\n- 必填：`legal_possession_attested=true`。\n\n文件限制：\n\n- 投标文件支持 `.doc/.docx/.pdf`，必须 2-3 份。\n- 投标文件单份 ≤ 1024 MB。\n- 招标文件可选 1 份，≤ 50 MB。\n- 总大小 ≤ 2 GB。\n- 不支持扫描型 PDF。\n\n选项：\n\n- `enable_image`：图片相似检查，默认 true。\n- `enable_metadata`：文档元数据检查，默认 true。\n- `enable_semantic`：语义相似检查，默认 true。\n- `exclude_tender_baseline`：排除招标原文共同表述，默认 true。\n\n返回：`{\"job_id\":\"...\"}`\n\n计费：\n\n- 发起前校验可用字数。\n- 查重完成后按平台规则消耗可用字数；具体消耗以平台流水为准。\n- 可用字数不足返回 402 `insufficient_balance`。\n\n## 结果字段\n\n`GET /jobs/{job_id}/result` 返回：\n\n```json\n{\n  \"service\": \"bid_duplicate\",\n  \"result\": {\n    \"run_id\": 123,\n    \"duplicate\": {}\n  }\n}\n```\n\n`duplicate` 按文件对展示：\n\n- 文本相似。\n- 图片相似。\n- 文档元数据。\n- 主体线索。\n- 招标原文共同表述。\n- 风险率、证据片段和修改建议。\n\n查重只输出风险线索，不输出“已串标/确认围标”等定性结论，也不提供规避监管的一键降重建议。\n\n## 常见错误\n\n- 422 `validation_error`：投标文件不足 2 份、超过 3 份、未确认合法持有、文件类型或大小不合法。\n- 409 `report_task_conflict`：同一用户已有合规/查重类任务运行中。\n- 402 `insufficient_balance`：可用字数不足，提示购买会员或字数包后重试。\n- 500/任务失败 `bid_duplicate_failed`：优先转述 `duplicate_error_message`；错误详情会带 `run_id`、`duplicate_status`，用于后台定位。\n\nFile v1.0.17:references/api.md\n\n# 百炼®标书开放 API 总调度\n\n> **契约兼容标注（skill biaoshu-bailian 3.1.2）**\n> - 适配后端 API：`/api/open/v1`\n> - 契约核对日期：2026-09-07\n> - 本文件只做场景分发。执行具体任务时只读取对应分册，避免一次性加载全部接口细节。\n\n## 先读哪个文件\n\n| 当前任务 | 读取文件 |\n|---|---|\n| Api Key、鉴权、可用字数、限流、任务状态、结果下载、402 处理 | [api-auth.md](api-auth.md) |\n| 智能解读、抽包、页数确认、生成成品标书、生成进度、成品短时下载链接 | [api-bid-workflow.md](api-bid-workflow.md) |\n| 标书审查、暗标/电子标/敏感单位/语义审查、多文件合规报告 | [api-compliance.md](api-compliance.md) |\n| 标书查重、2-3 份投标文件相似/雷同风险、可选招标文件基线 | [api-duplicate.md](api-duplicate.md) |\n| 企业资料库查询、待填项本地回填字段解释 | [knowledge-fields.md](knowledge-fields.md) |\n\n## 全局约定\n\n- **Base URL**：`https://biaoshu.zhiliaobiaoxun.com/api/open/v1`\n- **鉴权**：所有受保护接口都带 `X-App-Key: <Api Key>`。\n- **任务模型**：提交接口返回 `job_id`；用 `GET /jobs/{job_id}` 轮询；用 `GET /jobs/{job_id}/result` 或 `download-url` 获取结果。\n- **计费口径**：智能解读免费，可用字数为 0 也能发起；标书制作、标书审查、标书查重按平台规则消耗可用字数。标书生成的页数预估仅供参考，实际消耗以平台最终结算为准；生成前不做余额不足示警，也不做余额拦截。抽包、任务查询、结果获取、知识库查询等辅助查询不作为独立成果单独计费。\n- **文件留存**：上传文件与任务结果以 Api Key 所属账户身份留存在百炼®标书服务器；任务结果与成品约 7 天后过期。\n- **安全边界**：不要向用户展示或转发任何携带 Api Key / `bind_key` 的链接。\n\n## 常见错误码\n\n| HTTP | code | 处理 |\n|---|---|---|\n| 401 | `missing_credentials` / `invalid_credentials` | 检查或重置 Api Key |\n| 402 | `insufficient_balance` / `insufficient_points` | 可用字数不足，提示购买会员或字数包后重试 |\n| 404 | `not_found` / `job_not_found` / `project_not_found` / `result_expired` | 检查开放 API 开关、句柄归属或结果是否过期 |\n| 409 | `invalid_job_state` / `report_task_conflict` | 等前置任务完成，或等待已有审查/查重任务结束 |\n| 422 | `validation_error` | 检查文件数量、类型、大小、必填参数 |\n| 413 | `bid_file_too_large` / `tender_file_too_large` / `batch_too_large` | 文件超限，压缩或拆分后重试 |\n| 429 | `rate_limited` / `too_many_concurrent_jobs` | 退避重试或降低并发 |\n| 500 | `internal_error` | 稍后重试或反馈平台 |\n\nFile v1.0.17:references/knowledge-fields.md\n\n# 知识库字段说明\n\n本文件供助手在**本地待填项回填**时查阅。推荐流程：\n1. 先用 `python3 scripts/zcm.py knowledge-base` 查看可用分类；\n2. 再按需查询某一类，例如 `python3 scripts/zcm.py knowledge-base qualifications`；\n3. 本地模型根据下列字段含义匹配待填项；\n4. **没有把握的字段宁可保留待填项，不要臆造。**\n\n> 开放范围仅含：`company_profile`、`qualifications`、`performances`、`financial_reports`。\n> 明确不含：历史标书库、标书模板库。\n> 明确不返回：任何附件地址、文件流、base64、附件布尔标记。\n\n## 一、company_profile（企业信息）\n\n| field_key | 字段名 | 说明 | 是否可直接回填 |\n|---|---|---|---|\n| `company_name` | 公司名称 | 企业全称/投标人名称 | 是 |\n| `enterprise_type` | 企业类型 | 单位性质/企业性质 | 是 |\n| `business_term` | 营业期限 | 营业执照中的经营期限 | 是 |\n| `credit_code` | 统一社会信用编码 | 企业统一社会信用代码 | 是 |\n| `registered_address` | 注册地址 | 营业执照注册地址 | 是 |\n| `office_address` | 办公地址 | 企业办公/联系地址 | 是 |\n| `legal_representative` | 法人名称 | 法定代表人姓名 | 是 |\n| `legal_rep_position` | 职务 | 法定代表人职务 | 是 |\n| `legal_rep_phone` | 法人联系方式 | 法定代表人联系电话 | 仅模板明确要求时回填 |\n\n## 二、qualifications（企业资质）\n\n| field_key | 字段名 | 说明 | 是否可直接回填 |\n|---|---|---|---|\n| `qualification_name` | 资质名称 | 资质/证书名称 | 是 |\n| `certificate_number` | 证书编号 | 资质证书编号 | 是 |\n| `valid_period` | 有效期限 | 统一按“起始日期 至 截止日期/长期”返回 | 是 |\n\n> 资质是**多条记录**。回填前先判断模板要的是哪类资质，再选对应记录，不要默认取第一条。\n\n## 三、performances（企业业绩）\n\n| field_key | 字段名 | 说明 | 是否可直接回填 |\n|---|---|---|---|\n| `contract_name` | 合同名称 | 业绩对应的合同或项目名称 | 是 |\n| `client_name` | 客户名称 | 甲方/客户名称 | 是 |\n| `contract_amount` | 合同金额 | 合同金额原值 | 是 |\n| `completion_date` | 完成时间 | 竣工/验收/完成日期 | 是 |\n\n> 业绩同样是**多条记录**。需要按项目名称、客户、金额或时间要求筛选最匹配的一条或几条，不能把多条业绩混成一条。\n\n## 四、financial_reports（财务报告）\n\n当前仅开放**分类入口**，暂不开放具体字段。\n\n这意味着：\n- 可以知道当前租户存在该类资料；\n- 不能通过本接口取出财务报告的正文、附件或明细字段；\n- 本地模型不要自行假设或补写财务数据。\n\n## 使用边界\n\n- 没值：保留待填项，不要自行生成。\n- 多条记录：资质、业绩都要先选记录，再回填字段。\n- 附件资料：本接口不返回任何附件相关信息，不能据此推断附件内容。\n- 租户隔离：只能查询当前 Api Key 所属租户的数据，不能跨租户取数。\n\nFile v1.0.17:references/usage.md\n\n# 执行细节（操作手册）\n\n本文件是**执行任务时的完整操作指引**——做解读/制作/合规、生成报告、处理边界情形时按需查阅。接口总调度见 [api.md](api.md)，具体字段按场景读对应 API 分册。\n\n> ⚠️ **数据外发与知情同意**：解读/制作/合规/查重都会把用户提供的文件**上传至百炼®标书云端**（`biaoshu.zhiliaobiaoxun.com`）处理，此类文件常含商业、报价与个人信息；**上传文件与结果会以账户身份留存在百炼®标书服务器**（结果/成品约 7 天过期，可登录官网查看管理）。**首次上传前必须确认用户知悉并同意**（完整披露见 SKILL.md「⚠️ 权限与数据说明」）。\n\n## ⚠️ 输出约定（必须遵守，除非用户明确说不要）\n\n运行 `zcm.py` 时**老老实实把脚本输出原样给用户看**，不得为了「省事/抽字段」把它藏起来：\n\n1. **生成任务必须实时播报**：生成成品标书耗时长，禁止直接前台等待。必须先用 `generate ... --no-wait` 拿到 `job_id`，再立即启动 `progress-stream <job_id>`，把每次变化转述给用户（如「进度更新：标书正在生成中。已进入「生成正文」阶段（47%，32/80 节）。当前正在写「项目实施方案」。已用 6分钟。我会继续后台监听，完成后交付成品链接。」）。即使平台暂时没有返回百分比/章节，也要转述脚本每 5 秒输出的心跳句（如「进度更新：任务已开始运行，正在等待平台返回生成阶段进度。我会继续后台监听。」），让用户知道任务仍在跑。看到 `进度更新：`、`[完成]`、`[失败]` 这类行时直接转述或轻微润色，不要改写成“等待后台完成通知”。解读/抽包/合规/查重也要照常展示百分比+阶段。**不要 `2>` 重定向、不要吞掉**。\n2. **完整交付产物位置**：每次产出后，必须把以下信息明确告知用户：\n   - 智能解读结果/报告（`*_智能解读.html` 等）\n   - 成品标书默认给短时下载链接（含文件名、大小、有效期）；用户明确要本地文件时再下载为 `*_投标文件.docx`\n   - 合规审查结果/报告（`*_合规审查.html` 等）\n\n   脚本本身已打印这些信息（`generate` 默认打印下载链接；`result -o` 成功后打印本地全路径）；**别用 `>`/`2>` 把它们重定向掉**。若用 `--no-wait`，完成后须主动用 `download-url <job_id>` 补取成品链接，或在用户要求本地文件时用 `result <job_id> -o <路径>.docx` 下载。\n\n   此外，解读/生成/合规/查重完成后脚本会打印一行 `💰 当前可用字数：X`——**照常转述给用户**，让其对可用字数与「够不够下一次」有数；查询失败时不打印，属正常，不必追问。\n\n> 反例（禁止）：`python3 scripts/zcm.py generate <pid> > out.json 2> log` —— 这会同时藏掉进度和成品全路径。\n\n3. **凭证/字数类提示不要把命令与 exit 码原样抛给用户**：缺 Key（exit 2）、可用字数不足（402）这类脚本输出是给你（助手）看的提示。你应当把它翻译成一句「用户下一步该做什么」（去官网拿 Key、按指引把 Key 写入 skill 目录下的 `config.json`、或打开官网购买会员/字数包）——不要让用户自己敲命令，也不要索取或代存用户的 Key。\n4. **本手册里的一切命令永不面向用户**（SKILL.md 第一铁律）：命令只在后台执行；向用户介绍功能或举例时，用 SKILL.md 各功能「使用示例」的场景话术（用户怎么说 → 得到什么），不要把本文件的命令、参数、代码块贴进回复。\n\n## 用法速查（完整流程）\n\n```bash\n# 1. 配凭证：用户在 skill 目录下自建 config.json 写 {\"app_key\":\"bk_live_xxx\"}（Key 不进对话）\npython3 scripts/zcm.py me                            #    连通 + 可用字数自检\npython3 scripts/zcm.py interpret 招标文件.pdf --report html   # 2. 解读 → project_id（+解读报告）\npython3 scripts/zcm.py packages <project_id>         # 3. 抽包（多包才需选包）\npython3 scripts/zcm.py generate <project_id> --package-ids 11 --total-pages 80 --no-wait  # 4. 用户确认包和页数后生成\npython3 scripts/zcm.py compliance <project_id> 投标文件.docx --report html --name 招标文件.pdf   # 5. 可选：标书审查\npython3 scripts/zcm.py duplicate 投标A.docx 投标B.docx --tender-file 招标文件.pdf --legal-possession-attested --report html  # 6. 可选：标书查重（+查重报告）\n```\n招标文件支持 `.pdf/.doc/.docx`；标书审查和标书查重的投标文件支持 `.pdf/.doc/.docx`。全部自动轮询、实时播报后端进度。各步详解见下。\n\n## 明确制作意图：自动全流程\n\n用户上传/提供招标文件后，如果明确要求制作标书或投标文件（如「帮我做标书」「生成投标文件」「出一份响应文件」「直接做成标书」），视为已授权自动制作。无分包/单包时自动继续：interpret → packages → generate --no-wait → progress-stream → download-url；多包项目必须停下来让用户确认具体包，不默认全选。\n\n- 分包：先照常执行 `packages`。`is_multi_package=false` 时生成传 `--no-package`；`is_multi_package=true` 时展示分包清单并暂停，让用户确认选哪些包后再生成；用户已在原始需求里指定包号/包名时按指定包执行。\n- 页数：平台当前最大页数上限为 1200 页；用户已指定页数时按指定值执行，并用 `max_total_pages` 校验，超限必须拒绝；未指定页数时默认 200 页，默认生成200页的标书，并且生成命令带 `--total-pages 200` 与 `--max-total-pages`。对用户要明确说明：默认按 200 页生成，也可以指定 1 到 max_total_pages 范围内的页数。如果 `max_total_pages < 200`，不要提交 200 页；改为提示上限并让用户确认，或在用户明确允许自动按上限时使用 `--total-pages <max_total_pages>`。\n- 例外：用户明确说「包和页数先列出来让我确认」「开始前先问我」「不要直接生成」时，按常规确认流程暂停。\n- 进度：提交生成后立刻进入 `progress-stream`，持续转述阶段、百分比、当前章节、已用时间；即使只有心跳也要播报。完成后主动 `download-url` 取成品短时链接，用户要求本地文件时再下载。\n\n## 目录\n- [第 1 步：凭证](#第-1-步凭证)\n- [第 2 步：智能解读](#第-2-步智能解读)\n- [明确制作意图：自动全流程](#明确制作意图自动全流程)\n- [第 3 步：抽取分包](#第-3-步抽取分包)\n- [第 4 步：生成成品标书](#第-4-步生成成品标书)\n- [第 5 步：标书审查](#第-5-步标书审查)\n- [第 6 步：标书查重](#第-6-步标书查重)\n- [报告生成与命名](#报告生成与命名)\n- [关键约定](#关键约定)\n\n---\n\n## 第 1 步：凭证\n\n凭证默认存在 **当前 skill 根目录的 `config.json`**（权限 600，含真实 Key——**绝不上传发布包/提交仓库**，发布包不含配置文件）。Api Key 只从 **当前 `biaoshu-bailian/SKILL.md` 同级的 config.json** 读取（路径固定，不经环境变量、无旧目录回退、不可重定向）。\n\n**升级保留配置**：升级 skill 时，必须保留当前安装目录里的 `config.json` 和 `biaoshu-bailian-files/`；只覆盖 `SKILL.md`、`scripts/`、`references/` 等内容文件。不要用会清空整个目录的安装方式直接覆盖当前目录；如安装器只能强制覆盖，先装到临时目录，再同步内容文件到原目录并排除 `config.json`。\n\n**只需 Api Key 一项**，由用户**自行到官网获取**（本 skill 不代注册、不收集手机号/验证码）。获取全路径（转述时逐步骤完整给出，链接原样显示完整 URL）：\n打开官网 https://biaoshu.zhiliaobiaoxun.com/?ch=c666 → 用户本人按官网流程注册并登录（注册可领赠送字数）→ 点**左侧菜单『Skill 接入 → 获取 Api Key』**，在弹出面板中查看/复制 Api Key（首次打开自动生成，形如 `bk_live_xxxxx`，重置后旧 Key 立即失效）。\n\n**配置方式（唯一引导方式：用户本人写入本地凭证文件，Key 不进对话）**：\n指导用户先定位当前安装的 `biaoshu-bailian/SKILL.md` 所在目录，在同级目录创建 `config.json`，写入一行 `{\"app_key\": \"bk_live_xxxxx\"}`（把 Key 换成自己的）。**不要索取、让用户粘贴或在回复中复述 Key**（会话记录、截图、链接预览都可能泄露凭证）。可选字段仅保留 `output_dir` 成品存放目录；开放 API 地址固定为官方生产环境，不接受本地覆盖。配好后先跑 `me` 自检连通与可用字数。\n\n- 缺凭证时脚本会打印官网获取指引并退出（码 2），把指引转述给用户即可。\n- 先 `python3 scripts/zcm.py me` 确认连通与可用字数（生成会消耗可用字数）。\n\n### 可用字数不足（402，给用户自助链接，skill 不代办）\n\n可用字数不足时脚本会打印引导，照原样转达给用户，由用户**自行登录官网购买会员或字数包**后回到对话继续，Api Key 全程不变：入口 `https://biaoshu.zhiliaobiaoxun.com/recharge?ch=c666`（用本人账号登录后操作）。\n\n- 🔒 **凭证保护（强制）**：平台 402 错误体里的 `recharge_url` / `bind_url` **携带明文 `bind_key`（即用户的 Api Key）**——**一律不得把这类带 Key 的链接转发进对话**（会话记录、截图、链接预览都可能泄露 Key，他人拿到即可操作该账户）。只给上面这条不含任何参数的普通入口链接。\n- ⛔ **禁止**：已有 Key 的用户，别引导他去官网「另注册新账号 / 另生成新 Key 再切换」——可用字数会留在孤立新账号上、还得换 Key。\n\n## 第 2 步：智能解读\n\n唯一招标文件入口；只在这步传一次，后续全程复用 `project_id`。\n\n```bash\npython3 scripts/zcm.py interpret /path/招标文件.pdf      # 仅本地路径\n```\n- 支持 `.pdf/.doc/.docx`，**≤ 50 MB**（超限脚本提前报错）。自动轮询，结束打印 `project_id`（**记下它**）+ **解读摘要**，默认不再向 WorkBuddy 打印完整 JSON，以免大结果拖慢展示；完整明细通过解读报告交付。\n- **不支持云端链接**：传入 http(s) 链接会被脚本直接拒绝（本 skill 不做任何远程抓取）。用户给的是链接时，请他先自行下载到本地，再提供本地路径。\n- **直接把解读摘要展示给用户**——至少包含项目名称、`project_id`、控标建议/风险、合标项/废标红线/评分项等结构化条目数量，并交付 HTML 解读报告全路径；不要默认打印完整 `/result` JSON。只有后台排查或用户明确要原始 JSON 时，才加 `--full-json` 打印完整结果。字段口径见 [api-bid-workflow.md](api-bid-workflow.md)。\n- 展示后**主动问是否生成解读报告**（见[报告生成与命名](#报告生成与命名)）。但用户已经明确要求制作标书或投标文件时，不在这里停顿，仍要自动生成 HTML 解读报告并继续抽包、生成成品标书。\n\n## 第 3 步：抽取分包\n\n```bash\npython3 scripts/zcm.py packages <project_id>\n```\n- `is_multi_package=true` → 把返回的 `packages` 呈现给用户挑选，收集选中的 `package_ids`；即使用户已明确要求制作标书或投标文件，只要没有在原始需求里指定包，多包项目必须停下来让用户确认，不能默认全选。\n- `is_multi_package=false` → 常规流程不询问包选择，直接进入页数确认；第 4 步自动传 `--no-package`。自动全流程下直接传 `--no-package` 继续生成。\n- `max_total_pages` 是当前项目最大页数；平台当前最大页数上限为 1200 页。用户想指定页数时，以抽包结果里的上限为准，超过必须拒绝，不要提交生成；向用户提示可指定范围时使用“1 到 max_total_pages 页”。\n- 页数确认时展示：系统建议页数、最大页数、预计消耗字数、当前可用字数。优先使用抽包结果里的 `suggested_estimated_words`；用户改页数时按 `total_pages * estimated_words_per_page * estimate_reserve_factor` 重新估算，并说明“预计消耗仅供参考，实际消耗以平台最终结算为准”。\n- **确认门槛（有例外）**：常规解读后，如果用户尚未明确制作意图，抽包后必须暂停到页数确认；多包项目还必须先确认选哪些包。用户确认“生成多少页/使用系统建议页数”之前，不得进入第 4 步。但用户在上传/提供招标文件后已明确要求制作标书或投标文件时，无分包/单包时自动继续；多包项目必须停下来让用户确认具体包。未指定页数时默认 200 页，并校验 `max_total_pages`；同时告诉用户也可以指定 1 到 max_total_pages 范围内的页数。\n\n## 第 4 步：生成成品标书\n\n**生成成品标书按生成内容消耗可用字数**，耗时较长。默认不下载本地文件，完成后输出短时下载链接：\n- 用户只要成品 → 不传 `-o`，脚本完成后打印文件名、大小、下载链接和有效期。\n- 用户明确要本地文件 → `-o <路径>`；想长期固定本地输出目录 → `login --output-dir <目录>`。\n\n```bash\npython3 scripts/zcm.py generate <project_id> --package-ids 11,12 --total-pages 80 --max-total-pages 1200\n# 非多包且用户未指定页数：python3 scripts/zcm.py generate <project_id> --no-package --total-pages 200 --max-total-pages 1200\n# WorkBuddy/ClawHub 必须追加 --no-wait，并另起 progress-stream 实时播报\n# 需要本地文件时：完成后再 result <job_id> -o 投标文件.docx\n```\n- 生成前脚本会强制校验：多包必须传用户已确认或已明确指定的 `--package-ids`，无分包/单项目自动传 `--no-package`；必须已确认页数或按明确制作意图使用默认 200 页（`--total-pages`）；必须带入抽包结果的 `--max-total-pages`；并且默认必须用 `--no-wait` 进入实时进度模式。\n- 生成前脚本会按确认页数预估本次需要字数；用户页数超过 `max_total_pages` 会直接拒绝；不根据余额做字数不足示警，直接继续提交 Open API 生成任务。预估公式是 `total_pages * estimated_words_per_page * estimate_reserve_factor`，当前平台默认等价于 `页数 * 500 * 1.05`；预计消耗仅供参考，实际消耗以平台最终结算为准。\n- 完成后默认打印**成品下载链接**；如用户明确要求本地文件，完成后再下载并打印**成品完整路径**+所在目录，**两项都告诉用户**。\n- 成品下载链接有效期只以后端 `download-url` 返回的 `expires_in` 为准；skill 只能展示该值，不能单方面延长。若链接失效，用同一 `job_id` 重新获取下载链接；若要把“半小时/1 小时”统一改为 1 天，需要后端签发 token 的 TTL 改为 `86400` 秒。\n- 后端会按「选包 → 抽需求 → 生成大纲 → 生成正文 → 抽取制式模板 → 导出」串行完成；页数规划会综合分包结构、技术/商务内容、表格和图表，`total_pages` 最高 1200。\n- 制式表格/范本会尽量自动抽取或生成；无法确认的公司资料、日期、报价、签章等信息会保留为待填项，不要替用户编造。\n- **跟用户解释字数计费时统一说**：智能解读免费，可用字数为 0 也能发起；标书制作、标书审查、标书查重按平台规则消耗可用字数。标书生成的预计消耗仅供参考，实际消耗以平台最终结算为准；生成前只做预估，不做字数不足示警，也不会因预估字数不足而拦截提交。抽包、任务查询、结果获取、知识库查询等辅助查询不作为独立成果单独计费。\n- **生成中可用字数不足**：平台会停止继续写正文并可能返回 `insufficient_balance` / `insufficient_points`。skill 必须明确告诉用户“本次任务已停止，平台不会自动续跑”；如果 `download-url` 返回 `partial=true`，先交付半成品下载链接，展示已生成/总章节/缺失章节，并提示购买会员或字数包后用 `continue-generate <project_id> --outline-id <outline_id> --no-wait` 继续生成正文。不要重新解读、抽包或重建大纲。\n- ⏱ **生成可能耗时 >10 分钟**（实测 30 页约 15 分钟）。固定流程：`generate <pid> ... --no-wait` 拿 `job_id` → `progress-stream <job_id>` 实时转述阶段/百分比/当前章节/已用时间 → 完成后 `download-url <job_id>` 取短时下载链接；用户明确要本地文件时再用 `result <job_id> -o <路径>.docx` 下载。万一监听中断，用同一 `job_id` 续查即可；半成品补写用 `continue-generate`，不要重发 generate。\n- **默认页数口径**：常规流程继续展示系统建议页数、最大页数和预计消耗，让用户确认。自动制作流程下，用户明确要求制作标书或投标文件即视为同意默认生成200页的标书；未指定页数时默认 200 页，命令使用 `--total-pages 200` 和 `--max-total-pages`，不使用 `suggested_pages` 作为默认页数。提示用户时必须同时说明“也可以指定 1 到 max_total_pages 范围内的页数”。如果实际环境仍出现“单包项目明确要制作却停在页数确认”，优先检查用户安装的 WorkBuddy/Skill 是否不是 3.1.2+，或 WorkBuddy 是否没有按本手册执行。\n- **进度细节来源**：`progress-stream` 只转述 `/jobs/{job_id}` 返回的 `progress.percent/stage/message/current_step/total_steps/current_step_label/elapsed_seconds/estimated_remaining_seconds`。后端不写这些字段时，skill 只能输出运行心跳，不能编造章节级进度。\n- **内容完整性边界**：skill 不负责复刻生成算法，也不能只靠文案保证“内容完整”。后端应在标记 `succeeded` 前校验计划章节数、已生成章节数、空章节、模板占位符、待填项和导出 docx 结构；发现缺章节或结构异常时应自动补写，或把任务置为 failed 并返回明确原因，skill 再如实转述。\n- **耗时排查口径**：如果 Open API / skill 生成明显慢于网页登录流程，先记录 `job_id`、页数、包号、提交/完成时间、进度阶段，再排查后端是否使用同一套生成 worker、模型、并发、缓存与模板填充策略；skill 侧不要靠重试或降级流程掩盖慢链路。\n\n## 第 5 步：标书审查\n\n要**两样输入，都要让用户提供**：\n1. **招标文件**（`.pdf/.doc/.docx`）→ 经第 2 步解读产出 `project_id`；已解读则复用，不重传。\n2. **投标文件**：**一份或多份** `.pdf/.doc/.docx`，被审查对象（仅本地路径），**支持多选，最多 100 份**；**每份 ≤ 1024 MB**，**总大小不超过 2GB**。\n\n```bash\npython3 scripts/zcm.py compliance <project_id> /path/投标A.docx /path/投标B.docx\n# 暗标/电子标：加 --blind / --electronic\n# 敏感单位名称：加 --sibling-unit-names \"甲公司,乙设计院\"\n# 关闭语义审查：加 --no-semantic-review\n```\n- **不支持云端链接**：传链接会被脚本拒绝，请用户先自行下载到本地。\n- 审查选项与平台一致：暗标、电子投标、敏感单位名称、语义审查开关。关闭语义审查时只能表述为“规则类检查结果”，不能说成完整语义审查。\n- 标书审查按平台规则消耗可用字数；发起前会校验可用字数，不足时提示购买会员/字数包后重试。\n- **直接把合规结果展示给用户**——含 `summary`（风险计数 + 一句话结论 + 语义审查状态）、`partial_summary`（阶段性/部分结果统计）、`scope_summary_lines`（检查范围）、`issues[]`（风险等级/招标依据/投标证据/修改建议）、`similarity_issues[]`（多文件雷同）、`manual_items[]`（人工核查清单）。优先讲高风险、结论与审查完整性。字段见 [api-compliance.md](api-compliance.md)。\n- 若 `summary.conclusion_phase`、`summary.semantic_review` 或 `partial_summary` 表示语义审查处理中、部分完成或只完成规则检查，必须如实说明“当前为部分结果/语义审查未完整完成”，不要说成完整审查完成。\n- `risk_level` 实测为 `high`/`review`/`tip`，脚本输出与报告**已自动转中文**（高风险/待复核/提示），直接用中文呈现。\n- 未解读就调 → 409；投标文件缺失/类型不对 → 422（两份输入缺一不可）。\n- 展示后**主动问是否生成合规报告**（见下）。\n\n## 第 6 步：标书查重\n\n用于比较不同主体投标文件之间的雷同/相似风险。它不是标书审查，也不判断投标文件是否合规；结果只作为提交前内部自查线索，不构成围标、串标或违法违规的法律认定。\n\n固定按这 3 步走，缺一步都不要提交任务：\n\n1. **先收集投标文件**：必须是 2-3 份投标文件。只有 1 份投标文件，或“1 份投标文件 + 1 份招标文件”，都不能发起查重；应提示用户再提供至少 1 份投标文件。\n2. **再处理招标文件（可选）**：招标文件只能放到 `--tender-file`，用于排除招标原文造成的共同表述，不能放进投标文件列表里凑数。\n3. **最后确认合法持有**：发起前必须先问并得到用户确认：「请确认你合法持有并有权处理本次上传的全部投标文件/招标文件。确认后我再发起标书查重。」\n\n```bash\npython3 scripts/zcm.py duplicate /path/A公司投标.docx /path/B公司投标.docx --legal-possession-attested --report html\n# 可选关联招标文件，用于排除招标原文造成的共同表述：\npython3 scripts/zcm.py duplicate /path/A公司投标.docx /path/B公司投标.docx /path/C公司投标.docx \\\n  --tender-file /path/招标文件.pdf --legal-possession-attested --report html\n# 可选关闭维度：--no-image / --no-metadata / --no-semantic\n# 默认排除招标文件原文共同表述；如用户明确要求不排除，可加 --include-tender-baseline\n```\n\n- 投标文件必须 **2-3 份**，支持 `.doc/.docx/.pdf`；单份 ≤ 1024 MB，总大小不超过 2GB。投标文件不足 2 份时直接补问，不要提交 API。\n- 招标文件可选 **1 份**，支持 `.doc/.docx/.pdf`，≤ 50 MB；用于降低招标原文共同表述对相似度的干扰。\n- **不支持云端链接**：传链接会被脚本拒绝，请用户先自行下载到本地。\n- 标书查重按平台规则消耗可用字数；发起前会校验可用字数，不足时提示购买会员/字数包后重试。\n- 查重维度：连续文本/段落结构、图片相似、文档元数据、主体线索、招标基线。\n- 查重完成后展示 JSON 里的核心结论，并在用户需要或命令带 `--report html|docx|both` 时生成本地 HTML/Word 查重报告。必须输出报告绝对路径。\n- 若任务失败返回 `bid_duplicate_failed`，优先转述平台返回的具体原因；错误详情通常会带 `run_id`、`duplicate_status`、`duplicate_error_message`，用于后台定位是哪次查重运行失败。\n- 查重报告只呈现文件对风险率、证据片段、图片/元数据/主体线索异常、修改建议；不要输出“已串标/确认围标”等定性结论。\n\n## 报告生成与命名\n\n解读/合规/查重结果可渲染成报告（HTML / Word），零依赖：\n\n```bash\n# 随命令一步出（默认 html；要 Word：--report both）\npython3 scripts/zcm.py interpret 招标文件.pdf --report html\npython3 scripts/zcm.py compliance <pid> 投标.docx --report html --name 招标文件.doc\npython3 scripts/zcm.py duplicate 投标A.docx 投标B.docx --legal-possession-attested --report html\n# 按 job_id 补出\npython3 scripts/zcm.py report --job <JOB_ID> --name 招标文件.pdf            # html\npython3 scripts/zcm.py report --job <JOB_ID> --name 招标文件.pdf --format both  # +Word\npython3 scripts/zcm.py report --job <JOB_ID> --service bid_duplicate --format html\n```\n- **默认只出 HTML**；用户明确要 Word 才 `docx`/`both`。\n- 命名：`招标文件名_智能解读` / `招标文件名_合规审查` / `标书查重_时间戳`。取名优先级：`--name` > 结果自动识别（`original_filename` / `project_info.项目名称` / 本地缓存）> `标签_时间戳`。\n  - `interpret` 自动用上传文件名；`generate` 自动用缓存名；**`compliance`/`report --job` 拿不到招标文件名时务必带 `--name`**，否则退化时间戳。`bid_duplicate` 不依赖招标文件名时默认使用时间戳命名。\n- 报告内容依赖后端按对应 API 分册返回完整结果；合规 HTML 总览会展示检查范围、结论、语义审查状态和部分结果摘要；`/result` 只回句柄或字段空时，报告注明「无明细」而不报错。\n\n## 知识库取数（供本地待填项回填）\n\n当需要用企业资料辅助**本地**待填项回填时，不改走生成主流程，而是单独查询开放 API：\n\n```bash\npython3 scripts/zcm.py knowledge-base\npython3 scripts/zcm.py knowledge-base company_profile\npython3 scripts/zcm.py knowledge-base qualifications --page 1 --page-size 50\npython3 scripts/zcm.py knowledge-base performances --page 1 --page-size 50\npython3 scripts/zcm.py knowledge-base financial_reports --page 1 --page-size 50\n```\n\n- 返回按类别分组的结构化 JSON；分页类默认前 **50** 条。\n- **明确排除**：历史标书库、标书模板库。\n- 字段含义、可否直接回填、敏感字段边界见 [knowledge-fields.md](knowledge-fields.md)。\n\n## 关键约定\n\n- **必须输出完整路径**：解读报告 / 成品标书 / 合规报告生成后，把**每个文件的完整绝对路径**逐行告诉用户（脚本已用「已生成…/已下载…」打印绝对路径，照搬即可）——**不要只说落在某目录**。\n- **进度播报（两阶段，必须这样做才能实时）**：Bash 工具不流式传输 stderr，`--no-wait` + `progress-stream` + Monitor 是唯一能让用户看到实时进度的方式。长任务（interpret / generate / compliance / duplicate）统一走以下三步：\n  1. **提交**（同步，快）：加 `--no-wait`，Bash 运行后立即拿到 `job_id`。\n  2. **实时监听**：`Bash(run_in_background=True)` 运行 `python3 scripts/zcm.py progress-stream <job_id>`，再用 Monitor 订阅该进程 stdout——每行状态变更即时通知 Claude，Claude 实时转达给用户（如「5% 准备文档」→「生成内容 47% · 正在写正文 32/80 节」→「导出 Word」→「完成」）。Monitor 的 description 用正常任务名，**不带「重试」等临时标签**——即使是 worker_lost 后重新提交的 job，新 job 已正常运行，描述应反映当前状态而非历史原因。后端暂未给出细分进度时，`progress-stream` 会立即输出监听开始，并每 5 秒输出排队/运行中心跳句；这些心跳句也必须转述，避免用户误以为卡死。运行环境已激活 `smartBidding311` 时，优先直接用该环境里的 `python` 启动监听；不要用 `conda run` 包裹 `progress-stream`，它可能缓冲 stdout，导致前台看不到实时行。\n  3. **取结果 + 生成报告 + 输出路径**：Monitor 收到 `[完成]` 后必须主动补齐后处理，三类任务各有对应步骤：\n     - `interpret`：`result <job_id>`（提取 project_id）→ `report --job <job_id> --format html`（生成解读报告）→ 输出报告全路径\n     - `generate`：`download-url <job_id>`（获取短时下载链接）→ 输出文件名、大小、有效期和下载链接；用户明确要本地文件时再 `result <job_id> -o <路径>.docx`\n     - `compliance`：`result <job_id>`（打合规摘要）→ `report --job <job_id> --format html`（生成合规报告）→ 输出报告全路径\n     - `duplicate`：`result <job_id>`（打查重 JSON 摘要）→ `report --job <job_id> --service bid_duplicate --format html`（生成查重报告）→ 输出报告全路径；如果用户明确不要报告，则只输出文件对风险率、证据片段与修改建议，不输出本地报告路径\n     \n     > `--no-wait` 跳过了同步模式的后处理，**AI 必须手动补**，否则报告文件不会生成，用户看不到路径。\n  > 仅在用户不需要看进度或调试时才用单命令前台运行（无 `--no-wait`）。`packages` / `me` 等快速命令无需两阶段。\n- **断点续查**：`job <job_id>` 查状态、`result <job_id> [-o file]` 取结果、`cancel <job_id>` 取消。\n- **幂等**：网络重试给提交命令加 `--idempotency-key <UUID>`，避免重复建任务/重复扣费。\n- **续接已有 project**：用户解读后直接说「帮我生成」，沿用 `project_id` 从第 3 步继续，不重传。\n- **错误处理**：脚本已把 401/402/404/422/429 转中文。常见——402 可用字数不足让用户购买会员或字数包；整层 404 多为开放 API 总开关未开，让管理员开启；429 退避重试。完整对照见 [api.md](api.md)，按任务场景继续读对应分册。\n- **可用字数不足（402）**：开放 API / Skill 下，智能解读免费且可用字数为 0 也能发起；标书审查、标书查重仍会校验并按平台规则消耗可用字数；标书生成前只做预计消耗说明，不查余额、不做示警、不拒绝提交。脚本只打印**不含凭证参数的官网入口链接**，照原样转达即可；错误体里带 `bind_key` 的 `recharge_url`/`bind_url` 一律不转发（见第 1 步「凭证保护」）。\n\nFile v1.0.17:skill-card.md\n\n## Description:\n\nHelps agents upload tender and bid documents to the 百炼标书 service for AI-assisted tender interpretation, bid-document generation, compliance review, and duplicate-risk checks.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chichihaixiaojian666](https://clawhub.ai/user/chichihaixiaojian666)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and agents use this skill to evaluate tender requirements, generate bid documents, review bid compliance risks, and compare bid files for similarity before submission. It is intended for workflows where users can provide local tender or bid files and a 百炼标书 API key.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Tender and bid files may contain confidential business data and are uploaded to the vendor service for processing.\n\nMitigation: Use the skill only after confirming the user understands and accepts vendor processing and retention terms for the documents.\n\nRisk: The API key is a credential for the user's 百炼标书 account.\n\nMitigation: Keep config.json private, avoid sharing or echoing the API key in chat, and rotate the key through the service if exposure is suspected.\n\nRisk: Local metadata such as document names, job IDs, and project IDs may remain in ~/.zcm/projects.json.\n\nMitigation: Review or remove the local metadata file when those identifiers should not persist after use.\n\nRisk: Custom report basenames or output directories can affect local file writes.\n\nMitigation: Use trusted output paths and avoid untrusted report names or directories.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/chichihaixiaojian666/skills/biaoshu-writer-read)\n- [Publisher profile](https://clawhub.ai/user/chichihaixiaojian666)\n- [百炼标书 service](https://biaoshu.zhiliaobiaoxun.com/?ch=c666)\n- [Open API overview](references/api.md)\n- [Authentication, jobs, and billing](references/api-auth.md)\n- [Tender interpretation and bid-document workflow](references/api-bid-workflow.md)\n- [Compliance review API](references/api-compliance.md)\n- [Duplicate-risk API](references/api-duplicate.md)\n- [Knowledge-base fields](references/knowledge-fields.md)\n- [Usage guide](references/usage.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown responses, JSON API results, local HTML or Word reports, and generated .docx bid documents or short-lived download links.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Outputs may include risk summaries, report file paths, progress updates, account word-balance notices, and credential-setup guidance.]\n\n## Skill Version(s):\n\n1.0.17 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.16: 27 files, 84763 bytes\n\nFiles: references/api-auth.md (3471b), references/api-bid-workflow.md (5633b), references/api-compliance.md (2408b), references/api-duplicate.md (2330b), references/api.md (2814b), references/knowledge-fields.md (3123b), references/usage.md (29863b), scripts/report_lib/__init__.py (133b), scripts/report_lib/common.py (18478b), scripts/report_lib/generator.py (2466b), scripts/report_lib/renderers.py (17511b), scripts/report_lib/writers.py (37522b), scripts/report.py (322b), scripts/zcm_lib/__init__.py (47b), scripts/zcm_lib/billing.py (1280b), scripts/zcm_lib/cli.py (29595b), scripts/zcm_lib/files.py (2383b), scripts/zcm_lib/http_client.py (1918b), scripts/zcm_lib/jobs.py (8965b), scripts/zcm_lib/parser.py (12080b), scripts/zcm_lib/progress.py (3809b), scripts/zcm_lib/reporting.py (3856b), scripts/zcm_lib/storage.py (3518b), scripts/zcm.py (353b), skill-card.md (2623b), SKILL.md (21560b), _meta.json (139b)\n\nFile v1.0.16:SKILL.md\n\n---\nname: biaoshu-bailian\ndescription: 上传招标/投标文件，AI 一站式完成智能解读（废标红线/评分标准/控标洞察）、成品投标文件(.docx)生成、标书审查（分级风险+雷同检测）和标书查重（2-3份投标文件相似/雷同风险检查）。覆盖投标、招标、标书、投标文件、竞标、围标、控标、废标、评分标准、资格条件、技术标、商务标、暗标、响应文件、应答文件、雷同检测、相似检查、标书查重等场景——当用户提供或提及招标/投标文件、问「这个标能不能投 / 有哪些废标红线 / 帮我写投标书 / 检查标书有没有问题 / 两份投标文件像不像 / 会不会被判雷同」，或想解读招标文件、生成投标文件、做标书审查或查重时使用。需百炼®标书 Api Key（官网注册可领赠送字数）；文件经百炼®标书云端处理，智能解读免费，标书制作/审查/查重按可用字数计费。\nallowed-tools: Read, Write, Bash\npermissions:\n  network:\n    allow:\n      - biaoshu.zhiliaobiaoxun.com\n    deny:\n      - all-other-domains\n  filesystem:\n    read:\n      - 用户明确提供的招标文件\n      - 用户明确提供的投标文件\n      - 本 skill 自身脚本与 references 文档\n      - skill 内 config.json\n    write:\n      - biaoshu-bailian-files/\n      - skill 内 config.json\n    deny:\n      - 用户未明确授权的其他本地路径\n  environment:\n    allow:\n      - ZCM_HOME\n      - ZCM_OUTPUT_DIR\n    deny:\n      - all-other-environment-variables\n  billing:\n    - 标书生成会消耗 Api Key 所属账户可用字数\n  credentials:\n    input:\n      - Api Key 仅由用户本人写入 skill 内 config.json\n    deny:\n      - 在对话中索取或回显 Api Key\n  data-handling:\n    deny:\n      - 附件地址外传\n      - 文件流外传\n      - base64 外传\n---\n\n# 百炼®标书写作助手\n\n> Language policy: Follow the user's language for all explanations, summaries, prompts, and ordinary replies. If the user language is unclear, ask or mirror the latest user language. Platform menu names, source procurement terms, risk labels, and generated report artifacts may remain in Simplified Chinese (zh-CN) when they reflect the upstream platform or report template.\n\n## MCP Permission Declaration\n\nThis skill declares the minimum capabilities below and should be reviewed against exactly this boundary:\n- `Read`: only user-provided tender/bid files, this skill's own scripts/docs, and local `config.json`.\n- `Write`: only generated outputs in `biaoshu-bailian-files/` and local `config.json`.\n- `Network`: only `https://biaoshu.zhiliaobiaoxun.com` for the 百炼®标书开放 API.\n- `Environment`: only optional `ZCM_HOME` and `ZCM_OUTPUT_DIR` for local storage paths.\n\nThis skill does not request shell-wide wildcard privileges beyond running its bundled local client `scripts/zcm.py`, does not access arbitrary domains, and does not read unrelated local files or environment variables.\n\nFor avoidance of doubt:\n- No arbitrary web browsing.\n- No access to unrelated local folders.\n- No reading of unrelated environment variables.\n- No credential collection inside chat.\n- No attachment export, file stream export, or base64 export to third parties.\n\n\n> 📌 本文档同时是 AI 助手的执行手册：文末「🚫 对用户输出的第一铁律」与「⚠️ 权限与数据说明」优先级最高、覆盖全文，任何面向用户的输出都必须先满足其要求；一切任务命令由助手后台代跑（后台操作手册见 [references/usage.md](references/usage.md)）。\n\n## 快速开始：获取 Api Key\n\n用百炼®标书写作助手出解读/标书/标书审查/标书查重，只需一个 Api Key。用户本人按官网流程注册可领赠送字数，三步搞定（向用户转述时**逐步骤完整给出**，链接必须原样显示完整 URL，不要写成「百炼®标书平台」之类的链接文字）：\n\n1. 打开官网 https://biaoshu.zhiliaobiaoxun.com/?ch=c666 ，由用户本人按官网流程注册并登录（注册可领赠送字数）；\n2. 登录后点**左侧菜单『Skill 接入 → 获取 Api Key』**，在弹出面板中**查看/复制 Api Key**（首次打开自动生成，形如 `bk_live_xxxxx`；重置后旧 Key 立即失效）；\n3. 在**当前已安装的 biaoshu-bailian skill 根目录**创建凭证文件 `config.json`，写入一行 `{\"app_key\": \"bk_live_xxxxx\"}`（把 `bk_live_xxxxx` 换成自己的 Key），并将文件权限设为 `600`。**Api Key 是账户的完整凭证，请用户本人写入，不要在对话里索取手机号、短信验证码、Api Key，也不要让用户粘贴或复述 Key。**\n\n**安装说明/提示词必须这样约束 Api Key 落盘**：请 AI 助手先定位当前安装的 `biaoshu-bailian/SKILL.md` 所在目录，然后指导用户在同级目录创建或更新 `config.json`。不要写到 `~/.zcm/` 等全局旧目录，不要用环境变量替代 skill 内凭证文件，也不要把 Api Key 拼进任何链接。\n\n**升级 skill 必须保留配置**：如果当前已安装目录存在 `config.json`，升级时不得删除、覆盖或替换该文件；只能更新 `SKILL.md`、`scripts/`、`references/` 等 skill 内容文件。本地生成目录 `biaoshu-bailian-files/` 也必须保留。\n\n无 Key 时各功能会打印上述获取指引而非崩溃。更多配置细节见 [references/usage.md](references/usage.md)（仅供助手后台使用）。\n\n## 四大功能\n\n### 🔍 智能解读\n- **输入**：招标文件（`.pdf` / `.doc` / `.docx`，**≤ 50 MB**），仅限本地文件路径（云端文件请让用户先自行下载到本地）。\n- **输出**：8 维度结构化解读——项目信息 / 合标项 / 废标红线 / 评分标准 / 关键要求 / 商务条款 / 报价要求 / 采购背景；外加**控标洞察**（参与建议、控标信号、行动建议）。可导出解读报告（HTML / Word）。\n- **使用示例**（用户可以这样说）：\n  - 「帮我解读这份招标文件 `/Users/me/某采购项目招标文件.pdf`」\n  - 「看看这个标能不能投？有哪些废标红线？文件我已经放在 `/Users/me/下载/某项目招标文件.docx`」\n  - 「分析一下这份招标文件的评分标准和控标风险，顺便出一份解读报告」\n  - 「这个采购项目值不值得投？我们资格够不够？」（把文件放本地、给我路径即可，我来定制分析）\n  - 用户得到：「参与建议：谨慎参与 · 控标风险：高 · 废标红线 30 条 · 技术主观分占 45%」等解读要点 + 报告绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_智能解读.html`）（后续制作/审查自动复用该项目，无需重传）。\n\n![智能解读报告示例](https://raw.githubusercontent.com/chichihaixiaojian666/biaoshu-skill/main/report-interpret.png)\n\n### 📝 标书制作\n- **输入**：已解读项目 + 分包选择（无分包时自动跳过选包）+ 目标页数；平台当前最大页数上限为 1200 页，实际提交页数还必须以抽包结果里的 `max_total_pages` 为准。若用户在上传/提供招标文件后明确要求制作标书或投标文件，且未指定页数，则默认生成200页的标书，并用 `max_total_pages` 校验；同时要告诉用户也可以指定 1 到 max_total_pages 范围内的页数。\n- **输出**：成品投标文件 `.docx`——按招标文件名自动命名，自动完成选包、抽需求、生成大纲、生成正文、抽取制式模板并导出，含目录、章节与「待填项」定位书签。（此步按生成内容消耗可用字数。）\n- **使用示例**（用户可以这样说）：\n  - 「就用刚才解读的项目，帮我生成投标文件」\n  - 「这是招标文件，直接帮我做一份标书」\n  - 「选 01 包，生成一份 80 页左右的标书，存到桌面」\n  - 「这个项目出标书，包和页数你先列出来让我确认」\n  - 「时间紧，先给我出个标书框架，页数用系统建议，但开始前先问我」\n  - 用户得到：解读完成后，助手必须先抽取分包。当用户只要求解读或尚未明确制作意图时，如存在多个分包，展示分包清单并让用户选择；如无分包/单项目，不再询问包选择，直接进入页数确认。页数确认时展示「系统建议页数 / 最大页数 / 预计消耗字数」，并明确说明预计消耗仅供参考，实际消耗以平台最终结算为准；用户确认前不得提交生成任务。若用户在上传/提供招标文件后明确要求制作标书或投标文件（如「做标书」「生成投标文件」「出一份响应文件」），视为已授权自动制作：无分包/单包时自动继续，直接走 interpret → packages → generate --no-wait → progress-stream → download-url；多包项目必须停下来让用户确认具体包，不默认全选。未指定页数时默认 200 页，并带入 max_total_pages 校验；如果 200 超过 max_total_pages，则按上限提示用户确认或使用上限页数。无论走自动制作还是确认流程，面向用户都要说明“默认按 200 页生成，也可以指定 1 到 max_total_pages 范围内的页数”。用户已指定包/页数时按指定值执行并校验上限。用户明确说「先列出来让我确认」「开始前先问我」时，按确认流程暂停。提交生成后不做字数不足示警。生成过程中必须持续播报阶段、百分比、已用时间和当前章节，平台暂未返回细节时也要每 5 秒转述运行中心跳。若生成中途因 `insufficient_balance` / `insufficient_points` 停止，必须明确说明平台不会自动续跑；如果后端已导出半成品，先交付半成品下载链接，并提示充值或购买字数包后可用 `continue-generate` 继续生成正文。最后交付短时下载链接或本地成品路径；下载链接有效期以平台返回的 `expires_in` 为准，失效后只能重新获取新链接。制式表格/范本会尽量自动抽取或生成，无法确认的信息保留为待填项。（此步按生成内容消耗可用字数，生成耗时可能超过 10 分钟；章节级进度取决于后端 `progress` 是否持续写入。）\n\n### ✅ 标书审查\n- **输入**：招标文件（已解读）+ **一份或多份**投标文件（`.doc` / `.docx` / `.pdf`，**支持多选，最多 100 份**；**单份 ≤ 1024 MB**，**总大小不超过 2GB**）。\n- **审查选项**：支持标记暗标、电子投标；可填写敏感单位名称用于检索；可按需关闭语义审查，仅保留规则类检查。\n- **输出**：分级风险问题清单（高风险 / 待复核 / 提示，每条带招标依据、投标证据、修改建议）+ 一句话结论 + 检查范围 + 语义审查状态/部分结果提示 + 多文件雷同检测 + 人工核查清单。可导出审查报告。（此步按平台规则消耗可用字数。）\n- **使用示例**（用户可以这样说，招标文件需已解读）：\n  - 「审查一下这份投标文件 `/Users/me/某项目_投标文件.docx` 有没有废标风险」\n  - 「把 `A公司投标.docx` 和 `B公司投标.docx` 一起查一遍，看看有没有雷同和风险」\n  - 「这是暗标，帮我查格式和红线问题，出一份合规报告」\n  - 「投之前帮我把把关，别废标」（把投标文件放本地、给我路径即可）\n  - 用户得到：「高风险 0 · 待复核 39 · 提示 25」+ 一句话结论、检查范围、语义审查是否完整、整改建议 + 报告绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_合规审查.html`）（多份文件时含雷同检测结果；部分结果不得说成完整审查）。\n\n![合规审查报告示例](https://raw.githubusercontent.com/chichihaixiaojian666/biaoshu-skill/main/report-compliance.png)\n\n> 报告采用 editorial 版式（侧栏目录、风险统计、卡片化问题与证据），HTML 可离线打开、可打印。\n\n### 🔁 标书查重\n- **入口判断**：用户说「查重 / 雷同 / 相似 / 两份像不像 / 会不会被判雷同 / 围标风险线索」时，才进入标书查重；不要误走标书审查。查重只比较**不同投标文件之间**的相似/雷同风险。\n- **输入**：必须先收齐 `2-3` 份合法持有的**投标文件**（`.doc` / `.docx` / `.pdf`，仅限本地文件路径，云端文件请让用户先自行下载到本地）。招标文件不是投标文件，不能凑数；如用户提供招标文件，只能作为可选的 `1` 份公共表述基线（≤ 50 MB）。投标文件单份 ≤ 1024 MB，总大小不超过 2GB。\n- **发起前确认**：未收齐至少 2 份投标文件前，不得发起查重；收齐后还必须先确认用户合法持有并有权处理全部上传文件。查重结果仅供提交前内部自查，不构成围标、串标或违法违规的法律认定。\n- **输出**：按文件对展示文本相似、图片相似、文档元数据、主体线索、招标原文共同表述等风险线索，包含风险率、证据片段和修改建议。当前 skill 输出完整 JSON 结果，可在百炼®标书平台查看历史报告。（此步按平台规则消耗可用字数。）\n- **使用示例**（用户可以这样说）：\n  - 「帮我查一下这两份投标文件有没有雷同风险：`/Users/me/A公司投标.docx` 和 `/Users/me/B公司投标.docx`」\n  - 「这三份响应文件做一下相似检查，招标文件是 `/Users/me/招标文件.pdf`」\n  - 「投之前帮我看两份标书像不像，会不会有围标风险线索」\n  - 用户得到：如果投标文件不足 2 份，先提示「还需要至少 2 份投标文件才能查重」；如果已收齐，先请用户确认合法持有和处理权限，再发起查重。完成后展示文件对风险率、相似片段、图片/元数据/主体线索风险提示和修改建议。\n\n智能解读、标书生成、标书审查、标书查重的结果均可同步在百炼®标书平台查看：<https://biaoshu.zhiliaobiaoxun.com/?ch=c666>\n\n> 百炼®标书是面向投标场景的**投标全流程工作台**。网页工作台之外，也支持通过**开放 API 与 Skill 接入**完成解读、抽包、生成、标书审查与标书查重。\n>\n> **字数计费说明**：智能解读免费，可用字数为 0 也能发起；标书制作、标书审查、标书查重通过开放 API / Skill 按平台规则消耗可用字数。标书生成的预计消耗仅供页数确认参考，实际消耗以平台最终结算为准；生成前不做余额不足示警，也不做余额拦截。抽包、任务查询、结果获取、知识库查询等辅助查询不作为独立成果单独计费。\n\n## 🪶 轻咨询也接得住 & 顺势衔接下一步\n\n- **只给片段、问通用问题也接得住**：用户只粘了一段招标公告/采购需求，或问「投标要注意什么 / 暗标有什么要求 / 技术方案怎么写 / 常见废标原因有哪些 / 控标怎么识别」时，先给一段通用要点应答，**再按第一铁律说清「怎么给完整文件」**（上传文件，或给本地绝对路径并举个示例；本 skill 只读本地文件，云端文件请让用户先自行下载到本地），引导补上文件后做定制解读/审查。\n- **一步做完，顺势提示下一步**（用户不接就不再追）：解读完 → 问「要不要接着基于它生成投标文件？」；但用户一开始已明确要求制作标书或投标文件时，无分包/单包项目不追问、不停顿，直接跑完“智能解读 → 抽包 → 标书制作 → 交付成品”；多包项目必须停下来让用户确认包。标书生成完 → 问「要不要再做一遍标书审查、排查废标风险？」；标书审查完 → 问「要不要按整改清单改完后复审一次？」；用户提供多份不同主体投标文件时 → 可提示「要不要单独做标书查重，看雷同/相似风险线索？」。\n\n## 🚫 对用户输出的第一铁律（优先级最高，覆盖本文档其余所有内容）\n\n- 本 skill 的一切命令（`python3 …`、`zcm.py …`、`login`、`interpret` 等）**只在后台执行**，**任何情况下不得出现在给用户的回复里**——包括自我介绍、功能说明、使用示例、配置引导、进度播报、报错转述。\n- 用户只需要做两件事：**提供文件、说需求**；Api Key 由用户按「快速开始」自行写入本地凭证文件（Key 不进对话）。其余任务命令全部由你（助手）代跑。\n- 用户问「怎么用 / 给我些示例」时，**只展示上方各功能「使用示例」里的场景话术**（用户怎么说 → 得到什么），并告诉他「把文件给我、直接说需求即可」。[references/usage.md](references/usage.md) 里的命令是你的后台操作手册，**不是可以展示给用户的内容**。\n- **安装成功后的介绍、或用户问「这个 skill 能干什么 / 怎么拿 Api Key」时，必须完整传达两块信息；可按用户当前语言转述，涉及平台菜单、风险等级、报告标题等专有术语可保留简体中文原词**：\n  ① **怎么获取 Api Key**——「快速开始：获取 Api Key」的三步流程完整给出，**尤其第 3 步的凭证配置方式**（用户在 skill 目录下自建 `config.json`、写入 `{\"app_key\": \"bk_live_xxxxx\"}`、Key 不进对话）必须说清；\n  ② **有什么功能**——「四大功能」小节，**尤其各功能「使用示例」的场景话术和「用户得到」**必须完整出现。\n  两块都要**完整传达关键信息与示例**，可以按用户当前语言转述，不必逐字照抄；示例不可省略。\n- **让用户提供文件时，必须说清「怎么给」**：无论是要招标文件还是投标文件，都不能只说「发给我」。要明确告诉用户两种方式任选——**① 直接上传文件；② 给出本地文件路径**（绝对路径，形如 `/Users/你的用户名/Downloads/某采购项目招标文件.pdf`），并**举一个具体路径示例**（本 skill 只读本地文件，云端文件请让用户先自行下载到本地）。别让用户猜格式。\n- **产物交付必须清楚**：解读报告 / 合规报告 / 查重报告每次产出后，把**每个文件的完整绝对路径**（形如 `/Users/you/biaoshu-bailian-files/某项目_智能解读.html`）逐行告诉用户；成品标书默认交付**短时下载链接**（脚本会打印链接、文件名、大小、有效期），用户明确要本地文件时再用 `result <job_id> -o <路径>.docx` 下载并告知绝对路径。标书查重未请求报告时只总结 JSON 核心结论，不编造本地报告路径。\n- **凭证保护**：不得在回复中复述/输出 Api Key，也不得转发任何**携带 Key 的链接**（如平台 402 返回的 `?bind_key=` 充值/绑定链接——会经会话记录、截图、链接预览泄露）；涉及充值/账户操作只给不含参数的官网普通链接。\n\n## ⚠️ 权限与数据说明（首次使用前告知用户）\n\n- **文件外发**：用户提供的招标/投标文件会**上传至百炼®标书服务器**（`biaoshu.zhiliaobiaoxun.com`）处理。此类文件常含商业、报价与个人信息，上传前须确认用户知悉并同意。\n- **网络访问**：仅访问上述百炼®标书域名（API 调用），无其他外联；不抓取任何云端链接。\n- **本地读写**：读取用户指定的文件；产物（标书/报告）写入 `biaoshu-bailian-files/`；凭证存 skill 内 `config.json`（权限 600，logout 可删，保存后把文件位置告知用户）。\n- **数据留存**：上传的文件与产出结果以 Api Key 所属账户身份**留存在百炼®标书服务器**——任务结果与成品 .docx 约 7 天后过期，历史数据可登录官网查看管理。\n- **计费**：标书生成消耗 Api Key 所属账户的可用字数，提交前脚本会预检可用字数。\n- **环境变量**：仅读取上方 frontmatter 声明的 `ZCM_*` 可选配置项，不读取其他任何环境变量。\n- **不采集**：本 skill 不采集设备信息、不代注册账号、不收集手机号/验证码。\n\n## 进一步\n\n凭 **Api Key** 调用百炼®标书开放 API，完成投标全流程。所有任务走「**提交 → 自动轮询 → 取结果**」统一异步模型，以 Api Key 所属用户身份执行（复用其知识库与可用字数账户）。底层由零依赖 Python 客户端封装鉴权、轮询与友好错误码（具体命令见 [references/usage.md](references/usage.md)）。\n\n- **执行任务前先读** [references/usage.md](references/usage.md)：各步参数、命名规则、计费与凭证规则、报告/边界情形、断点续查、幂等、错误处理。\n- **输出铁律**（除非用户明确说不要）：运行脚本时进度照常显示、不重定向吞掉；解读/标书/合规结果文件的**绝对全路径**必须打印给用户。详见 usage.md 顶部「⚠️ 输出约定」。\n- **链接铁律**：凡向用户展示百炼®标书平台地址（注册、查看结果、充值、绑定等），一律**原样输出完整 URL**（如 https://biaoshu.zhiliaobiaoxun.com/?ch=c666 ），不要用「百炼®标书平台」「官网」这类超链接文字代替或省略。\n- **接口契约**（开放 API 端点、错误码、解读/合规/查重返回字段）→ 见 [references/api.md](references/api.md)。\n\nFile v1.0.16:_meta.json\n\n{\n  \"ownerId\": \"kn7dz1pzdygwz7z5fwfmrvhrnn84cs8q\",\n  \"slug\": \"biaoshu-writer-read\",\n  \"version\": \"1.0.16\",\n  \"publishedAt\": 1789545949417\n}\n\nFile v1.0.16:references/api-auth.md\n\n# 鉴权、任务与可用字数接口\n\n只在处理 Api Key、账户权益、任务轮询、结果下载、错误处理时读取本文件。\n\n## 鉴权\n\n- Base URL：`https://biaoshu.zhiliaobiaoxun.com/api/open/v1`\n- Header：`X-App-Key: <Api Key>`\n- 可选 Header：`Idempotency-Key: <UUID>`，同一个 key 24 小时内复用同一 `job_id`，避免重复提交。\n- 开放 API 受平台总开关控制；关闭时整层 404。\n\nApi Key 获取路径：打开 https://biaoshu.zhiliaobiaoxun.com/?ch=c666 → 用户本人按官网流程注册/登录 → 左侧菜单「Skill 接入 → 获取 Api Key」。\n\n## `GET /me`\n\n查询当前 Api Key 所属用户的权益与限制。\n\n```json\n{\n  \"available_words\": 1397084,\n  \"wallet_balance\": 1397084,\n  \"limits\": {\"rate_per_min\": 60, \"max_concurrent_jobs\": 3, \"running_jobs\": 0}\n}\n```\n\n- `available_words` 是当前可用字数。\n- `wallet_balance` 仅为兼容旧客户端，展示给用户时统一说“可用字数”。\n\n## `GET /word-entitlements`\n\n查询当前用户权益明细，返回会员周期字数、永久字数包、历史积分迁移字数、冻结字数等。历史积分迁移字数按“字数包”展示，永久有效。\n\n## 任务状态\n\n### `GET /jobs/{job_id}`\n\n返回任务状态、进度、错误信息。\n\n```json\n{\n  \"job_id\": \"...\",\n  \"service\": \"interpretation|bid_document|compliance|bid_duplicate\",\n  \"status\": \"queued|running|succeeded|failed|canceled\",\n  \"progress\": {\n    \"percent\": 47,\n    \"stage\": \"content\",\n    \"stage_label\": \"生成内容\",\n    \"message\": \"正在写正文 32/80 节\",\n    \"current_step\": 32,\n    \"total_steps\": 80,\n    \"current_step_label\": \"项目实施方案\",\n    \"elapsed_seconds\": 360,\n    \"estimated_remaining_seconds\": 120\n  },\n  \"error\": null\n}\n```\n\n长任务必须把 `percent/stage_label/message/current_step_label/elapsed_seconds` 转述给用户，避免看起来卡住。\n\n### `GET /jobs/{job_id}/result`\n\n- 智能解读、标书审查、标书查重返回 JSON。\n- 标书制作返回 `.docx` 二进制流。\n\n### `GET /jobs/{job_id}/download-url`\n\n仅标书制作任务成功后可用，返回短时下载链接。\n\n```json\n{\n  \"filename\": \"某项目投标文件.docx\",\n  \"download_url\": \"https://biaoshu.zhiliaobiaoxun.com/api/open/v1/jobs/job_xxx/download?token=短时token\",\n  \"expires_in\": 86400,\n  \"size_bytes\": 3980000\n}\n```\n\n短时 token 绑定 `job_id/user_id/export_id/过期时间`，不包含 Api Key。用户看到的就是 `filename/download_url/expires_in/size_bytes`；标书半成品还会返回 `partial/continue_available/outline_id/completion`。\n\n## 计费与 402\n\n- 智能解读免费，可用字数为 0 也能发起。\n- 标书制作、标书审查、标书查重按平台规则消耗可用字数。\n- 标书审查、标书查重提交前可用字数不足返回 402 `insufficient_balance`。\n- 标书生成会按页数做提交前预估，默认 `500` 字/页，再乘以安全系数；预估仅供参考，实际消耗以平台最终结算为准；生成前不根据余额做字数不足示警，不阻止提交。\n- 生成中如果字数用尽，任务会停止继续写正文；如果平台已导出半成品，先交付半成品下载链接，并提示购买会员或字数包后用 `continue-generate` 继续生成正文。\n- 不要把平台返回的 `recharge_url` / `bind_url` 原样转发给用户，因为可能包含 `bind_key`。只给官网普通地址：`https://biaoshu.zhiliaobiaoxun.com/recharge?ch=c666`。\n\nFile v1.0.16:references/api-bid-workflow.md\n\n# 智能解读与标书制作 API\n\n用于“解读招标文件 → 抽包 → 选页数 → 生成成品标书”的完整流程。智能解读和标书制作强相关，放在同一分册。\n\n## 流程\n\n1. `POST /interpretations` 上传招标文件，得到解读任务。\n2. `GET /jobs/{job_id}` 轮询解读进度。\n3. `GET /jobs/{job_id}/result` 获取 `project_id` 和 8 维度解读结果。\n4. `POST /bid-documents/{project_id}/packages` 抽取分包。\n5. 展示分包、系统建议页数、最大页数、预计消耗字数、当前可用字数，让用户确认。\n6. `POST /bid-documents/{project_id}/generate` 生成成品标书。\n7. `GET /jobs/{job_id}/download-url` 获取短时下载链接。\n\n## `POST /interpretations`\n\n- 入参：multipart `file` 或 JSON `{\"file_url\":\"https://...\"}`。\n- 文件：招标文件 `.pdf/.doc/.docx`，≤ 50 MB。\n- 返回：`{\"job_id\":\"...\"}`\n- 计费：智能解读免费，可用字数为 0 也能发起；生成前按页数做消耗预估，预估仅供参考，实际消耗以平台最终结算为准。\n\n结果中的 `result.project_id` 是后续抽包、生成、标书审查的统一项目句柄。\n\n核心字段：\n\n- `project_info[]`：项目基本信息。\n- `compliance[]`：合标/资格要求。\n- `disqualification[]`：废标红线。\n- `evaluation[]`：评分标准。\n- `key_requirements[]`：关键要求。\n- `business_terms[]`：商务条款。\n- `pricing[]`：报价要求。\n- `procurement_analysis{}`：采购背景。\n- `decision_analysis{}`：控标洞察、参与建议、风险信号、行动建议。\n\n## `POST /bid-documents/{project_id}/packages`\n\n- 无 body。\n- 返回分包列表和页数建议。\n- 抽包是标书制作的准备动作，不作为独立成果单独计费。\n\n典型结果：\n\n```json\n{\n  \"service\": \"bid_document\",\n  \"result\": {\n    \"packages\": [],\n    \"is_multi_package\": false,\n    \"package_count\": 1,\n    \"suggested_pages\": 200,\n    \"max_total_pages\": 1200,\n    \"estimated_words_per_page\": 500,\n    \"estimate_reserve_factor\": 1.05,\n    \"suggested_estimated_words\": 105000,\n    \"estimate_note\": \"按目标页数约 500 字/页估算，预计消耗仅供参考，实际消耗以平台最终结算为准\"\n  }\n}\n```\n\n规则：\n\n- `is_multi_package=true`：必须展示 `packages` 给用户选择，收集 `package_ids`。\n- `is_multi_package=false`：不问包，直接进入页数确认，生成时传 `--no-package`。\n- 用户未确认页数前不得提交生成任务；用户输入页数不能超过 `max_total_pages`。\n- 使用系统建议页数时，也必须把抽包结果里的 `suggested_pages` 明确带入 Skill 生成命令，不能默认按固定页数处理。\n\n## `POST /bid-documents/{project_id}/generate`\n\n入参：\n\n```json\n{\"package_ids\":[11,12],\"total_pages\":80}\n```\n\n非多包项目可省略 `package_ids`。`total_pages` 最高 1200。\n\n计费与拦截：\n\n- 标书制作按实际生成内容消耗可用字数。\n- Open API / Skill 提交前按 `total_pages * 500 * 1.05` 预估所需字数；预估仅供页数确认参考，实际消耗以平台最终结算为准；生成前不做余额不足示警。\n- Skill 调用 `generate` 时需把抽包结果里的 `max_total_pages` 作为动态上限；超过则本地拒绝，不提交 Open API。\n- 生成前只展示预计消耗，不根据余额做字数不足示警，也不阻止创建长任务；生成中如果真实消耗超过剩余可用字数，再按平台规则停止并返回不足提示。\n- 生成中如果真实消耗超过剩余可用字数，任务会停止继续写正文，错误码可能是 `insufficient_balance` / `insufficient_points`。如果后端已经成功导出半成品，skill 应先交付半成品下载链接；充值或购买字数包后，用 `continue-generate` 基于同一 `outline_id` 继续生成正文，不要重新解读、抽包或重建大纲。\n\n进度阶段：\n\n- `select`：选包。\n- `requirements`：抽需求。\n- `outline`：生成大纲。\n- `content`：生成正文。\n- `templates`：抽取制式模板并识别待填项。\n- `export`：导出 Word。\n\n进度字段：\n\n- `/jobs/{job_id}` 应持续返回 `progress.percent`、`progress.stage` / `stage_label`、`progress.message`、`progress.current_step`、`progress.total_steps`、`progress.current_step_label`、`progress.elapsed_seconds`，可选返回 `estimated_remaining_seconds`。\n- 如果后端没有写入上述字段，skill 只能展示排队/运行心跳，不能生成章节级进度。\n\n完成前完整性校验：\n\n- 后端在标记 `succeeded` 前应校验计划章节数、已生成章节数、空章节、模板占位符、待填项和导出 docx 结构。\n- 发现缺章节或结构异常时，不应标记成功；应自动补写，或把任务置为 `failed` 并返回明确错误码/原因供 skill 转述。\n\n生成成功后先取 `download-url` 给用户短时链接；用户明确要本地文件时，再用 `result -o` 下载本地文件。若 `download-url` 返回 `partial=true`，必须说明这是半成品、展示 `completion.generated/total/missing`，并提示补足可用字数后执行 `continue-generate <project_id> --outline-id <outline_id> --no-wait`。下载链接有效期以后端返回 `expires_in` 为准；如需统一为 1 天，后端签发 token 的 TTL 应为 `86400` 秒，skill 只展示该值。\n\n耗时对齐：\n\n- Open API / skill 链路应与网页端使用同一套生成 worker、模型、并发、缓存与模板填充策略。\n- 若耗时明显慢于网页端，排查时记录 `job_id`、页数、包号、提交/完成时间和各阶段进度，先定位是否走了降级慢链路。\n\nFile v1.0.16:references/api-compliance.md\n\n# 标书审查 API\n\n用于发起标书合规审查。标书审查不是免费能力，按平台规则消耗可用字数。\n\n## `POST /projects/{project_id}/compliance-reviews`\n\n前置：`project_id` 来自智能解读结果。招标文件必须先解读，审查复用同一个 project，不重复上传招标文件。\n\n入参：\n\n- multipart `bid_files`：一份或多份投标文件。\n- 或 JSON `{\"file_urls\":[...],\"is_blind_bid\":false,\"is_electronic_bid\":false}`。\n\n文件限制：\n\n- 投标文件支持 `.doc/.docx/.pdf`。\n- 最多 100 份。\n- 单份 ≤ 1024 MB。\n- 总大小 ≤ 2 GB。\n\n选项：\n\n- `is_blind_bid`：暗标。\n- `is_electronic_bid`：电子投标。\n- `sibling_unit_names`：敏感单位名称。\n- `semantic_review=false` 或 `enable_semantic_review=false`：关闭语义审查，仅保留规则类检查。\n\n返回：`{\"job_id\":\"...\"}`\n\n计费：\n\n- 发起前校验可用字数。\n- 审查完成后按平台规则消耗可用字数；具体消耗以平台流水为准。\n- 可用字数不足返回 402 `insufficient_balance`。\n\n## 结果字段\n\n`GET /jobs/{job_id}/result` 返回：\n\n```json\n{\n  \"service\": \"compliance\",\n  \"result\": {\n    \"compliance\": {\n      \"run_id\": 42,\n      \"status\": \"completed\",\n      \"summary\": {},\n      \"partial_summary\": {},\n      \"bid_files\": [],\n      \"issues\": [],\n      \"similarity_issues\": [],\n      \"manual_items\": [],\n      \"scope_summary_lines\": [],\n      \"error_message\": null\n    }\n  }\n}\n```\n\n重点字段：\n\n- `summary`：高风险/待复核/提示数量、一句话结论、语义审查状态。\n- `partial_summary`：部分结果或阶段性结果提示。\n- `issues[]`：合规问题，含风险等级、招标依据、投标证据、修改建议。\n- `similarity_issues[]`：多份投标文件之间的雷同线索。\n- `manual_items[]`：人工核查清单。\n- `scope_summary_lines[]`：检查范围。\n\n如果 `semantic_review` 或 `partial_summary` 表示语义审查未完整完成，必须如实说“当前为部分结果/语义审查未完整完成”，不能说成完整审查。\n\n## 常见错误\n\n- 409 `report_task_conflict`：同一用户已有合规/查重类任务运行中，等完成后再发起。\n- 422 `validation_error`：投标文件缺失、类型不支持、数量或选项不合法。\n- 413：文件超出单份或总大小限制。\n- 402：可用字数不足，提示购买会员或字数包后重试。\n\nFile v1.0.16:references/api-duplicate.md\n\n# 标书查重 API\n\n用于比较 2-3 份不同投标文件之间的雷同/相似风险。标书查重不是免费能力，按平台规则消耗可用字数。\n\n## 发起前流程\n\n1. 先收齐 2-3 份投标文件。\n2. 招标文件可选，只能作为 `tender_file` 公共表述基线，不能算作投标文件。\n3. 发起前必须确认用户合法持有并有权处理全部投标文件/招标文件。\n\n## `POST /bid-duplicate/runs`\n\n入参：\n\n- multipart `bid_files`：2-3 份投标文件。\n- multipart `tender_file`：可选 1 份招标文件。\n- 或 JSON / 表单 URL 字段：`bid_file_urls`、`tender_file_url`。\n- 必填：`legal_possession_attested=true`。\n\n文件限制：\n\n- 投标文件支持 `.doc/.docx/.pdf`，必须 2-3 份。\n- 投标文件单份 ≤ 1024 MB。\n- 招标文件可选 1 份，≤ 50 MB。\n- 总大小 ≤ 2 GB。\n- 不支持扫描型 PDF。\n\n选项：\n\n- `enable_image`：图片相似检查，默认 true。\n- `enable_metadata`：文档元数据检查，默认 true。\n- `enable_semantic`：语义相似检查，默认 true。\n- `exclude_tender_baseline`：排除招标原文共同表述，默认 true。\n\n返回：`{\"job_id\":\"...\"}`\n\n计费：\n\n- 发起前校验可用字数。\n- 查重完成后按平台规则消耗可用字数；具体消耗以平台流水为准。\n- 可用字数不足返回 402 `insufficient_balance`。\n\n## 结果字段\n\n`GET /jobs/{job_id}/result` 返回：\n\n```json\n{\n  \"service\": \"bid_duplicate\",\n  \"result\": {\n    \"run_id\": 123,\n    \"duplicate\": {}\n  }\n}\n```\n\n`duplicate` 按文件对展示：\n\n- 文本相似。\n- 图片相似。\n- 文档元数据。\n- 主体线索。\n- 招标原文共同表述。\n- 风险率、证据片段和修改建议。\n\n查重只输出风险线索，不输出“已串标/确认围标”等定性结论，也不提供规避监管的一键降重建议。\n\n## 常见错误\n\n- 422 `validation_error`：投标文件不足 2 份、超过 3 份、未确认合法持有、文件类型或大小不合法。\n- 409 `report_task_conflict`：同一用户已有合规/查重类任务运行中。\n- 402 `insufficient_balance`：可用字数不足，提示购买会员或字数包后重试。\n- 500/任务失败 `bid_duplicate_failed`：优先转述 `duplicate_error_message`；错误详情会带 `run_id`、`duplicate_status`，用于后台定位。\n\nFile v1.0.16:references/api.md\n\n# 百炼®标书开放 API 总调度\n\n> **契约兼容标注（skill biaoshu-bailian 3.1.2）**\n> - 适配后端 API：`/api/open/v1`\n> - 契约核对日期：2026-09-07\n> - 本文件只做场景分发。执行具体任务时只读取对应分册，避免一次性加载全部接口细节。\n\n## 先读哪个文件\n\n| 当前任务 | 读取文件 |\n|---|---|\n| Api Key、鉴权、可用字数、限流、任务状态、结果下载、402 处理 | [api-auth.md](api-auth.md) |\n| 智能解读、抽包、页数确认、生成成品标书、生成进度、成品短时下载链接 | [api-bid-workflow.md](api-bid-workflow.md) |\n| 标书审查、暗标/电子标/敏感单位/语义审查、多文件合规报告 | [api-compliance.md](api-compliance.md) |\n| 标书查重、2-3 份投标文件相似/雷同风险、可选招标文件基线 | [api-duplicate.md](api-duplicate.md) |\n| 企业资料库查询、待填项本地回填字段解释 | [knowledge-fields.md](knowledge-fields.md) |\n\n## 全局约定\n\n- **Base URL**：`https://biaoshu.zhiliaobiaoxun.com/api/open/v1`\n- **鉴权**：所有受保护接口都带 `X-App-Key: <Api Key>`。\n- **任务模型**：提交接口返回 `job_id`；用 `GET /jobs/{job_id}` 轮询；用 `GET /jobs/{job_id}/result` 或 `download-url` 获取结果。\n- **计费口径**：智能解读免费，可用字数为 0 也能发起；标书制作、标书审查、标书查重按平台规则消耗可用字数。标书生成的页数预估仅供参考，实际消耗以平台最终结算为准；生成前不做余额不足示警，也不做余额拦截。抽包、任务查询、结果获取、知识库查询等辅助查询不作为独立成果单独计费。\n- **文件留存**：上传文件与任务结果以 Api Key 所属账户身份留存在百炼®标书服务器；任务结果与成品约 7 天后过期。\n- **安全边界**：不要向用户展示或转发任何携带 Api Key / `bind_key` 的链接。\n\n## 常见错误码\n\n| HTTP | code | 处理 |\n|---|---|---|\n| 401 | `missing_credentials` / `invalid_credentials` | 检查或重置 Api Key |\n| 402 | `insufficient_balance` / `insufficient_points` | 可用字数不足，提示购买会员或字数包后重试 |\n| 404 | `not_found` / `job_not_found` / `project_not_found` / `result_expired` | 检查开放 API 开关、句柄归属或结果是否过期 |\n| 409 | `invalid_job_state` / `report_task_conflict` | 等前置任务完成，或等待已有审查/查重任务结束 |\n| 422 | `validation_error` | 检查文件数量、类型、大小、必填参数 |\n| 413 | `bid_file_too_large` / `tender_file_too_large` / `batch_too_large` | 文件超限，压缩或拆分后重试 |\n| 429 | `rate_limited` / `too_many_concurrent_jobs` | 退避重试或降低并发 |\n| 500 | `internal_error` | 稍后重试或反馈平台 |\n\nFile v1.0.16:references/knowledge-fields.md\n\n# 知识库字段说明\n\n本文件供助手在**本地待填项回填**时查阅。推荐流程：\n1. 先用 `python3 scripts/zcm.py knowledge-base` 查看可用分类；\n2. 再按需查询某一类，例如 `python3 scripts/zcm.py knowledge-base qualifications`；\n3. 本地模型根据下列字段含义匹配待填项；\n4. **没有把握的字段宁可保留待填项，不要臆造。**\n\n> 开放范围仅含：`company_profile`、`qualifications`、`performances`、`financial_reports`。\n> 明确不含：历史标书库、标书模板库。\n> 明确不返回：任何附件地址、文件流、base64、附件布尔标记。\n\n## 一、company_profile（企业信息）\n\n| field_key | 字段名 | 说明 | 是否可直接回填 |\n|---|---|---|---|\n| `company_name` | 公司名称 | 企业全称/投标人名称 | 是 |\n| `enterprise_type` | 企业类型 | 单位性质/企业性质 | 是 |\n| `business_term` | 营业期限 | 营业执照中的经营期限 | 是 |\n| `credit_code` | 统一社会信用编码 | 企业统一社会信用代码 | 是 |\n| `registered_address` | 注册地址 | 营业执照注册地址 | 是 |\n| `office_address` | 办公地址 | 企业办公/联系地址 | 是 |\n| `legal_representative` | 法人名称 | 法定代表人姓名 | 是 |\n| `legal_rep_position` | 职务 | 法定代表人职务 | 是 |\n| `legal_rep_phone` | 法人联系方式 | 法定代表人联系电话 | 仅模板明确要求时回填 |\n\n## 二、qualifications（企业资质）\n\n| field_key | 字段名 | 说明 | 是否可直接回填 |\n|---|---|---|---|\n| `qualification_name` | 资质名称 | 资质/证书名称 | 是 |\n| `certificate_number` | 证书编号 | 资质证书编号 | 是 |\n| `valid_period` | 有效期限 | 统一按“起始日期 至 截止日期/长期”返回 | 是 |\n\n> 资质是**多条记录**。回填前先判断模板要的是哪类资质，再选对应记录，不要默认取第一条。\n\n## 三、performances（企业业绩）\n\n| field_key | 字段名 | 说明 | 是否可直接回填 |\n|---|---|---|---|\n| `contract_name` | 合同名称 | 业绩对应的合同或项目名称 | 是 |\n| `client_name` | 客户名称 | 甲方/客户名称 | 是 |\n| `contract_amount` | 合同金额 | 合同金额原值 | 是 |\n| `completion_date` | 完成时间 | 竣工/验收/完成日期 | 是 |\n\n> 业绩同样是**多条记录**。需要按项目名称、客户、金额或时间要求筛选最匹配的一条或几条，不能把多条业绩混成一条。\n\n## 四、financial_reports（财务报告）\n\n当前仅开放**分类入口**，暂不开放具体字段。\n\n这意味着：\n- 可以知道当前租户存在该类资料；\n- 不能通过本接口取出财务报告的正文、附件或明细字段；\n- 本地模型不要自行假设或补写财务数据。\n\n## 使用边界\n\n- 没值：保留待填项，不要自行生成。\n- 多条记录：资质、业绩都要先选记录，再回填字段。\n- 附件资料：本接口不返回任何附件相关信息，不能据此推断附件内容。\n- 租户隔离：只能查询当前 Api Key 所属租户的数据，不能跨租户取数。\n\nFile v1.0.16:references/usage.md\n\n# 执行细节（操作手册）\n\n本文件是**执行任务时的完整操作指引**——做解读/制作/合规、生成报告、处理边界情形时按需查阅。接口总调度见 [api.md](api.md)，具体字段按场景读对应 API 分册。\n\n> ⚠️ **数据外发与知情同意**：解读/制作/合规/查重都会把用户提供的文件**上传至百炼®标书云端**（`biaoshu.zhiliaobiaoxun.com`）处理，此类文件常含商业、报价与个人信息；**上传文件与结果会以账户身份留存在百炼®标书服务器**（结果/成品约 7 天过期，可登录官网查看管理）。**首次上传前必须确认用户知悉并同意**（完整披露见 SKILL.md「⚠️ 权限与数据说明」）。\n\n## ⚠️ 输出约定（必须遵守，除非用户明确说不要）\n\n运行 `zcm.py` 时**老老实实把脚本输出原样给用户看**，不得为了「省事/抽字段」把它藏起来：\n\n1. **生成任务必须实时播报**：生成成品标书耗时长，禁止直接前台等待。必须先用 `generate ... --no-wait` 拿到 `job_id`，再立即启动 `progress-stream <job_id>`，把每次变化转述给用户（如「进度更新：标书正在生成中。已进入「生成正文」阶段（47%，32/80 节）。当前正在写「项目实施方案」。已用 6分钟。我会继续后台监听，完成后交付成品链接。」）。即使平台暂时没有返回百分比/章节，也要转述脚本每 5 秒输出的心跳句（如「进度更新：任务已开始运行，正在等待平台返回生成阶段进度。我会继续后台监听。」），让用户知道任务仍在跑。看到 `进度更新：`、`[完成]`、`[失败]` 这类行时直接转述或轻微润色，不要改写成“等待后台完成通知”。解读/抽包/合规/查重也要照常展示百分比+阶段。**不要 `2>` 重定向、不要吞掉**。\n2. **完整交付产物位置**：每次产出后，必须把以下信息明确告知用户：\n   - 智能解读结果/报告（`*_智能解读.html` 等）\n   - 成品标书默认给短时下载链接（含文件名、大小、有效期）；用户明确要本地文件时再下载为 `*_投标文件.docx`\n   - 合规审查结果/报告（`*_合规审查.html` 等）\n\n   脚本本身已打印这些信息（`generate` 默认打印下载链接；`result -o` 成功后打印本地全路径）；**别用 `>`/`2>` 把它们重定向掉**。若用 `--no-wait`，完成后须主动用 `download-url <job_id>` 补取成品链接，或在用户要求本地文件时用 `result <job_id> -o <路径>.docx` 下载。\n\n   此外，解读/生成/合规/查重完成后脚本会打印一行 `💰 当前可用字数：X`——**照常转述给用户**，让其对可用字数与「够不够下一次」有数；查询失败时不打印，属正常，不必追问。\n\n> 反例（禁止）：`python3 scripts/zcm.py generate <pid> > out.json 2> log` —— 这会同时藏掉进度和成品全路径。\n\n3. **凭证/字数类提示不要把命令与 exit 码原样抛给用户**：缺 Key（exit 2）、可用字数不足（402）这类脚本输出是给你（助手）看的提示。你应当把它翻译成一句「用户下一步该做什么」（去官网拿 Key、按指引把 Key 写入 skill 目录下的 `config.json`、或打开官网购买会员/字数包）——不要让用户自己敲命令，也不要索取或代存用户的 Key。\n4. **本手册里的一切命令永不面向用户**（SKILL.md 第一铁律）：命令只在后台执行；向用户介绍功能或举例时，用 SKILL.md 各功能「使用示例」的场景话术（用户怎么说 → 得到什么），不要把本文件的命令、参数、代码块贴进回复。\n\n## 用法速查（完整流程）\n\n```bash\n# 1. 配凭证：用户在 skill 目录下自建 config.json 写 {\"app_key\":\"bk_live_xxx\"}（Key 不进对话）\npython3 scripts/zcm.py me                            #    连通 + 可用字数自检\npython3 scripts/zcm.py interpret 招标文件.pdf --report html   # 2. 解读 → project_id（+解读报告）\npython3 scripts/zcm.py packages <project_id>         # 3. 抽包（多包才需选包）\npython3 scripts/zcm.py generate <project_id> --package-ids 11 --total-pages 80 --no-wait  # 4. 用户确认包和页数后生成\npython3 scripts/zcm.py compliance <project_id> 投标文件.docx --report html --name 招标文件.pdf   # 5. 可选：标书审查\npython3 scripts/zcm.py duplicate 投标A.docx 投标B.docx --tender-file 招标文件.pdf --legal-possession-attested --report html  # 6. 可选：标书查重（+查重报告）\n```\n招标文件支持 `.pdf/.doc/.docx`；标书审查和标书查重的投标文件支持 `.pdf/.doc/.docx`。全部自动轮询、实时播报后端进度。各步详解见下。\n\n## 明确制作意图：自动全流程\n\n用户上传/提供招标文件后，如果明确要求制作标书或投标文件（如「帮我做标书」「生成投标文件」「出一份响应文件」「直接做成标书」），视为已授权自动制作。无分包/单包时自动继续：interpret → packages → generate --no-wait → progress-stream → download-url；多包项目必须停下来让用户确认具体包，不默认全选。\n\n- 分包：先照常执行 `packages`。`is_multi_package=false` 时生成传 `--no-package`；`is_multi_package=true` 时展示分包清单并暂停，让用户确认选哪些包后再生成；用户已在原始需求里指定包号/包名时按指定包执行。\n- 页数：平台当前最大页数上限为 1200 页；用户已指定页数时按指定值执行，并用 `max_total_pages` 校验，超限必须拒绝；未指定页数时默认 200 页，默认生成200页的标书，并且生成命令带 `--total-pages 200` 与 `--max-total-pages`。对用户要明确说明：默认按 200 页生成，也可以指定 1 到 max_total_pages 范围内的页数。如果 `max_total_pages < 200`，不要提交 200 页；改为提示上限并让用户确认，或在用户明确允许自动按上限时使用 `--total-pages <max_total_pages>`。\n- 例外：用户明确说「包和页数先列出来让我确认」「开始前先问我」「不要直接生成」时，按常规确认流程暂停。\n- 进度：提交生成后立刻进入 `progress-stream`，持续转述阶段、百分比、当前章节、已用时间；即使只有心跳也要播报。完成后主动 `download-url` 取成品短时链接，用户要求本地文件时再下载。\n\n## 目录\n- [第 1 步：凭证](#第-1-步凭证)\n- [第 2 步：智能解读](#第-2-步智能解读)\n- [明确制作意图：自动全流程](#明确制作意图自动全流程)\n- [第 3 步：抽取分包](#第-3-步抽取分包)\n- [第 4 步：生成成品标书](#第-4-步生成成品标书)\n- [第 5 步：标书审查](#第-5-步标书审查)\n- [第 6 步：标书查重](#第-6-步标书查重)\n- [报告生成与命名](#报告生成与命名)\n- [关键约定](#关键约定)\n\n---\n\n## 第 1 步：凭证\n\n凭证默认存在 **当前 skill 根目录的 `config.json`**（权限 600，含真实 Key——**绝不上传发布包/提交仓库**，发布包不含配置文件）。Api Key 只从 **当前 `biaoshu-bailian/SKILL.md` 同级的 config.json** 读取（路径固定，不经环境变量、无旧目录回退、不可重定向）。\n\n**升级保留配置**：升级 skill 时，必须保留当前安装目录里的 `config.json` 和 `biaoshu-bailian-files/`；只覆盖 `SKILL.md`、`scripts/`、`references/` 等内容文件。不要用会清空整个目录的安装方式直接覆盖当前目录；如安装器只能强制覆盖，先装到临时目录，再同步内容文件到原目录并排除 `config.json`。\n\n**只需 Api Key 一项**，由用户**自行到官网获取**（本 skill 不代注册、不收集手机号/验证码）。获取全路径（转述时逐步骤完整给出，链接原样显示完整 URL）：\n打开官网 https://biaoshu.zhiliaobiaoxun.com/?ch=c666 → 用户本人按官网流程注册并登录（注册可领赠送字数）→ 点**左侧菜单『Skill 接入 → 获取 Api Key』**，在弹出面板中查看/复制 Api Key（首次打开自动生成，形如 `bk_live_xxxxx`，重置后旧 Key 立即失效）。\n\n**配置方式（唯一引导方式：用户本人写入本地凭证文件，Key 不进对话）**：\n指导用户先定位当前安装的 `biaoshu-bailian/SKILL.md` 所在目录，在同级目录创建 `config.json`，写入一行 `{\"app_key\": \"bk_live_xxxxx\"}`（把 Key 换成自己的）。**不要索取、让用户粘贴或在回复中复述 Key**（会话记录、截图、链接预览都可能泄露凭证）。可选字段仅保留 `output_dir` 成品存放目录；开放 API 地址固定为官方生产环境，不接受本地覆盖。配好后先跑 `me` 自检连通与可用字数。\n\n- 缺凭证时脚本会打印官网获取指引并退出（码 2），把指引转述给用户即可。\n- 先 `python3 scripts/zcm.py me` 确认连通与可用字数（生成会消耗可用字数）。\n\n### 可用字数不足（402，给用户自助链接，skill 不代办）\n\n可用字数不足时脚本会打印引导，照原样转达给用户，由用户**自行登录官网购买会员或字数包**后回到对话继续，Api Key 全程不变：入口 `https://biaoshu.zhiliaobiaoxun.com/recharge?ch=c666`（用本人账号登录后操作）。\n\n- 🔒 **凭证保护（强制）**：平台 402 错误体里的 `recharge_url` / `bind_url` **携带明文 `bind_key`（即用户的 Api Key）**——**一律不得把这类带 Key 的链接转发进对话**（会话记录、截图、链接预览都可能泄露 Key，他人拿到即可操作该账户）。只给上面这条不含任何参数的普通入口链接。\n- ⛔ **禁止**：已有 Key 的用户，别引导他去官网「另注册新账号 / 另生成新 Key 再切换」——可用字数会留在孤立新账号上、还得换 Key。\n\n## 第 2 步：智能解读\n\n唯一招标文件入口；只在这步传一次，后续全程复用 `project_id`。\n\n```bash\npython3 scripts/zcm.py interpret /path/招标文件.pdf      # 仅本地路径\n```\n- 支持 `.pdf/.doc/.docx`，**≤ 50 MB**（超限脚本提前报错）。自动轮询，结束打印 `project_id`（**记下它**）+ **解读摘要**，默认不再向 WorkBuddy 打印完整 JSON，以免大结果拖慢展示；完整明细通过解读报告交付。\n- **不支持云端链接**：传入 http(s) 链接会被脚本直接拒绝（本 skill 不做任何远程抓取）。用户给的是链接时，请他先自行下载到本地，再提供本地路径。\n- **直接把解读摘要展示给用户**——至少包含项目名称、`project_id`、控标建议/风险、合标项/废标红线/评分项等结构化条目数量，并交付 HTML 解读报告全路径；不要默认打印完整 `/result` JSON。只有后台排查或用户明确要原始 JSON 时，才加 `--full-json` 打印完整结果。字段口径见 [api-bid-workflow.md](api-bid-workflow.md)。\n- 展示后**主动问是否生成解读报告**（见[报告生成与命名](#报告生成与命名)）。但用户已经明确要求制作标书或投标文件时，不在这里停顿，仍要自动生成 HTML 解读报告并继续抽包、生成成品标书。\n\n## 第 3 步：抽取分包\n\n```bash\npython3 scripts/zcm.py packages <project_id>\n```\n- `is_multi_package=true` → 把返回的 `packages` 呈现给用户挑选，收集选中的 `package_ids`；即使用户已明确要求制作标书或投标文件，只要没有在原始需求里指定包，多包项目必须停下来让用户确认，不能默认全选。\n- `is_multi_package=false` → 常规流程不询问包选择，直接进入页数确认；第 4 步自动传 `--no-package`。自动全流程下直接传 `--no-package` 继续生成。\n- `max_total_pages` 是当前项目最大页数；平台当前最大页数上限为 1200 页。用户想指定页数时，以抽包结果里的上限为准，超过必须拒绝，不要提交生成；向用户提示可指定范围时使用“1 到 max_total_pages 页”。\n- 页数确认时展示：系统建议页数、最大页数、预计消耗字数、当前可用字数。优先使用抽包结果里的 `suggested_estimated_words`；用户改页数时按 `total_pages * estimated_words_per_page * estimate_reserve_factor` 重新估算，并说明“预计消耗仅供参考，实际消耗以平台最终结算为准”。\n- **确认门槛（有例外）**：常规解读后，如果用户尚未明确制作意图，抽包后必须暂停到页数确认；多包项目还必须先确认选哪些包。用户确认“生成多少页/使用系统建议页数”之前，不得进入第 4 步。但用户在上传/提供招标文件后已明确要求制作标书或投标文件时，无分包/单包时自动继续；多包项目必须停下来让用户确认具体包。未指定页数时默认 200 页，并校验 `max_total_pages`；同时告诉用户也可以指定 1 到 max_total_pages 范围内的页数。\n\n## 第 4 步：生成成品标书\n\n**生成成品标书按生成内容消耗可用字数**，耗时较长。默认不下载本地文件，完成后输出短时下载链接：\n- 用户只要成品 → 不传 `-o`，脚本完成后打印文件名、大小、下载链接和有效期。\n- 用户明确要本地文件 → `-o <路径>`；想长期固定本地输出目录 → `login --output-dir <目录>`。\n\n```bash\npython3 scripts/zcm.py generate <project_id> --package-ids 11,12 --total-pages 80 --max-total-pages 1200\n# 非多包且用户未指定页数：python3 scripts/zcm.py generate <project_id> --no-package --total-pages 200 --max-total-pages 1200\n# WorkBuddy/ClawHub 必须追加 --no-wait，并另起 progress-stream 实时播报\n# 需要本地文件时：完成后再 result <job_id> -o 投标文件.docx\n```\n- 生成前脚本会强制校验：多包必须传用户已确认或已明确指定的 `--package-ids`，无分包/单项目自动传 `--no-package`；必须已确认页数或按明确制作意图使用默认 200 页（`--total-pages`）；必须带入抽包结果的 `--max-total-pages`；并且默认必须用 `--no-wait` 进入实时进度模式。\n- 生成前脚本会按确认页数预估本次需要字数；用户页数超过 `max_total_pages` 会直接拒绝；不根据余额做字数不足示警，直接继续提交 Open API 生成任务。预估公式是 `total_pages * estimated_words_per_page * estimate_reserve_factor`，当前平台默认等价于 `页数 * 500 * 1.05`；预计消耗仅供参考，实际消耗以平台最终结算为准。\n- 完成后默认打印**成品下载链接**；如用户明确要求本地文件，完成后再下载并打印**成品完整路径**+所在目录，**两项都告诉用户**。\n- 成品下载链接有效期只以后端 `download-url` 返回的 `expires_in` 为准；skill 只能展示该值，不能单方面延长。若链接失效，用同一 `job_id` 重新获取下载链接；若要把“半小时/1 小时”统一改为 1 天，需要后端签发 token 的 TTL 改为 `86400` 秒。\n- 后端会按「选包 → 抽需求 → 生成大纲 → 生成正文 → 抽取制式模板 → 导出」串行完成；页数规划会综合分包结构、技术/商务内容、表格和图表，`total_pages` 最高 1200。\n- 制式表格/范本会尽量自动抽取或生成；无法确认的公司资料、日期、报价、签章等信息会保留为待填项，不要替用户编造。\n- **跟用户解释字数计费时统一说**：智能解读免费，可用字数为 0 也能发起；标书制作、标书审查、标书查重按平台规则消耗可用字数。标书生成的预计消耗仅供参考，实际消耗以平台最终结算为准；生成前只做预估，不做字数不足示警，也不会因预估字数不足而拦截提交。抽包、任务查询、结果获取、知识库查询等辅助查询不作为独立成果单独计费。\n- **生成中可用字数不足**：平台会停止继续写正文并可能返回 `insufficient_balance` / `insufficient_points`。skill 必须明确告诉用户“本次任务已停止，平台不会自动续跑”；如果 `download-url` 返回 `partial=true`，先交付半成品下载链接，展示已生成/总章节/缺失章节，并提示购买会员或字数包后用 `continue-generate <project_id> --outline-id <outline_id> --no-wait` 继续生成正文。不要重新解读、抽包或重建大纲。\n- ⏱ **生成可能耗时 >10 分钟**（实测 30 页约 15 分钟）。固定流程：`generate <pid> ... --no-wait` 拿 `job_id` → `progress-stream <job_id>` 实时转述阶段/百分比/当前章节/已用时间 → 完成后 `download-url <job_id>` 取短时下载链接；用户明确要本地文件时再用 `result <job_id> -o <路径>.docx` 下载。万一监听中断，用同一 `job_id` 续查即可；半成品补写用 `continue-generate`，不要重发 generate。\n- **默认页数口径**：常规流程继续展示系统建议页数、最大页数和预计消耗，让用户确认。自动制作流程下，用户明确要求制作标书或投标文件即视为同意默认生成200页的标书；未指定页数时默认 200 页，命令使用 `--total-pages 200` 和 `--max-total-pages`，不使用 `suggested_pages` 作为默认页数。提示用户时必须同时说明“也可以指定 1 到 max_total_pages 范围内的页数”。如果实际环境仍出现“单包项目明确要制作却停在页数确认”，优先检查用户安装的 WorkBuddy/Skill 是否不是 3.1.2+，或 WorkBuddy 是否没有按本手册执行。\n- **进度细节来源**：`progress-stream` 只转述 `/jobs/{job_id}` 返回的 `progress.percent/stage/message/current_step/total_steps/current_step_label/elapsed_seconds/estimated_remaining_seconds`。后端不写这些字段时，skill 只能输出运行心跳，不能编造章节级进度。\n- **内容完整性边界**：skill 不负责复刻生成算法，也不能只靠文案保证“内容完整”。后端应在标记 `succeeded` 前校验计划章节数、已生成章节数、空章节、模板占位符、待填项和导出 docx 结构；发现缺章节或结构异常时应自动补写，或把任务置为 failed 并返回明确原因，skill 再如实转述。\n- **耗时排查口径**：如果 Open API / skill 生成明显慢于网页登录流程，先记录 `job_id`、页数、包号、提交/完成时间、进度阶段，再排查后端是否使用同一套生成 worker、模型、并发、缓存与模板填充策略；skill 侧不要靠重试或降级流程掩盖慢链路。\n\n## 第 5 步：标书审查\n\n要**两样输入，都要让用户提供**：\n1. **招标文件**（`.pdf/.doc/.docx`）→ 经第 2 步解读产出 `project_id`；已解读则复用，不重传。\n2. **投标文件**：**一份或多份** `.pdf/.doc/.docx`，被审查对象（仅本地路径），**支持多选，最多 100 份**；**每份 ≤ 1024 MB**，**总大小不超过 2GB**。\n\n```bash\npython3 scripts/zcm.py compliance <project_id> /path/投标A.docx /path/投标B.docx\n# 暗标/电子标：加 --blind / --electronic\n# 敏感单位名称：加 --sibling-unit-names \"甲公司,乙设计院\"\n# 关闭语义审查：加 --no-semantic-review\n```\n- **不支持云端链接**：传链接会被脚本拒绝，请用户先自行下载到本地。\n- 审查选项与平台一致：暗标、电子投标、敏感单位名称、语义审查开关。关闭语义审查时只能表述为“规则类检查结果”，不能说成完整语义审查。\n- 标书审查按平台规则消耗可用字数；发起前会校验可用字数，不足时提示购买会员/字数包后重试。\n- **直接把合规结果展示给用户**——含 `summary`（风险计数 + 一句话结论 + 语义审查状态）、`partial_summary`（阶段性/部分结果统计）、`scope_summary_lines`（检查范围）、`issues[]`（风险等级/招标依据/投标证据/修改建议）、`similarity_issues[]`（多文件雷同）、`manual_items[]`（人工核查清单）。优先讲高风险、结论与审查完整性。字段见 [api-compliance.md](api-compliance.md)。\n- 若 `summary.conclusion_phase`、`summary.semantic_review` 或 `partial_summary` 表示语义审查处理中、部分完成或只完成规则检查，必须如实说明“当前为部分结果/语义审查未完整完成”，不要说成完整审查完成。\n- `risk_level` 实测为 `high`/`review`/`tip`，脚本输出与报告**已自动转中文**（高风险/待复核/提示），直接用中文呈现。\n- 未解读就调 → 409；投标文件缺失/类型不对 → 422（两份输入缺一不可）。\n- 展示后**主动问是否生成合规报告**（见下）。\n\n## 第 6 步：标书查重\n\n用于比较不同主体投标文件之间的雷同/相似风险。它不是标书审查，也不判断投标文件是否合规；结果只作为提交前内部自查线索，不构成围标、串标或违法违规的法律认定。\n\n固定按这 3 步走，缺一步都不要提交任务：\n\n1. **先收集投标文件**：必须是 2-3 份投标文件。只有 1 份投标文件，或“1 份投标文件 + 1 份招标文件”，都不能发起查重；应提示用户再提供至少 1 份投标文件。\n2. **再处理招标文件（可选）**：招标文件只能放到 `--tender-file`，用于排除招标原文造成的共同表述，不能放进投标文件列表里凑数。\n3. **最后确认合法持有**：发起前必须先问并得到用户确认：「请确认你合法持有并有权处理本次上传的全部投标文件/招标文件。确认后我再发起标书查重。」\n\n```bash\npython3 scripts/zcm.py duplicate /path/A公司投标.docx /path/B公司投标.docx --legal-possession-attested --report html\n# 可选关联招标文件，用于排除招标原文造成的共同表述：\npython3 scripts/zcm.py duplicate /path/A公司投标.docx /path/B公司投标.docx /path/C公司投标.docx \\\n  --tender-file /path/招标文件.pdf --legal-possession-attested --report html\n# 可选关闭维度：--no-image / --no-metadata / --no-semantic\n# 默认排除招标文件原文共同表述；如用户明确要求不排除，可加 --include-tender-baseline\n```\n\n- 投标文件必须 **2-3 份**，支持 `.doc/.docx/.pdf`；单份 ≤ 1024 MB，总大小不超过 2GB。投标文件不足 2 份时直接补问，不要提交 API。\n- 招标文件可选 **1 份**，支持 `.doc/.docx/.pdf`，≤ 50 MB；用于降低招标原文共同表述对相似度的干扰。\n- **不支持云端链接**：传链接会被脚本拒绝，请用户先自行下载到本地。\n- 标书查重按平台规则消耗可用字数；发起前会校验可用字数，不足时提示购买会员/字数包后重试。\n- 查重维度：连续文本/段落结构、图片相似、文档元数据、主体线索、招标基线。\n- 查重完成后展示 JSON 里的核心结论，并在用户需要或命令带 `--report html|docx|both` 时生成本地 HTML/Word 查重报告。必须输出报告绝对路径。\n- 若任务失败返回 `bid_duplicate_failed`，优先转述平台返回的具体原因；错误详情通常会带 `run_id`、`duplicate_status`、`duplicate_error_message`，用于后台定位是哪次查重运行失败。\n- 查重报告只呈现文件对风险率、证据片段、图片/元数据/主体线索异常、修改建议；不要输出“已串标/确认围标”等定性结论。\n\n## 报告生成与命名\n\n解读/合规/查重结果可渲染成报告（HTML / Word），零依赖：\n\n```bash\n# 随命令一步出（默认 html；要 Word：--report both）\npython3 scripts/zcm.py interpret 招标文件.pdf --report html\npython3 scripts/zcm.py compliance <pid> 投标.docx --report html --name 招标文件.doc\npython3 scripts/zcm.py duplicate 投标A.docx 投标B.docx --legal-possession-attested --report html\n# 按 job_id 补出\npython3 scripts/zcm.py report --job <JOB_ID> --name 招标文件.pdf            # html\npython3 scripts/zcm.py report --job <JOB_ID> --name 招标文件.pdf --format both  # +Word\npython3 scripts/zcm.py report --job <JOB_ID> --service bid_duplicate --format html\n```\n- **默认只出 HTML**；用户明确要 Word 才 `docx`/`both`。\n- 命名：`招标文件名_智能解读` / `招标文件名_合规审查` / `标书查重_时间戳`。取名优先级：`--name` > 结果自动识别（`original_filename` / `project_info.项目名称` / 本地缓存）> `标签_时间戳`。\n  - `interpret` 自动用上传文件名；`generate` 自动用缓存名；**`compliance`/`report --job` 拿不到招标文件名时务必带 `--name`**，否则退化时间戳。`bid_duplicate` 不依赖招标文件名时默认使用时间戳命名。\n- 报告内容依赖后端按对应 API 分册返回完整结果；合规 HTML 总览会展示检查范围、结论、语义审查状态和部分结果摘要；`/result` 只回句柄或字段空时，报告注明「无明细」而不报错。\n\n## 知识库取数（供本地待填项回填）\n\n当需要用企业资料辅助**本地**待填项回填时，不改走生成主流程，而是单独查询开放 API：\n\n```bash\npython3 scripts/zcm.py knowledge-base\npython3 scripts/zcm.py knowledge-base company_profile\npython3 scripts/zcm.py knowledge-base qualifications --page 1 --page-size 50\npython3 scripts/zcm.py knowledge-base performances --page 1 --page-size 50\npython3 scripts/zcm.py knowledge-base financial_reports --page 1 --page-size 50\n```\n\n- 返回按类别分组的结构化 JSON；分页类默认前 **50** 条。\n- **明确排除**：历史标书库、标书模板库。\n- 字段含义、可否直接回填、敏感字段边界见 [knowledge-fields.md](knowledge-fields.md)。\n\n## 关键约定\n\n- **必须输出完整路径**：解读报告 / 成品标书 / 合规报告生成后，把**每个文件的完整绝对路径**逐行告诉用户（脚本已用「已生成…/已下载…」打印绝对路径，照搬即可）——**不要只说落在某目录**。\n- **进度播报（两阶段，必须这样做才能实时）**：Bash 工具不流式传输 stderr，`--no-wait` + `progress-stream` + Monitor 是唯一能让用户看到实时进度的方式。长任务（interpret / generate / compliance / duplicate）统一走以下三步：\n  1. **提交**（同步，快）：加 `--no-wait`，Bash 运行后立即拿到 `job_id`。\n  2. **实时监听**：`Bash(run_in_background=True)` 运行 `python3 scripts/zcm.py progress-stream <job_id>`，再用 Monitor 订阅该进程 stdout——每行状态变更即时通知 Claude，Claude 实时转达给用户（如「5% 准备文档」→「生成内容 47% · 正在写正文 32/80 节」→「导出 Word」→「完成」）。Monitor 的 description 用正常任务名，**不带「重试」等临时标签**——即使是 worker_lost 后重新提交的 job，新 job 已正常运行，描述应反映当前状态而非历史原因。后端暂未给出细分进度时，`progress-stream` 会立即输出监听开始，并每 5 秒输出排队/运行中心跳句；这些心跳句也必须转述，避免用户误以为卡死。运行环境已激活 `smartBidding311` 时，优先直接用该环境里的 `python` 启动监听；不要用 `conda run` 包裹 `progress-stream`，它可能缓冲 stdout，导致前台看不到实时行。\n  3. **取结果 + 生成报告 + 输出路径**：Monitor 收到 `[完成]` 后必须主动补齐后处理，三类任务各有对应步骤：\n     - `interpret`：`result <job_id>`（提取 project_id）→ `report --job <job_id> --format html`（生成解读报告）→ 输出报告全路径\n     - `generate`：`download-url <job_id>`（获取短时下载链接）→ 输出文件名、大小、有效期和下载链接；用户明确要本地文件时再 `result <job_id> -o <路径>.docx`\n     - `compliance`：`result <job_id>`（打合规摘要）→ `report --job <job_id> --format html`（生成合规报告）→ 输出报告全路径\n     - `duplicate`：`result <job_id>`（打查重 JSON 摘要）→ `report --job <job_id> --service bid_duplicate --format html`（生成查重报告）→ 输出报告全路径；如果用户明确不要报告，则只输出文件对风险率、证据片段与修改建议，不输出本地报告路径\n     \n     > `--no-wait` 跳过了同步模式的后处理，**AI 必须手动补**，否则报告文件不会生成，用户看不到路径。\n  > 仅在用户不需要看进度或调试时才用单命令前台运行（无 `--no-wait`）。`packages` / `me` 等快速命令无需两阶段。\n- **断点续查**：`job <job_id>` 查状态、`result <job_id> [-o file]` 取结果、`cancel <job_id>` 取消。\n- **幂等**：网络重试给提交命令加 `--idempotency-key <UUID>`，避免重复建任务/重复扣费。\n- **续接已有 project**：用户解读后直接说「帮我生成」，沿用 `project_id` 从第 3 步继续，不重传。\n- **错误处理**：脚本已把 401/402/404/422/429 转中文。常见——402 可用字数不足让用户购买会员或字数包；整层 404 多为开放 API 总开关未开，让管理员开启；429 退避重试。完整对照见 [api.md](api.md)，按任务场景继续读对应分册。\n- **可用字数不足（402）**：开放 API / Skill 下，智能解读免费且可用字数为 0 也能发起；标书审查、标书查重仍会校验并按平台规则消耗可用字数；标书生成前只做预计消耗说明，不查余额、不做示警、不拒绝提交。脚本只打印**不含凭证参数的官网入口链接**，照原样转达即可；错误体里带 `bind_key` 的 `recharge_url`/`bind_url` 一律不转发（见第 1 步「凭证保护」）。\n\nFile v1.0.16:skill-card.md\n\n## Description:\n\n上传招标/投标文件，AI 一站式完成智能解读、投标文件生成、标书审查和标书查重，并通过百炼标书云端服务处理文件。\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chichihaixiaojian666](https://clawhub.ai/user/chichihaixiaojian666)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal bidding and procurement teams use this skill to interpret tender documents, generate bid documents, review compliance risks, and compare bid files for similarity before submission.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Tender and bid files are uploaded to a third-party cloud service for processing.\n\nMitigation: Use the skill only when the user is authorized to upload those documents and accepts the vendor service's retention and billing model.\n\nRisk: The security summary reports under-disclosed local persistence and API-key safety gaps.\n\nMitigation: Confirm the publisher documents or fixes the ~/.zcm metadata file behavior and authenticated redirect handling before installation.\n\nRisk: API keys are full account credentials for the vendor service.\n\nMitigation: Keep API keys out of chat and store them only in the skill-local config.json with restricted file permissions.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chichihaixiaojian666/skills/biaoshu-writer-read)\n- [Publisher profile](https://clawhub.ai/user/chichihaixiaojian666)\n- [百炼标书开放 API](references/api.md)\n- [鉴权、任务与可用字数接口](references/api-auth.md)\n- [智能解读与标书制作 API](references/api-bid-workflow.md)\n- [标书审查 API](references/api-compliance.md)\n- [标书查重 API](references/api-duplicate.md)\n- [知识库字段说明](references/knowledge-fields.md)\n- [百炼标书 service](https://biaoshu.zhiliaobiaoxun.com/?ch=c666)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance, files]\n\n**Output Format:** [Conversational text plus generated HTML, Word, DOCX, JSON, and report files depending on the selected workflow.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Outputs may include cloud-generated short-lived download links and local report paths.]\n\n## Skill Version(s):\n\n1.0.16 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.15: 8 files, 57685 bytes\n\nFiles: references/api.md (20261b), references/knowledge-fields.md (3123b), references/usage.md (20460b), scripts/report.py (43982b), scripts/zcm.py (42502b), skill-card.md (2549b), SKILL.md (17626b), _meta.json (139b)\n\nFile v1.0.15:SKILL.md\n\n---\nname: biaoshu-bailian\ndescription: 上传招标/投标文件，AI 一站式完成智能解读（废标红线/评分标准/控标洞察）、成品投标文件(.docx)生成、标书审查（分级风险+雷同检测）和标书查重（2-3份投标文件相似/雷同风险检查）。覆盖投标、招标、标书、投标文件、竞标、围标、控标、废标、评分标准、资格条件、技术标、商务标、暗标、响应文件、应答文件、雷同检测、相似检查、标书查重等场景——当用户提供或提及招标/投标文件、问「这个标能不能投 / 有哪些废标红线 / 帮我写投标书 / 检查标书有没有问题 / 两份投标文件像不像 / 会不会被判雷同」，或想解读招标文件、生成投标文件、做标书审查或查重时使用。需百炼®标书 Api Key（手机号注册赠 5 万字）；文件经百炼®标书云端处理，标书生成消耗可用字数。\nallowed-tools: Read, Write, Bash\npermissions:\n  network:\n    allow:\n      - biaoshu.zhiliaobiaoxun.com\n    deny:\n      - all-other-domains\n  filesystem:\n    read:\n      - 用户明确提供的招标文件\n      - 用户明确提供的投标文件\n      - 本 skill 自身脚本与 references 文档\n      - skill 内 config.json\n    write:\n      - biaoshu-bailian-files/\n      - skill 内 config.json\n    deny:\n      - 用户未明确授权的其他本地路径\n  environment:\n    allow:\n      - ZCM_HOME\n      - ZCM_OUTPUT_DIR\n    deny:\n      - all-other-environment-variables\n  billing:\n    - 标书生成会消耗 Api Key 所属账户可用字数\n  credentials:\n    input:\n      - Api Key 仅由用户本人写入 skill 内 config.json\n    deny:\n      - 在对话中索取或回显 Api Key\n  data-handling:\n    deny:\n      - 附件地址外传\n      - 文件流外传\n      - base64 外传\n---\n\n# 百炼®标书写作助手\n\n> Language policy: Follow the user's language for all explanations, summaries, prompts, and ordinary replies. If the user language is unclear, ask or mirror the latest user language. Platform menu names, source procurement terms, risk labels, and generated report artifacts may remain in Simplified Chinese (zh-CN) when they reflect the upstream platform or report template.\n\n## MCP Permission Declaration\n\nThis skill declares the minimum capabilities below and should be reviewed against exactly this boundary:\n- `Read`: only user-provided tender/bid files, this skill's own scripts/docs, and local `config.json`.\n- `Write`: only generated outputs in `biaoshu-bailian-files/` and local `config.json`.\n- `Network`: only `https://biaoshu.zhiliaobiaoxun.com` for the 百炼®标书开放 API.\n- `Environment`: only optional `ZCM_HOME` and `ZCM_OUTPUT_DIR` for local storage paths.\n\nThis skill does not request shell-wide wildcard privileges beyond running its bundled local client `scripts/zcm.py`, does not access arbitrary domains, and does not read unrelated local files or environment variables.\n\nFor avoidance of doubt:\n- No arbitrary web browsing.\n- No access to unrelated local folders.\n- No reading of unrelated environment variables.\n- No credential collection inside chat.\n- No attachment export, file stream export, or base64 export to third parties.\n\n\n> 📌 本文档同时是 AI 助手的执行手册：文末「🚫 对用户输出的第一铁律」与「⚠️ 权限与数据说明」优先级最高、覆盖全文，任何面向用户的输出都必须先满足其要求；一切任务命令由助手后台代跑（后台操作手册见 [references/usage.md](references/usage.md)）。\n\n## 快速开始：获取 Api Key\n\n用百炼®标书写作助手出解读/标书/标书审查/标书查重，只需一个 Api Key——一个手机号就能开通，手机号注册赠 5 万字。三步搞定（向用户转述时**逐步骤完整给出**，链接必须原样显示完整 URL，不要写成「百炼®标书平台」之类的链接文字）：\n\n1. 打开官网 https://biaoshu.zhiliaobiaoxun.com/?ch=c666 ，用手机号 + 短信验证码注册并登录（手机号注册赠 5 万字）；\n2. 登录后点**左侧菜单『Skill 接入 → 获取 Api Key』**，在弹出面板中**查看/复制 Api Key**（首次打开自动生成，形如 `bk_live_xxxxx`；重置后旧 Key 立即失效）；\n3. 在本 skill 目录下创建凭证文件 `config.json`，写入一行 `{\"app_key\": \"bk_live_xxxxx\"}`（把 `bk_live_xxxxx` 换成自己的 Key）。**Api Key 是账户的完整凭证，请用户本人写入，不要在对话里索取、让用户粘贴或复述 Key。**\n\n无 Key 时各功能会打印上述获取指引而非崩溃。更多配置细节见 [references/usage.md](references/usage.md)（仅供助手后台使用）。\n\n## 四大功能\n\n### 🔍 智能解读\n- **输入**：招标文件（`.pdf` / `.doc` / `.docx`，**≤ 50 MB**），仅限本地文件路径（云端文件请让用户先自行下载到本地）。\n- **输出**：8 维度结构化解读——项目信息 / 合标项 / 废标红线 / 评分标准 / 关键要求 / 商务条款 / 报价要求 / 采购背景；外加**控标洞察**（参与建议、控标信号、行动建议）。可导出解读报告（HTML / Word）。\n- **使用示例**（用户可以这样说）：\n  - 「帮我解读这份招标文件 `/Users/me/某采购项目招标文件.pdf`」\n  - 「看看这个标能不能投？有哪些废标红线？文件我已经放在 `/Users/me/下载/某项目招标文件.docx`」\n  - 「分析一下这份招标文件的评分标准和控标风险，顺便出一份解读报告」\n  - 「这个采购项目值不值得投？我们资格够不够？」（把文件放本地、给我路径即可，我来定制分析）\n  - 用户得到：「参与建议：谨慎参与 · 控标风险：高 · 废标红线 30 条 · 技术主观分占 45%」等解读要点 + 报告绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_智能解读.html`）（后续制作/审查自动复用该项目，无需重传）。\n\n![智能解读报告示例](https://raw.githubusercontent.com/chichihaixiaojian666/biaoshu-skill/main/report-interpret.png)\n\n### 📝 标书制作\n- **输入**：已解读项目 + 选定分包（多包时）；可指定目标页数，`total_pages` 最高 **500**。\n- **输出**：成品投标文件 `.docx`——按招标文件名自动命名，自动完成选包、抽需求、生成大纲、生成正文、填充制式模板与导出，含目录、章节与「待填项」定位书签。（此步消耗可用字数。）\n- **使用示例**（用户可以这样说）：\n  - 「就用刚才解读的项目，帮我生成投标文件」\n  - 「选 01 包，生成一份 80 页左右的标书，存到桌面」\n  - 「这个项目直接出标书，页数按系统建议来」\n  - 「时间紧，先给我出个标书框架，页数按系统建议」\n  - 用户得到：多包项目会先看到分包清单供挑选，然后拿到成品绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_投标文件.docx`），可直接编辑填充。平台会结合分包结构、技术/商务内容、表格和图表规划页数；制式表格/范本会尽量自动填充，无法确认的信息保留为待填项。（此步消耗可用字数，生成耗时可能超过 10 分钟，期间实时播报进度。）\n\n### ✅ 标书审查\n- **输入**：招标文件（已解读）+ **一份或多份**投标文件（`.doc` / `.docx` / `.pdf`，**支持多选，最多 100 份**；**单份 ≤ 1024 MB**，**总大小不超过 2GB**）。\n- **审查选项**：支持标记暗标、电子投标；可填写敏感单位名称用于检索；可按需关闭语义审查，仅保留规则类检查。\n- **输出**：分级风险问题清单（高风险 / 待复核 / 提示，每条带招标依据、投标证据、修改建议）+ 一句话结论 + 检查范围 + 语义审查状态/部分结果提示 + 多文件雷同检测 + 人工核查清单。可导出审查报告。\n- **使用示例**（用户可以这样说，招标文件需已解读）：\n  - 「审查一下这份投标文件 `/Users/me/某项目_投标文件.docx` 有没有废标风险」\n  - 「把 `A公司投标.docx` 和 `B公司投标.docx` 一起查一遍，看看有没有雷同和风险」\n  - 「这是暗标，帮我查格式和红线问题，出一份合规报告」\n  - 「投之前帮我把把关，别废标」（把投标文件放本地、给我路径即可）\n  - 用户得到：「高风险 0 · 待复核 39 · 提示 25」+ 一句话结论、检查范围、语义审查是否完整、整改建议 + 报告绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_合规审查.html`）（多份文件时含雷同检测结果；部分结果不得说成完整审查）。\n\n![合规审查报告示例](https://raw.githubusercontent.com/chichihaixiaojian666/biaoshu-skill/main/report-compliance.png)\n\n> 报告采用 editorial 版式（侧栏目录、风险统计、卡片化问题与证据），HTML 可离线打开、可打印。\n\n### 🔁 标书查重\n- **输入**：`2-3` 份合法持有的投标文件（`.doc` / `.docx` / `.pdf`，仅限本地文件路径，云端文件请让用户先自行下载到本地），可选关联 `1` 份招标文件（≤ 50 MB）作为公共表述基线。投标文件单份 ≤ 1024 MB，总大小不超过 2GB。\n- **发起前确认**：必须先确认用户合法持有并有权处理全部上传文件；查重结果仅供提交前内部自查，不构成围标、串标或违法违规的法律认定。\n- **输出**：按文件对展示文本相似、图片相似、文档元数据、主体线索、招标原文共同表述等风险线索，包含风险率、证据片段和修改建议。当前 skill 输出完整 JSON 结果，可在百炼®标书平台查看历史报告。\n- **使用示例**（用户可以这样说）：\n  - 「帮我查一下这两份投标文件有没有雷同风险：`/Users/me/A公司投标.docx` 和 `/Users/me/B公司投标.docx`」\n  - 「这三份响应文件做一下相似检查，招标文件是 `/Users/me/招标文件.pdf`」\n  - 「投之前帮我看两份标书像不像，会不会有围标风险线索」\n  - 用户得到：文件对风险率、相似片段、图片/元数据/主体线索风险提示和修改建议；如未确认文件合法持有，必须先补确认再发起。\n\n智能解读、标书生成、标书审查、标书查重的结果均可同步在百炼®标书平台查看：<https://biaoshu.zhiliaobiaoxun.com/?ch=c666>\n\n> 百炼®标书是面向投标场景的**投标全流程工作台**。网页工作台之外，也支持通过**开放 API 与 Skill 接入**完成解读、抽包、生成、标书审查与标书查重。\n>\n> **字数计费说明要分两层讲清楚**：解读、抽包、标书审查、标书查重**本身不消耗字数**，真正消耗可用字数的是标书生成；但通过开放 API / Skill 调用时，解读、生成、标书审查、标书查重在提交前都要求账户有可用字数，可用字数不足会先被拦截。\n\n## 🪶 轻咨询也接得住 & 顺势衔接下一步\n\n- **只给片段、问通用问题也接得住**：用户只粘了一段招标公告/采购需求，或问「投标要注意什么 / 暗标有什么要求 / 技术方案怎么写 / 常见废标原因有哪些 / 控标怎么识别」时，先给一段通用要点应答，**再按第一铁律说清「怎么给完整文件」**（上传文件，或给本地绝对路径并举个示例；本 skill 只读本地文件，云端文件请让用户先自行下载到本地），引导补上文件后做定制解读/审查。\n- **一步做完，顺势提示下一步**（用户不接就不再追）：解读完 → 问「要不要接着基于它生成投标文件？」；标书生成完 → 问「要不要再做一遍标书审查、排查废标风险？」；标书审查完 → 问「要不要按整改清单改完后复审一次？」；用户提供多份不同主体投标文件时 → 可提示「要不要单独做标书查重，看雷同/相似风险线索？」。\n\n## 🚫 对用户输出的第一铁律（优先级最高，覆盖本文档其余所有内容）\n\n- 本 skill 的一切命令（`python3 …`、`zcm.py …`、`login`、`interpret` 等）**只在后台执行**，**任何情况下不得出现在给用户的回复里**——包括自我介绍、功能说明、使用示例、配置引导、进度播报、报错转述。\n- 用户只需要做两件事：**提供文件、说需求**；Api Key 由用户按「快速开始」自行写入本地凭证文件（Key 不进对话）。其余任务命令全部由你（助手）代跑。\n- 用户问「怎么用 / 给我些示例」时，**只展示上方各功能「使用示例」里的场景话术**（用户怎么说 → 得到什么），并告诉他「把文件给我、直接说需求即可」。[references/usage.md](references/usage.md) 里的命令是你的后台操作手册，**不是可以展示给用户的内容**。\n- **安装成功后的介绍、或用户问「这个 skill 能干什么 / 怎么拿 Api Key」时，必须完整传达两块信息；可按用户当前语言转述，涉及平台菜单、风险等级、报告标题等专有术语可保留简体中文原词**：\n  ① **怎么获取 Api Key**——「快速开始：获取 Api Key」的三步流程完整给出，**尤其第 3 步的凭证配置方式**（用户在 skill 目录下自建 `config.json`、写入 `{\"app_key\": \"bk_live_xxxxx\"}`、Key 不进对话）必须说清；\n  ② **有什么功能**——「四大功能」小节，**尤其各功能「使用示例」的场景话术和「用户得到」**必须完整出现。\n  两块都要**完整传达关键信息与示例**，可以按用户当前语言转述，不必逐字照抄；示例不可省略。\n- **让用户提供文件时，必须说清「怎么给」**：无论是要招标文件还是投标文件，都不能只说「发给我」。要明确告诉用户两种方式任选——**① 直接上传文件；② 给出本地文件路径**（绝对路径，形如 `/Users/你的用户名/Downloads/某采购项目招标文件.pdf`），并**举一个具体路径示例**（本 skill 只读本地文件，云端文件请让用户先自行下载到本地）。别让用户猜格式。\n- **产物交付必须清楚**：解读报告 / 合规报告 / 查重报告每次产出后，把**每个文件的完整绝对路径**（形如 `/Users/you/biaoshu-bailian-files/某项目_智能解读.html`）逐行告诉用户；成品标书默认交付**短时下载链接**（脚本会打印链接、文件名、大小、有效期），用户明确要本地文件时再用 `result <job_id> -o <路径>.docx` 下载并告知绝对路径。标书查重未请求报告时只总结 JSON 核心结论，不编造本地报告路径。\n- **凭证保护**：不得在回复中复述/输出 Api Key，也不得转发任何**携带 Key 的链接**（如平台 402 返回的 `?bind_key=` 充值/绑定链接——会经会话记录、截图、链接预览泄露）；涉及充值/账户操作只给不含参数的官网普通链接。\n\n## ⚠️ 权限与数据说明（首次使用前告知用户）\n\n- **文件外发**：用户提供的招标/投标文件会**上传至百炼®标书服务器**（`biaoshu.zhiliaobiaoxun.com`）处理。此类文件常含商业、报价与个人信息，上传前须确认用户知悉并同意。\n- **网络访问**：仅访问上述百炼®标书域名（API 调用），无其他外联；不抓取任何云端链接。\n- **本地读写**：读取用户指定的文件；产物（标书/报告）写入 `biaoshu-bailian-files/`；凭证存 skill 内 `config.json`（权限 600，logout 可删，保存后把文件位置告知用户）。\n- **数据留存**：上传的文件与产出结果以 Api Key 所属账户身份**留存在百炼®标书服务器**——任务结果与成品 .docx 约 7 天后过期，历史数据可登录官网查看管理。\n- **计费**：标书生成消耗 Api Key 所属账户的可用字数，提交前脚本会预检可用字数。\n- **环境变量**：仅读取上方 frontmatter 声明的 `ZCM_*` 可选配置项，不读取其他任何环境变量。\n- **不采集**：本 skill 不采集设备信息、不代注册账号、不收集手机号/验证码。\n\n## 进一步\n\n凭 **Api Key** 调用百炼®标书开放 API，完成投标全流程。所有任务走「**提交 → 自动轮询 → 取结果**」统一异步模型，以 Api Key 所属用户身份执行（复用其知识库与可用字数账户）。底层由零依赖 Python 客户端封装鉴权、轮询与友好错误码（具体命令见 [references/usage.md](references/usage.md)）。\n\n- **执行任务前先读** [references/usage.md](references/usage.md)：各步参数、命名规则、计费与凭证规则、报告/边界情形、断点续查、幂等、错误处理。\n- **输出铁律**（除非用户明确说不要）：运行脚本时进度照常显示、不重定向吞掉；解读/标书/合规结果文件的**绝对全路径**必须打印给用户。详见 usage.md 顶部「⚠️ 输出约定」。\n- **链接铁律**：凡向用户展示百炼®标书平台地址（注册、查看结果、充值、绑定等），一律**原样输出完整 URL**（如 https://biaoshu.zhiliaobiaoxun.com/?ch=c666 ），不要用「百炼®标书平台」「官网」这类超链接文字代替或省略。\n- **接口契约**（开放 API 端点、错误码、解读/合规/查重返回字段）→ 见 [references/api.md](references/api.md)。\n\nFile v1.0.15:_meta.json\n\n{\n  \"ownerId\": \"kn7dz1pzdygwz7z5fwfmrvhrnn84cs8q\",\n  \"slug\": \"biaoshu-writer-read\",\n  \"version\": \"1.0.15\",\n  \"publishedAt\": 1788258925061\n}\n\nFile v1.0.15:references/api.md\n\n# 百炼®标书开放 API 契约参考\n\n> **契约兼容标注（skill biaoshu-bailian 2.2.3）**\n> - 适配后端 API：`/api/open/v1`\n> - 契约核对日期：2026-09-01（接入标书查重 Open API；`max_total_pages` 同步到 500；字数计费话术与标书审查规则对齐；生成任务细进度与成品短时下载链接对齐）（后端字段/枚举变化时更新此处并 bump 版本）\n> - 关键枚举快照：`risk_level ∈ {high, review, tip}` · `result_type ∈ {suspected, detected}` · `priority ∈ {high, medium, low}`\n> - 渲染兼容策略：`report.py` 同时兼容文档值（高/中/低）与实测值、证据多形态、缺字段不崩——契约小幅漂移只需 PATCH，不触发 MAJOR。\n\n> ⚠️ **数据外发与知情同意**：本文档所有接口均为百炼®标书云端服务——上传的招标/投标文件**常含商业、报价与个人信息**，将发送至 `biaoshu.zhiliaobiaoxun.com` 处理，标书生成会消耗账户可用字数；**上传的文件与产出的结果会留存在百炼®标书服务器**（任务结果与成品 .docx 约 7 天后过期，数据以 Api Key 所属账户身份存于平台、可登录官网查看管理）。**首次上传前必须确认用户知悉并同意**；完整披露见 SKILL.md「⚠️ 权限与数据说明」。\n\n`scripts/zcm.py` 已封装下列全部端点；本文档供需要直接发请求、排查错误或理解返回结构时查阅。\n所有契约均经后端源码 + 本地实跑核实。\n\n## 目录\n- [鉴权与环境](#鉴权与环境)\n- [核心模型与约定](#核心模型与约定)\n- [端点详情](#端点详情)\n- [错误码速查](#错误码速查)\n- [注意事项](#注意事项)\n\n---\n\n## 鉴权与环境\n\n- **Base URL（生产）**：`https://biaoshu.zhiliaobiaoxun.com/api/open/v1`\n- 每个请求都带鉴权头：\n\n| Header | 值 | 说明 |\n|---|---|---|\n| `X-App-Key` | Api Key | 必填，形如 `bk_live_xxxxx` |\n| `Idempotency-Key` | UUID（可选） | 相同 key 24h 内返回同一 `job_id`，不重复扣费 |\n\n- 服务开关：开放 API 受超级管理员『系统设置』总开关控制，**关闭时整层返回 404**。\n- 凭证获取：官网 <https://biaoshu.zhiliaobiaoxun.com/> 注册 → 左侧菜单『Skill 接入 → 获取 Api Key』，面板首次打开自动生成 Key。\n  Api Key 可随时在『Skill 接入 → 获取 Api Key』面板查看；重置后旧 Key 立即失效。\n\n## 核心模型与约定\n\n- **project_id**：统一句柄，由「智能解读」产出，是**标书制作与标书审查的招标文件入口**。后续抽包 / 生成 / 合规复用同一 project，不重复解读、不重复计费。标书查重是独立任务，可选上传招标文件作为公共表述基线，不依赖 project_id。\n- **job_id**：每个异步任务的对外句柄。提交类接口立即返回 `{ \"job_id\": \"...\" }`。\n- **任务状态**：`queued` → `running` → `succeeded` / `failed` / `canceled`。\n- **上传方式**：本 skill 一律 `multipart/form-data` 直传本地文件（后端另有 `file_url` 入参，**本 skill 不使用**，也不做任何远程抓取）。\n- **限流**：每 Api Key 默认 60 req/min、同时进行任务 ≤ 3；超限 429。\n- **统一错误体**：`{ \"error\": { \"code\": \"...\", \"message\": \"...\" } }`\n- **计费**：实际消耗可用字数只发生在 ③生成（正文逐条 + 导出）；①解读、②抽包、④标书审查、⑤标书查重本身不消耗字数。\n- **提交门槛**：通过开放 API / Skill 提交时，①解读、③生成、④标书审查、⑤标书查重都要求账户有可用字数才能发起；②抽包与各类查询接口不受该门槛限制。`wallet_balance` 为兼容旧客户端的字段名，当前语义按可用字数理解。\n- **结果时效**：任务结果与 .docx 默认保留约 7 天，过期取结果返回 404 `result_expired`。⚠️ 这意味着**结果在此期间留存于百炼®标书服务器**（第三方存储）；上传文件与历史数据以账户身份存于平台，用户可登录官网查看管理——向用户交代结果时请一并说明。\n\n## 端点详情\n\n### `GET /me` — 连通性与可用字数\n```json\n{\"wallet_balance\":1397084,\n \"limits\":{\"rate_per_min\":60,\"max_concurrent_jobs\":3,\"running_jobs\":0}}\n```\n`wallet_balance` 当前为兼容旧字段名，展示给用户时统一称为“可用字数”。\n\n### `POST /interpretations` — 智能解读（唯一上传入口）\n- 入参：multipart 字段 `file`（.pdf/.doc/.docx）。\n- 返回：`{\"job_id\":\"...\"}`。\n- 结果（`/jobs/{id}/result`）：`{\"job_id\",\"service\":\"interpretation\",\"result\":{...}}`。\n  `result` 含句柄 `project_id`/`result_id`/`status` + **8 个内容维度 + 控标洞察**，\n  完整字段见 [附录 A](#附录-a智能解读结果字段)。**记下 `result.project_id`**。\n\n### `POST /bid-documents/{project_id}/packages` — 抽取分包\n- 无 body。返回 `{\"job_id\":\"...\"}`。\n- 结果：\n```json\n{\"service\":\"bid_document\",\n \"result\":{\"packages\":[...],\"is_multi_package\":true,\"package_count\":2,\n           \"suggested_pages\":50,\"max_total_pages\":500}}\n```\n- 把 `packages` 给用户挑选，收集选中的 `package_ids`。\n- `is_multi_package=false` 时可跳过选包，generate 不带 `package_ids`。\n\n### `POST /bid-documents/{project_id}/generate` — 生成成品标书\n- 入参 JSON：`{\"package_ids\":[11,12],\"total_pages\":80}`（非多包可省略 body 或传 `{}`）。\n- 返回 `{\"job_id\":\"...\"}`。内部串行「选包 → 抽需求 → 大纲 → 逐条正文 → 制式模板填充 → 导出」，耗时长。\n- 进度阶段加权：`select / requirements / outline / content / templates / export`。\n- **结果是流式 .docx 二进制**（非 JSON），响应头 `Content-Disposition: attachment; filename=\"bid_<job_id>.docx\"`。\n\n### `POST /projects/{project_id}/compliance-reviews` — 标书审查\n- 入参：multipart `bid_files`（一或多份 .pdf/.doc/.docx）+ 表单字段 `is_blind_bid` / `is_electronic_bid`。\n- 限制：最多 100 份；单份 ≤ 1024 MB；总大小 ≤ 2GB。\n- 可选字段：`is_blind_bid`（暗标）、`is_electronic_bid`（电子投标）、`sibling_unit_names`（敏感单位名称）、`semantic_review=false` 或 `enable_semantic_review=false`（关闭语义审查）。\n- project 必须已完成解读，否则 409。返回 `{\"job_id\":\"...\"}`。\n- 结果（`/jobs/{id}/result`）：`result.compliance` 含 `summary`/`issues`/`similarity_issues`/`manual_items` 等，\n  完整字段见 [附录 B](#附录-b合规审查结果字段)。\n\n### `POST /bid-duplicate/runs` — 标书查重\n\n- 入参：multipart `bid_files`（2-3 份 .pdf/.doc/.docx）+ 可选 `tender_file`（1 份 .pdf/.doc/.docx）。后端另支持 URL 字段，但 ClawHub 线路不使用，也不做任何远程抓取。\n- 限制：投标文件必须 2-3 份；投标文件单份 ≤ 1024 MB；可选招标文件 ≤ 50 MB；总大小 ≤ 2GB；不支持扫描型 PDF。\n- 必填字段：`legal_possession_attested=true`，表示用户已确认合法持有并有权处理本次上传的全部文件。\n- 可选字段：`enable_image`（图片相似，默认 true）、`enable_metadata`（文档元数据，默认 true）、`enable_semantic`（语义相似，默认 true）、`exclude_tender_baseline`（排除招标文件原文共同表述，默认 true）。\n- 返回：`{\"job_id\":\"...\"}`。通过 `GET /jobs/{job_id}` 轮询，通过 `GET /jobs/{job_id}/result` 获取结果。\n- 结果：`{\"service\":\"bid_duplicate\",\"result\":{\"run_id\":123,\"duplicate\":{...}}}`；`duplicate` 按文件对展示文本相似、图片相似、元数据、主体线索、风险率、证据片段和修改建议；`scripts/report.py` 可将该结果渲染成本地 HTML/Word 查重报告。\n- 责任边界：查重仅提供提交前内部自查线索，不构成围标、串标、违法违规或投标有效性的法律认定；不提供一键降重、同义改写或规避监管的建议。\n\n### `GET /jobs/{job_id}` — 查任务状态（轮询用）\n```json\n{\"job_id\":\"...\",\"service\":\"interpretation|bid_document|compliance|bid_duplicate\",\n \"phase\":null,\"status\":\"running\",\n \"progress\":{\"percent\":47,\"stage\":\"content\",\"stage_label\":\"生成内容\",\n   \"message\":\"正在写正文 32/80 节\",\"current_step\":32,\"total_steps\":80,\n   \"current_step_label\":\"项目实施方案\",\"unit_label\":\"节\",\n   \"elapsed_seconds\":360,\"estimated_total_seconds\":300,\"estimated_remaining_seconds\":0,\n   \"updated_at\":\"...\"},\n \"error\":null,\"created_at\":\"...\",\"updated_at\":\"...\"}\n```\n- `message/current_step/total_steps/current_step_label/unit_label` 为长任务细进度字段；不存在时按 `percent + stage_label` 展示。\n\n### `GET /jobs/{job_id}/result` — 取结果\n- 解读/合规/查重返回 JSON；标书制作返回 .docx 二进制流。\n\n### `GET /jobs/{job_id}/download-url` — 获取成品标书短时下载链接\n- 仅标书制作任务成功后可用；需 `X-App-Key`，按 Api Key 所属用户隔离。\n- 返回：`{\"filename\",\"download_url\",\"expires_in\",\"size_bytes\"}`。\n- `download_url` 是给用户打开的短时链接，形如 `/api/open/v1/jobs/{job_id}/download?token=...`，**不包含 Api Key**。\n- 用户点击短时链接时，平台校验 token 绑定的 `job_id/user_id/export_id` 与过期时间；若成品已上传对象存储则 302 跳转 CDN/COS 签名地址，否则使用旧的服务端流式下载兜底。\n\n### `POST /jobs/{job_id}/cancel` — 取消\n- 尽力而为；已过的扣费点不退款。\n\n### `GET /knowledge-base` — 开放知识库分类总览\n\n- 返回开放给 skill 的资料库分类与数据量。\n- **明确排除**：历史标书库、标书模板库。\n\n### `GET /knowledge-base/{category}` — 按类别查询知识库\n\n- `category` 当前支持：\n  - `company_profile`\n  - `qualifications`\n  - `performances`\n  - `financial_reports`\n- 返回按类别分组的结构化 JSON。\n- 分页类默认 `page=1`、`page_size=50`，最大也只允许 `50`。\n- 只返回白名单字段：\n  - `company_profile`：公司名称、企业类型、营业期限、统一社会信用编码、注册地址、办公地址、法人名称、职务、法人联系方式\n  - `qualifications`：资质名称、证书编号、有效期限\n  - `performances`：合同名称、客户名称、合同金额、完成时间\n  - `financial_reports`：当前仅开放分类入口，不开放具体字段\n- **不返回任何附件信息**：包括但不限于访问地址、文件流、base64、附件存在标记。\n- 字段说明与回填边界由 skill 侧 [knowledge-fields.md](knowledge-fields.md) 补充约束。\n\n### 402 insufficient_balance 错误体新增字段\n\n`phone_bound`（bool）；另有 `bind_url` / `recharge_url`（**均携带明文 `bind_key=<app_key>`**）。\n🔒 **本 skill 不使用也不转发这些带 Key 的链接**（防凭证经会话记录/截图/链接预览泄露）——可用字数不足一律引导用户自行登录官网购买会员或字数包（不含参数的普通链接）。\n\n### 提交门槛 vs 实际消耗（提交时 402）\n\n可用字数不足时，`POST /interpretations`、`POST /bid-documents/{pid}/generate`、\n`POST /projects/{pid}/compliance-reviews`、`POST /bid-duplicate/runs` 四个提交入口都会在**提交时**直接返回 402\n`insufficient_balance`（错误体含上述引导字段）；购买会员或字数包后方可操作。\n\n这和“是否实际消耗可用字数”是两件事：\n- **提交门槛**：解读 / 生成 / 标书审查 / 标书查重四个入口都要求账户有可用字数才能提交。\n- **实际消耗**：仍只有生成会真实消耗可用字数；解读、抽包、标书审查、标书查重本身不消耗字数。\n- **不受门槛限制**：抽包（packages）、`GET /me`、任务查询、结果获取等查询类接口不受该门槛限制。\n\nskill 侧提交前也会先调 `GET /me` 做预检，优先把这层差异解释给用户，避免把“可用字数不足拦截”误说成“这一步会消耗字数”。\n\n## 错误码速查\n\n| HTTP | code | 含义与处理 |\n|---|---|---|\n| 401 | `missing_credentials` / `invalid_credentials` | 缺 `X-App-Key` Header / Api Key 不对 → 检查凭证或重置 Key |\n| 403 | `account_disabled` | 凭证或用户被停用 |\n| 402 | `insufficient_balance` / `insufficient_points` | 可用字数不足，不扣费不产出 → 购买会员或字数包 |\n| 404 | `not_found` | 多为开放 API 总开关未开（整层 404）→ 联系管理员开启 |\n| 404 | `job_not_found` / `project_not_found` / `result_expired` | 句柄不存在/非本人/结果过期（7 天 TTL） |\n| 409 | `invalid_job_state` / `report_task_conflict` | 任务未成功就取结果 / 未解读就生成 / 未抽包就 generate / 已有标书审查或查重任务运行中 |\n| 422 | `validation_error` | 文件缺失/类型不支持 / 缺 package_ids / 查重未确认合法持有 |\n| 413 | `bid_file_too_large` / `tender_file_too_large` / `batch_too_large` | 查重或审查上传文件超出单份/总量限制 |\n| 429 | `rate_limited` / `too_many_concurrent_jobs` | 触发限流 → 退避重试（看 `Retry-After`）或减并发 |\n| 500 | `internal_error` | 服务端异常 → 重试或反馈 |\n\n任务级失败时 `GET /jobs/{id}` 的 `error.code`：`interpretation_failed` / `generation_failed` / `compliance_failed` / `bid_duplicate_failed` / `insufficient_balance` / `insufficient_points` / `canceled` / `worker_lost`（服务重启导致，需重新提交）。\n\n## 注意事项\n\n- **标书制作/审查的招标文件入口**：招标文件经 `/interpretations` 上传并产出 `project_id`；制作与合规都复用它，**不要重复上传同一招标文件**。标书查重可独立上传 2-3 份投标文件，并可选上传招标文件作为公共表述基线。\n- **幂等**：网络重试带相同 `Idempotency-Key`（UUID），避免重复建任务/重复扣费。\n- **计费**：标书生成消耗 Api Key 所属用户可用字数，与网页同口径；解读、抽包、标书审查、标书查重不消耗字数，但除抽包/查询外，提交前都要求有可用字数。生成前用 `GET /me` 看 `wallet_balance`（兼容字段，按可用字数理解）预判。\n- **内容质量依赖知识库**：正文质量取决于 owner 租户的公司资料库；资料缺失会致内容退化（不硬失败）。\n- **知识库查询接口**：skill 可独立查询企业信息 / 资质 / 业绩 / 财务报告，再由本地模型做待填项匹配与回填；历史标书库、标书模板库不在本接口开放范围内。\n- **知识库安全边界**：只能按 Api Key 所属租户取数，不接受外部 `tenant_id` / `user_id`；接口有单独限流与访问审计日志。\n- **来源标记**：经开放 API 产生的数据标记为 **skill** 来源（网页端为「平台」），便于在网页历史/消费流水里区分。\n\n> 字段口径与根目录《百炼®标书Skill服务.md》附录 A/B 一致；`scripts/report.py` 据此渲染报告。\n\n---\n\n## 附录 A：智能解读结果字段\n\n`GET /jobs/{id}/result` 的 `result`（`service=interpretation`）：\n\n```json\n{\n  \"project_id\": \"123\", \"result_id\": 7, \"status\": \"completed\",\n  \"project_info\": [...], \"compliance\": [...], \"disqualification\": [...],\n  \"evaluation\": [...], \"key_requirements\": [...], \"business_terms\": [...],\n  \"pricing\": [...], \"procurement_analysis\": {...}, \"decision_analysis\": {...}\n}\n```\n\n- **project_info[]** 项目基本信息：`field_name` / `field_value` / `source_page` / `source_text`。\n- **compliance[]** 合标项（参与资格）：`category` / `requirement_text` / `source_page` / `source_text` / `is_structured`。\n- **disqualification[]** 废标项（红线）：在 compliance 字段基础上多 `type`（资格废标/响应性废标/合规废标）。\n- **evaluation[]** 评审项：`component` / `item` / `factor` / `score`(满分) / `weight` / `source_page` / `source_text` / `is_structured`。\n- **key_requirements[]** 关键要求：`category` / `requirement_text` / `source_page` / `source_text`。\n- **business_terms[]** 商务条款：`term_type` / `term_content` / `source_page` / `source_text`。\n- **pricing[]** 报价要求：`component` / `requirement_text` / `source_page` / `source_text`。\n- **procurement_analysis{}** 采购背景：`analysis_summary` / `procurement_background` / `procurement_objectives` / `procurement_scope_items[]` / `key_constraints[]` / `key_success_metrics[]`(每条 `{name,detail}`，关键成功指标)（缺失字段可为 null/空）。\n- **decision_analysis{}** 控标洞察：\n  - 顶层：`participation_recommendation`（建议/谨慎/不建议参与）、`control_risk_level`（高/中/低）、`confidence_level`、`summary[]`、`signals[]`、`evidence_items[]`、`actions[]`、`advantaged_supplier_profile[]`、`our_gap_assessment[]`。\n  - `signals[]`：`id` / `dimension`（qualification_barrier/technical_targeting/business_barrier/scoring_bias/acceptance_and_performance_risk/pricing_competitiveness_constraint）/ `title` / `risk_level` / `description` / `reasoning` / `evidence_item_ids[]` / `our_stance`（advantage/risk/neutral/unknown）/ `our_stance_reason`。\n  - `evidence_items[]`：`id` / `source_category` / `source_page` / `source_text_excerpt` / `why_it_matters`。\n  - `actions[]`：`priority`（high/medium/low）/ `action_type` / `recommendation` / `related_signal_ids[]`。\n\n---\n\n## 附录 B：合规审查结果字段\n\n`GET /jobs/{id}/result` 的 `result.compliance`（`service=compliance`）：\n\n```json\n{\n  \"run_id\": 42, \"status\": \"completed\", \"mode\": \"standalone\",\n  \"document_id\": 123, \"interpretation_result_id\": 7,\n  \"summary\": {...}, \"partial_summary\": {...}, \"bid_files\": [...],\n  \"issues\": [...], \"similarity_issues\": [...], \"manual_items\": [...],\n  \"scope_summary_lines\": [...], \"error_message\": null\n}\n```\n\n- **summary{}** 汇总：`high_count` / `review_count` / `tip_count` / `similarity_count` / `manual_unchecked_count` / `conclusion`(一句话结论) / `conclusion_phase`(full/rules_only/semantic_partial) / `overview_ready` / `semantic_review.state` / `semantic_review.message_zh`。`semantic_review` 用于提示语义审查是否完整完成；不是 full/complete 时，对用户不得表述为完整审查。\n- **partial_summary{}** 阶段性/部分结果摘要：字段可能随引擎变化，常见为阶段性风险计数、阶段状态、说明文案。存在该字段时，HTML 报告总览区应展示，作为“当前结果完整性”的补充。\n- **bid_files[]** 被查文件：`id` / `filename` / `content_hash` / `metadata` / `created_at`。\n- **issues[]** 合规问题（核心）：`id` / `bid_file_id` / `bid_filename` / `issue_type`(如 `hard_field_presence` 等) / `risk_level` / `result_type` / `title` / `description` / `tender_evidence` / `bid_evidence` / `suggestion` / `confidence`(0-1) / `status` / `user_note`。\n  > ⚠️ **实测枚举值**：`risk_level` = **`high`/`review`/`tip`**；`result_type` = **`suspected`/`detected`**。`summary.high_count/review_count/tip_count` 按 `risk_level` 计数。\n  > 证据多形态（因引擎而异）：语义类 `tender_evidence/bid_evidence` 主键 **`excerpt`**（另含 `chunk_id`/`section_path`/`section_title`）；硬字段类 `{field,expected_text}`；规则未命中 `{source}`。`report.py` 的 `_ev` 已按 `excerpt > text > field/expected_text > source` 兼容。\n- **similarity_issues[]** 多文件雷同（仅多份投标文件时有）：`file_a_id`/`file_b_id` / `file_a_name`/`file_b_name` / `similarity_type`(text_overlap/structure_overlap) / `risk_level` / `title` / `evidence_a{text,page}`/`evidence_b{...}` / `similarity_score`(0-1) / `suggestion` / `status`。\n- **manual_items[]** 人工核查清单：`category` / `title`(简短标题) / `description` / `source` / `is_checked` / `note`(备注) / `checked_by` / `checked_at`。\n- **scope_summary_lines[]** 检查范围摘要（适合报告开头展示）。\n\n报告推荐布局：总览（风险摘要、检查范围、语义审查状态、部分结果摘要） → 高风险问题(issues 高) → 待人工复核(result_type=semantic) → 格式提示(低) → 多文件相似度 → 人工核查清单。`scripts/report.py` 已实现此布局。\n\nFile v1.0.15:references/knowledge-fields.md\n\n# 知识库字段说明\n\n本文件供助手在**本地待填项回填**时查阅。推荐流程：\n1. 先用 `python3 scripts/zcm.py knowledge-base` 查看可用分类；\n2. 再按需查询某一类，例如 `python3 scripts/zcm.py knowledge-base qualifications`；\n3. 本地模型根据下列字段含义匹配待填项；\n4. **没有把握的字段宁可保留待填项，不要臆造。**\n\n> 开放范围仅含：`company_profile`、`qualifications`、`performances`、`financial_reports`。\n> 明确不含：历史标书库、标书模板库。\n> 明确不返回：任何附件地址、文件流、base64、附件布尔标记。\n\n## 一、company_profile（企业信息）\n\n| field_key | 字段名 | 说明 | 是否可直接回填 |\n|---|---|---|---|\n| `company_name` | 公司名称 | 企业全称/投标人名称 | 是 |\n| `enterprise_type` | 企业类型 | 单位性质/企业性质 | 是 |\n| `business_term` | 营业期限 | 营业执照中的经营期限 | 是 |\n| `credit_code` | 统一社会信用编码 | 企业统一社会信用代码 | 是 |\n| `registered_address` | 注册地址 | 营业执照注册地址 | 是 |\n| `office_address` | 办公地址 | 企业办公/联系地址 | 是 |\n| `legal_representative` | 法人名称 | 法定代表人姓名 | 是 |\n| `legal_rep_position` | 职务 | 法定代表人职务 | 是 |\n| `legal_rep_phone` | 法人联系方式 | 法定代表人联系电话 | 仅模板明确要求时回填 |\n\n## 二、qualifications（企业资质）\n\n| field_key | 字段名 | 说明 | 是否可直接回填 |\n|---|---|---|---|\n| `qualification_name` | 资质名称 | 资质/证书名称 | 是 |\n| `certificate_number` | 证书编号 | 资质证书编号 | 是 |\n| `valid_period` | 有效期限 | 统一按“起始日期 至 截止日期/长期”返回 | 是 |\n\n> 资质是**多条记录**。回填前先判断模板要的是哪类资质，再选对应记录，不要默认取第一条。\n\n## 三、performances（企业业绩）\n\n| field_key | 字段名 | 说明 | 是否可直接回填 |\n|---|---|---|---|\n| `contract_name` | 合同名称 | 业绩对应的合同或项目名称 | 是 |\n| `client_name` | 客户名称 | 甲方/客户名称 | 是 |\n| `contract_amount` | 合同金额 | 合同金额原值 | 是 |\n| `completion_date` | 完成时间 | 竣工/验收/完成日期 | 是 |\n\n> 业绩同样是**多条记录**。需要按项目名称、客户、金额或时间要求筛选最匹配的一条或几条，不能把多条业绩混成一条。\n\n## 四、financial_reports（财务报告）\n\n当前仅开放**分类入口**，暂不开放具体字段。\n\n这意味着：\n- 可以知道当前租户存在该类资料；\n- 不能通过本接口取出财务报告的正文、附件或明细字段；\n- 本地模型不要自行假设或补写财务数据。\n\n## 使用边界\n\n- 没值：保留待填项，不要自行生成。\n- 多条记录：资质、业绩都要先选记录，再回填字段。\n- 附件资料：本接口不返回任何附件相关信息，不能据此推断附件内容。\n- 租户隔离：只能查询当前 Api Key 所属租户的数据，不能跨租户取数。\n\nFile v1.0.15:references/usage.md\n\n# 执行细节（操作手册）\n\n本文件是**执行任务时的完整操作指引**——做解读/制作/合规、生成报告、处理边界情形时按需查阅。接口契约与返回字段见 [api.md](api.md)。\n\n> ⚠️ **数据外发与知情同意**：解读/制作/合规/查重都会把用户提供的文件**上传至百炼®标书云端**（`biaoshu.zhiliaobiaoxun.com`）处理，此类文件常含商业、报价与个人信息；**上传文件与结果会以账户身份留存在百炼®标书服务器**（结果/成品约 7 天过期，可登录官网查看管理）。**首次上传前必须确认用户知悉并同意**（完整披露见 SKILL.md「⚠️ 权限与数据说明」）。\n\n## ⚠️ 输出约定（必须遵守，除非用户明确说不要）\n\n运行 `zcm.py` 时**老老实实把脚本输出原样给用户看**，不得为了「省事/抽字段」把它藏起来：\n\n1. **实时进度照常显示**：解读/抽包/生成/合规/查重都会把百分比+阶段（如 `[20%] 智能解读中`）打到 **stderr**；生成成品标书会优先展示细进度（如 `[47%] 生成内容 · 正在写正文 32/80 节 · 当前：项目实施方案 · 已用 6分钟`）。**不要 `2>` 重定向、不要吞掉**——用户要看到进度推进。需要后台实时播报时用 `progress-stream` + Monitor，而非把进度倒进文件。\n2. **完整交付产物位置**：每次产出后，必须把以下信息明确告知用户：\n   - 智能解读结果/报告（`*_智能解读.html` 等）\n   - 成品标书默认给短时下载链接（含文件名、大小、有效期）；用户明确要本地文件时再下载为 `*_投标文件.docx`\n   - 合规审查结果/报告（`*_合规审查.html` 等）\n\n   脚本本身已打印这些信息（`generate` 默认打印下载链接；`result -o` 成功后打印本地全路径）；**别用 `>`/`2>` 把它们重定向掉**。若用 `--no-wait`，完成后须主动用 `download-url <job_id>` 补取成品链接，或在用户要求本地文件时用 `result <job_id> -o <路径>.docx` 下载。\n\n   此外，解读/生成/合规/查重完成后脚本会打印一行 `💰 当前可用字数：X`——**照常转述给用户**，让其对可用字数与「够不够下一次」有数；查询失败时不打印，属正常，不必追问。\n\n> 反例（禁止）：`python3 scripts/zcm.py generate <pid> > out.json 2> log` —— 这会同时藏掉进度和成品全路径。\n\n3. **凭证/字数类提示不要把命令与 exit 码原样抛给用户**：缺 Key（exit 2）、可用字数不足（402）这类脚本输出是给你（助手）看的提示。你应当把它翻译成一句「用户下一步该做什么」（去官网拿 Key、按指引把 Key 写入 skill 目录下的 `config.json`、或打开官网购买会员/字数包）——不要让用户自己敲命令，也不要索取或代存用户的 Key。\n4. **本手册里的一切命令永不面向用户**（SKILL.md 第一铁律）：命令只在后台执行；向用户介绍功能或举例时，用 SKILL.md 各功能「使用示例」的场景话术（用户怎么说 → 得到什么），不要把本文件的命令、参数、代码块贴进回复。\n\n## 用法速查（完整流程）\n\n```bash\n# 1. 配凭证：用户在 skill 目录下自建 config.json 写 {\"app_key\":\"bk_live_xxx\"}（Key 不进对话）\npython3 scripts/zcm.py me                            #    连通 + 可用字数自检\npython3 scripts/zcm.py interpret 招标文件.pdf --report html   # 2. 解读 → project_id（+解读报告）\npython3 scripts/zcm.py packages <project_id>         # 3. 抽包（多包才需选包）\npython3 scripts/zcm.py generate <project_id>         # 4. 生成成品标书（消耗可用字数）\npython3 scripts/zcm.py compliance <project_id> 投标文件.docx --report html --name 招标文件.pdf   # 5. 可选：标书审查\npython3 scripts/zcm.py duplicate 投标A.docx 投标B.docx --tender-file 招标文件.pdf --legal-possession-attested --report html  # 6. 可选：标书查重（+查重报告）\n```\n招标文件支持 `.pdf/.doc/.docx`；标书审查和标书查重的投标文件支持 `.pdf/.doc/.docx`。全部自动轮询、实时播报后端进度。各步详解见下。\n\n## 目录\n- [第 1 步：凭证](#第-1-步凭证)\n- [第 2 步：智能解读](#第-2-步智能解读)\n- [第 3 步：抽取分包](#第-3-步抽取分包)\n- [第 4 步：生成成品标书](#第-4-步生成成品标书)\n- [第 5 步：标书审查](#第-5-步标书审查)\n- [第 6 步：标书查重](#第-6-步标书查重)\n- [报告生成与命名](#报告生成与命名)\n- [关键约定](#关键约定)\n\n---\n\n## 第 1 步：凭证\n\n凭证默认存在 **skill 内 `config.json`**（权限 600，含真实 Key——**绝不上传发布包/提交仓库**，发布包不含配置文件）。Api Key 只从 **skill 内 config.json** 读取（路径固定，不经环境变量、无旧目录回退、不可重定向）。\n\n**只需 Api Key 一项**，由用户**自行到官网获取**（本 skill 不代注册、不收集手机号/验证码）。获取全路径（转述时逐步骤完整给出，链接原样显示完整 URL）：\n打开官网 https://biaoshu.zhiliaobiaoxun.com/ → 手机号 + 短信验证码注册并登录（手机号注册赠 5 万字）→ 点**左侧菜单『Skill 接入 → 获取 Api Key』**，在弹出面板中查看/复制 Api Key（首次打开自动生成，形如 `bk_live_xxxxx`，重置后旧 Key 立即失效）。\n\n**配置方式（唯一引导方式：用户本人写入本地凭证文件，Key 不进对话）**：\n指导用户在本 skill 目录下创建 `config.json`，写入一行 `{\"app_key\": \"bk_live_xxxxx\"}`（把 Key 换成自己的）。**不要索取、让用户粘贴或在回复中复述 Key**（会话记录、截图、链接预览都可能泄露凭证）。可选字段仅保留 `output_dir` 成品存放目录；开放 API 地址固定为官方生产环境，不接受本地覆盖。配好后先跑 `me` 自检连通与可用字数。\n\n- 缺凭证时脚本会打印官网获取指引并退出（码 2），把指引转述给用户即可。\n- 先 `python3 scripts/zcm.py me` 确认连通与可用字数（生成会消耗可用字数）。\n\n### 可用字数不足（402，给用户自助链接，skill 不代办）\n\n可用字数不足时脚本会打印引导，照原样转达给用户，由用户**自行登录官网购买会员或字数包**后回到对话继续，Api Key 全程不变：入口 `https://biaoshu.zhiliaobiaoxun.com/recharge`（用注册手机号登录后操作）。\n\n- 🔒 **凭证保护（强制）**：平台 402 错误体里的 `recharge_url` / `bind_url` **携带明文 `bind_key`（即用户的 Api Key）**——**一律不得把这类带 Key 的链接转发进对话**（会话记录、截图、链接预览都可能泄露 Key，他人拿到即可操作该账户）。只给上面这条不含任何参数的普通入口链接。\n- ⛔ **禁止**：已有 Key 的用户，别引导他去官网「另注册新账号 / 另生成新 Key 再切换」——可用字数会留在孤立新账号上、还得换 Key。\n\n## 第 2 步：智能解读\n\n唯一招标文件入口；只在这步传一次，后续全程复用 `project_id`。\n\n```bash\npython3 scripts/zcm.py interpret /path/招标文件.pdf      # 仅本地路径\n```\n- 支持 `.pdf/.doc/.docx`，**≤ 50 MB**（超限脚本提前报错）。自动轮询，结束打印 `project_id`（**记下它**）+ **完整解读结果**。\n- **不支持云端链接**：传入 http(s) 链接会被脚本直接拒绝（本 skill 不做任何远程抓取）。用户给的是链接时，请他先自行下载到本地，再提供本地路径。\n- **直接把解读结果展示给用户**——含 8 维度 + 控标洞察：项目基本信息 / 合标项 / 废标项 / 评审项 / 关键要求 / 商务条款 / 报价要求 / 采购背景分析 / 控标洞察（`decision_analysis`）。挑重点讲（控标建议、废标红线、评分结构），别只丢 `project_id`。字段口径见 [api.md 附录 A](api.md)。\n- 展示后**主动问是否生成解读报告**（见[报告生成与命名](#报告生成与命名)）。\n\n## 第 3 步：抽取分包\n\n```bash\npython3 scripts/zcm.py packages <project_id>\n```\n- 把返回的 `packages` 呈现给用户挑选，收集选中的 `package_ids`。\n- `max_total_pages` 当前上限为 **500**；用户想指定页数时，以抽包结果里的上限为准。\n- `is_multi_package=false` → 跳过选包，第 4 步不带 `--package-ids`。\n\n## 第 4 步：生成成品标书\n\n**唯一消耗可用字数的步骤**，耗时较长。默认不下载本地文件，完成后输出短时下载链接：\n- 用户只要成品 → 不传 `-o`，脚本完成后打印文件名、大小、下载链接和有效期。\n- 用户明确要本地文件 → `-o <路径>`；想长期固定本地输出目录 → `login --output-dir <目录>`。\n\n```bash\npython3 scripts/zcm.py generate <project_id> --package-ids 11,12 --total-pages 80\n# 需要本地文件时：python3 scripts/zcm.py generate <project_id> -o 投标文件.docx\n# 非多包：python3 scripts/zcm.py generate <project_id>\n```\n- 自动轮询（默认超时 3600s，`--timeout` 可调）。完成后默认打印**成品下载链接**；如使用 `-o`，则打印**成品完整路径**+所在目录，**两项都告诉用户**。\n- 后端会按「选包 → 抽需求 → 生成大纲 → 生成正文 → 填充制式模板 → 导出」串行完成；页数规划会综合分包结构、技术/商务内容、表格和图表，`total_pages` 最高 500。\n- 制式表格/范本会尽量自动填充；无法确认的公司资料、日期、报价、签章等信息会保留为待填项，不要替用户编造。\n- **跟用户解释字数计费时分两层说**：解读 / 标书审查 / 生成三个入口提交前都会先看可用字数，可用字数不足会被拦住；但**真正消耗可用字数的是生成**。不要把“提交前门槛”说成“解读/标书审查也会消耗字数”。\n- ⏱ **生成可能耗时 >10 分钟**（实测 30 页约 15 分钟）。脚本本身轮询不会超时，但**前端/工具调用常有 ~10 分钟上限**会把命令杀掉——**注意：后端任务不受影响、仍在跑，切勿重新提交（会重复扣费）**。长任务推荐：`generate <pid> --no-wait` 拿 `job_id`，再用 `progress-stream <job_id>`（配合 Monitor 后台实时播报）续查到终态，最后 `download-url <job_id>` 取下载链接；用户明确要本地文件时再用 `result <job_id> -o <路径>.docx` 下载。万一命令被杀，用同一 `job_id` 续查即可，不要重发 generate。\n\n## 第 5 步：标书审查\n\n要**两样输入，都要让用户提供**：\n1. **招标文件**（`.pdf/.doc/.docx`）→ 经第 2 步解读产出 `project_id`；已解读则复用，不重传。\n2. **投标文件**：**一份或多份** `.pdf/.doc/.docx`，被审查对象（仅本地路径），**支持多选，最多 100 份**；**每份 ≤ 1024 MB**，**总大小不超过 2GB**。\n\n```bash\npython3 scripts/zcm.py compliance <project_id> /path/投标A.docx /path/投标B.docx\n# 暗标/电子标：加 --blind / --electronic\n# 敏感单位名称：加 --sibling-unit-names \"甲公司,乙设计院\"\n# 关闭语义审查：加 --no-semantic-review\n```\n- **不支持云端链接**：传链接会被脚本拒绝，请用户先自行下载到本地。\n- 审查选项与平台一致：暗标、电子投标、敏感单位名称、语义审查开关。关闭语义审查时只能表述为“规则类检查结果”，不能说成完整语义审查。\n- **直接把合规结果展示给用户**——含 `summary`（风险计数 + 一句话结论 + 语义审查状态）、`partial_summary`（阶段性/部分结果统计）、`scope_summary_lines`（检查范围）、`issues[]`（风险等级/招标依据/投标证据/修改建议）、`similarity_issues[]`（多文件雷同）、`manual_items[]`（人工核查清单）。优先讲高风险、结论与审查完整性。字段见 [api.md 附录 B](api.md)。\n- 若 `summary.conclusion_phase`、`summary.semantic_review` 或 `partial_summary` 表示语义审查处理中、部分完成或只完成规则检查，必须如实说明“当前为部分结果/语义审查未完整完成”，不要说成完整审查完成。\n- `risk_level` 实测为 `high`/`review`/`tip`，脚本输出与报告**已自动转中文**（高风险/待复核/提示），直接用中文呈现。\n- 未解读就调 → 409；投标文件缺失/类型不对 → 422（两份输入缺一不可）。\n- 展示后**主动问是否生成合规报告**（见下）。\n\n## 第 6 步：标书查重\n\n用于比较不同主体投标文件之间的雷同/相似风险。它不是标书审查，也不判断投标文件是否合规；结果只作为提交前内部自查线索，不构成围标、串标或违法违规的法律认定。\n\n发起前必须先问并得到用户确认：\n「请确认你合法持有并有权处理本次上传的全部投标文件/招标文件。确认后我再发起标书查重。」\n\n```bash\npython3 scripts/zcm.py duplicate /path/A公司投标.docx /path/B公司投标.docx --legal-possession-attested --report html\n# 可选关联招标文件，用于排除招标原文造成的共同表述：\npython3 scripts/zcm.py duplicate /path/A公司投标.docx /path/B公司投标.docx /path/C公司投标.docx \\\n  --tender-file /path/招标文件.pdf --legal-possession-attested --report html\n# 可选关闭维度：--no-image / --no-metadata / --no-semantic\n# 默认排除招标文件原文共同表述；如用户明确要求不排除，可加 --include-tender-baseline\n```\n\n- 投标文件必须 **2-3 份**，支持 `.doc/.docx/.pdf`；单份 ≤ 1024 MB，总大小不超过 2GB。\n- 招标文件可选 **1 份**，支持 `.doc/.docx/.pdf`，≤ 50 MB；用于降低招标原文共同表述对相似度的干扰。\n- **不支持云端链接**：传链接会被脚本拒绝，请用户先自行下载到本地。\n- 查重维度：连续文本/段落结构、图片相似、文档元数据、主体线索、招标基线。\n- 查重完成后展示 JSON 里的核心结论，并在用户需要或命令带 `--report html|docx|both` 时生成本地 HTML/Word 查重报告。必须输出报告绝对路径。\n- 查重报告只呈现文件对风险率、证据片段、图片/元数据/主体线索异常、修改建议；不要输出“已串标/确认围标”等定性结论。\n\n## 报告生成与命名\n\n解读/合规/查重结果可渲染成报告（HTML / Word），零依赖：\n\n```bash\n# 随命令一步出（默认 html；要 Word：--report both）\npython3 scripts/zcm.py interpret 招标文件.pdf --report html\npython3 scripts/zcm.py compliance <pid> 投标.docx --report html --name 招标文件.doc\npython3 scripts/zcm.py duplicate 投标A.docx 投标B.docx --legal-possession-attested --report html\n# 按 job_id 补出\npython3 scripts/zcm.py report --job <JOB_ID> --name 招标文件.pdf            # html\npython3 scripts/zcm.py report --job <JOB_ID> --name 招标文件.pdf --format both  # +Word\npython3 scripts/zcm.py report --job <JOB_ID> --service bid_duplicate --format html\n```\n- **默认只出 HTML**；用户明确要 Word 才 `docx`/`both`。\n- 命名：`招标文件名_智能解读` / `招标文件名_合规审查` / `标书查重_时间戳`。取名优先级：`--name` > 结果自动识别（`original_filename` / `project_info.项目名称` / 本地缓存）> `标签_时间戳`。\n  - `interpret` 自动用上传文件名；`generate` 自动用缓存名；**`compliance`/`report --job` 拿不到招标文件名时务必带 `--name`**，否则退化时间戳。`bid_duplicate` 不依赖招标文件名时默认使用时间戳命名。\n- 报告内容依赖后端按 [api.md 附录 A/B](api.md) 返回完整结果；合规 HTML 总览会展示检查范围、结论、语义审查状态和部分结果摘要；`/result` 只回句柄或字段空时，报告注明「无明细」而不报错。\n\n## 知识库取数（供本地待填项回填）\n\n当需要用企业资料辅助**本地**待填项回填时，不改走生成主流程，而是单独查询开放 API：\n\n```bash\npython3 scripts/zcm.py knowledge-base\npython3 scripts/zcm.py knowledge-base company_profile\npython3 scripts/zcm.py knowledge-base qualifications --page 1 --page-size 50\npython3 scripts/zcm.py knowledge-base performances --page 1 --page-size 50\npython3 scripts/zcm.py knowledge-base financial_reports --page 1 --page-size 50\n```\n\n- 返回按类别分组的结构化 JSON；分页类默认前 **50** 条。\n- **明确排除**：历史标书库、标书模板库。\n- 字段含义、可否直接回填、敏感字段边界见 [knowledge-fields.md](knowledge-fields.md)。\n\n## 关键约定\n\n- **必须输出完整路径**：解读报告 / 成品标书 / 合规报告生成后，把**每个文件的完整绝对路径**逐行告诉用户（脚本已用「已生成…/已下载…」打印绝对路径，照搬即可）——**不要只说落在某目录**。\n- **进度播报（两阶段，必须这样做才能实时）**：Bash 工具不流式传输 stderr，`--no-wait` + `progress-stream` + Monitor 是唯一能让用户看到实时进度的方式。长任务（interpret / generate / compliance / duplicate）统一走以下三步：\n  1. **提交**（同步，快）：加 `--no-wait`，Bash 运行后立即拿到 `job_id`。\n  2. **实时监听**：`Bash(run_in_background=True)` 运行 `python3 scripts/zcm.py progress-stream <job_id>`，再用 Monitor 订阅该进程 stdout——每行状态变更即时通知 Claude，Claude 实时转达给用户（如「5% 准备文档」→「生成内容 47% · 正在写正文 32/80 节」→「导出 Word」→「完成」）。Monitor 的 description 用正常任务名，**不带「重试」等临时标签**——即使是 worker_lost 后重新提交的 job，新 job 已正常运行，描述应反映当前状态而非历史原因。长时间无新百分比时，也要按心跳句转达“任务仍在运行，已用 X 分钟”，避免用户误以为卡死。\n  3. **取结果 + 生成报告 + 输出路径**：Monitor 收到 `[完成]` 后必须主动补齐后处理，三类任务各有对应步骤：\n     - `interpret`：`result <job_id>`（提取 project_id）→ `report --job <job_id> --format html`（生成解读报告）→ 输出报告全路径\n     - `generate`：`download-url <job_id>`（获取短时下载链接）→ 输出文件名、大小、有效期和下载链接；用户明确要本地文件时再 `result <job_id> -o <路径>.docx`\n     - `compliance`：`result <job_id>`（打合规摘要）→ `report --job <job_id> --format html`（生成合规报告）→ 输出报告全路径\n     - `duplicate`：`result <job_id>`（打查重 JSON 摘要）→ `report --job <job_id> --service bid_duplicate --format html`（生成查重报告）→ 输出报告全路径；如果用户明确不要报告，则只输出文件对风险率、证据片段与修改建议，不输出本地报告路径\n     \n     > `--no-wait` 跳过了同步模式的后处理，**AI 必须手动补**，否则报告文件不会生成，用户看不到路径。\n  > 仅在用户不需要看进度或调试时才用单命令前台运行（无 `--no-wait`）。`packages` / `me` 等快速命令无需两阶段。\n- **断点续查**：`job <job_id>` 查状态、`result <job_id> [-o file]` 取结果、`cancel <job_id>` 取消。\n- **幂等**：网络重试给提交命令加 `--idempotency-key <UUID>`，避免重复建任务/重复扣费。\n- **续接已有 project**：用户解读后直接说「帮我生成」，沿用 `project_id` 从第 3 步继续，不重传。\n- **错误处理**：脚本已把 401/402/404/422/429 转中文。常见——402 可用字数不足让用户购买会员或字数包；整层 404 多为开放 API 总开关未开，让管理员开启；429 退避重试。完整对照见 [api.md](api.md)。\n- **可用字数不足（402）**：先区分“提交前门槛”与“实际消耗”——开放 API / Skill 下，解读、生成、标书审查、标书查重提交前都要有可用字数；但真实消耗可用字数的是生成。脚本只打印**不含凭证参数的官网入口链接**，照原样转达即可；错误体里带 `bind_key` 的 `recharge_url`/`bind_url` 一律不转发（见第 1 步「凭证保护」）。\n\nFile v1.0.15:skill-card.md\n\n## Description:\n\nThis skill helps agents use 百炼®标书 to interpret tender documents, generate DOCX bid drafts, review bid compliance, and compare bid files for similarity risk.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chichihaixiaojian666](https://clawhub.ai/user/chichihaixiaojian666)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nProposal, procurement, and bidding teams use this skill to analyze tender requirements, generate editable bid documents, check bid-package compliance, and inspect legally held bid files for similarity signals before submission.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Tender and bid files can contain commercial, pricing, and personal information and are uploaded to biaoshu.zhiliaobiaoxun.com for processing.\n\nMitigation: Install only if cloud processing is acceptable, confirm user consent before upload, and use only files the user explicitly provides.\n\nRisk: The API key grants access to the user account and could be exposed through chat history or copied links.\n\nMitigation: Keep the key out of chat, have the user store it locally in config.json, and do not forward account links that embed credentials.\n\nRisk: Generated outputs and a small local filename-to-job cache may remain on disk, while service results are retained under the API-key account.\n\nMitigation: Review the service retention/account controls and clear local outputs or cache files when they are no longer needed.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chichihaixiaojian666/skills/biaoshu-writer-read)\n- [百炼®标书 Open API contract](references/api.md)\n- [Execution and reporting guide](references/usage.md)\n- [Knowledge base fields](references/knowledge-fields.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, files, shell commands, configuration, guidance]\n\n**Output Format:** [Chinese-language text summaries, JSON service results, HTML/Word reports, and DOCX bid documents.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a user-provided 百炼®标书 API key; uploaded files and generated results are handled by the cloud service under that account.]\n\n## Skill Version(s):\n\n1.0.15 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.14: 8 files, 50579 bytes\n\nFiles: references/api.md (16330b), references/knowledge-fields.md (3123b), references/usage.md (16501b), scripts/report.py (36782b), scripts/zcm.py (35140b), skill-card.md (2979b), SKILL.md (15262b), _meta.json (139b)\n\nFile v1.0.14:SKILL.md\n\n---\nname: biaoshu-writer-read\ndescription: 凭 App Key 调用百炼®标书开放 API，完成「招标文件智能解读 → 抽取分包 → 生成成品投标文件(.docx) → 可选合规审查」的端到端标书制作。当用户明确提供招标文件并希望生成投标文件/标书、对已生成标书做合规检查、或询问百炼®标书相关能力时使用。注意：招标/投标文件会上传到百炼®标书云端 API 处理，标书生成消耗账户积分；使用前请确认用户知悉。本 skill 是百炼®标书线上接口的轻客户端，不复刻其算法。\nallowed-tools: Read, Write, Bash\npermissions:\n  network:\n    allow:\n      - biaoshu.zhiliaobiaoxun.com\n    deny:\n      - all-other-domains\n  filesystem:\n    read:\n      - 用户明确提供的招标文件\n      - 用户明确提供的投标文件\n      - 本 skill 自身脚本与 references 文档\n      - skill 内 config.json\n    write:\n      - biaoshu-bailian-files/\n      - skill 内 config.json\n    deny:\n      - 用户未明确授权的其他本地路径\n  environment:\n    allow:\n      - ZCM_HOME\n      - ZCM_OUTPUT_DIR\n    deny:\n      - all-other-environment-variables\n  billing:\n    - 标书生成会消耗 App Key 所属账户积分\n  credentials:\n    input:\n      - App Key 仅由用户本人写入 skill 内 config.json\n    deny:\n      - 在对话中索取或回显 App Key\n  data-handling:\n    deny:\n      - 附件地址外传\n      - 文件流外传\n      - base64 外传\n---\n\n# 招标文件解读工具\n\n> Language policy: Follow the user's language for all explanations, summaries, prompts, and ordinary replies. If the user language is unclear, ask or mirror the latest user language. Platform menu names, source procurement terms, risk labels, and generated report artifacts may remain in Simplified Chinese (zh-CN) when they reflect the upstream platform or report template.\n\n## MCP Permission Declaration\n\nThis skill declares the minimum capabilities below and should be reviewed against exactly this boundary:\n- `Read`: only user-provided tender/bid files, this skill's own scripts/docs, and local `config.json`.\n- `Write`: only generated outputs in `biaoshu-bailian-files/` and local `config.json`.\n- `Network`: only `https://biaoshu.zhiliaobiaoxun.com` for the 百炼®标书开放 API.\n- `Environment`: only optional `ZCM_HOME` and `ZCM_OUTPUT_DIR` for local storage paths.\n\nThis skill does not request shell-wide wildcard privileges beyond running its bundled local client `scripts/zcm.py`, does not access arbitrary domains, and does not read unrelated local files or environment variables.\n\nFor avoidance of doubt:\n- No arbitrary web browsing.\n- No access to unrelated local folders.\n- No reading of unrelated environment variables.\n- No credential collection inside chat.\n- No attachment export, file stream export, or base64 export to third parties.\n\n\n> 📌 本文档同时是 AI 助手的执行手册：文末「🚫 对用户输出的第一铁律」与「⚠️ 权限与数据说明」优先级最高、覆盖全文，任何面向用户的输出都必须先满足其要求；一切任务命令由助手后台代跑（后台操作手册见 [references/usage.md](references/usage.md)）。\n\n## 快速开始：获取 App Key\n\n用百炼®标书写作助手出解读/标书/合规，只需一个 App Key——一个手机号就能开通，新用户注册即送积分。三步搞定（向用户转述时**逐步骤完整给出**，链接必须原样显示完整 URL，不要写成「百炼®标书平台」之类的链接文字）：\n\n1. 打开官网 https://biaoshu.zhiliaobiaoxun.com/?ch=s108 ，用手机号 + 短信验证码注册并登录（新用户赠积分）；\n2. 登录后点**左侧菜单『Skill 接入 → 获取 APP Key』**，在弹出面板中**查看/复制 App Key**（首次打开自动生成，形如 `bk_live_xxxxx`；重置后旧 Key 立即失效）；\n3. 在本 skill 目录下创建凭证文件 `config.json`，写入一行 `{\"app_key\": \"bk_live_xxxxx\"}`（把 `bk_live_xxxxx` 换成自己的 Key）。**App Key 是账户的完整凭证，请用户本人写入，不要在对话里索取、让用户粘贴或复述 Key。**\n\n无 Key 时各功能会打印上述获取指引而非崩溃。更多配置细节见 [references/usage.md](references/usage.md)（仅供助手后台使用）。\n\n## 三大功能\n\n### 🔍 智能解读\n- **输入**：招标文件（`.pdf` / `.doc` / `.docx`，**≤ 50 MB**），仅限本地文件路径（云端文件请让用户先自行下载到本地）。\n- **输出**：8 维度结构化解读——项目信息 / 合标项 / 废标红线 / 评分标准 / 关键要求 / 商务条款 / 报价要求 / 采购背景；外加**控标洞察**（参与建议、控标信号、行动建议）。可导出解读报告（HTML / Word）。\n- **使用示例**（用户可以这样说）：\n  - 「帮我解读这份招标文件 `/Users/me/某采购项目招标文件.pdf`」\n  - 「看看这个标能不能投？有哪些废标红线？文件我已经放在 `/Users/me/下载/某项目招标文件.docx`」\n  - 「分析一下这份招标文件的评分标准和控标风险，顺便出一份解读报告」\n  - 「这个采购项目值不值得投？我们资格够不够？」（把文件放本地、给我路径即可，我来定制分析）\n  - 用户得到：「参与建议：谨慎参与 · 控标风险：高 · 废标红线 30 条 · 技术主观分占 45%」等解读要点 + 报告绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_智能解读.html`）（后续制作/审查自动复用该项目，无需重传）。\n\n![智能解读报告示例](https://raw.githubusercontent.com/chichihaixiaojian666/biaoshu-skill/main/report-interpret.png)\n\n### 📝 标书制作\n- **输入**：已解读项目 + 选定分包（多包时）；可指定目标页数，`total_pages` 最高 **500**。\n- **输出**：成品投标文件 `.docx`——按招标文件名自动命名，自动完成选包、抽需求、生成大纲、生成正文、填充制式模板与导出，含目录、章节与「待填项」定位书签。（此步消耗积分。）\n- **使用示例**（用户可以这样说）：\n  - 「就用刚才解读的项目，帮我生成投标文件」\n  - 「选 01 包，生成一份 80 页左右的标书，存到桌面」\n  - 「这个项目直接出标书，页数按系统建议来」\n  - 「时间紧，先给我出个标书框架，页数按系统建议」\n  - 用户得到：多包项目会先看到分包清单供挑选，然后拿到成品绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_投标文件.docx`），可直接编辑填充。平台会结合分包结构、技术/商务内容、表格和图表规划页数；制式表格/范本会尽量自动填充，无法确认的信息保留为待填项。（此步消耗积分，生成耗时可能超过 10 分钟，期间实时播报进度。）\n\n### ✅ 合规审查\n- **输入**：招标文件（已解读）+ **一份或多份**投标文件（`.doc` / `.docx`，每份 **≤ 1024 MB**）。\n- **输出**：分级风险问题清单（高风险 / 待复核 / 提示，每条带招标依据、投标证据、修改建议）+ 一句话结论 + 检查范围 + 语义审查状态/部分结果提示 + 多文件雷同检测 + 人工核查清单。可导出合规报告。\n- **使用示例**（用户可以这样说，招标文件需已解读）：\n  - 「审查一下这份投标文件 `/Users/me/某项目_投标文件.docx` 有没有废标风险」\n  - 「把 `A公司投标.docx` 和 `B公司投标.docx` 一起查一遍，看看有没有雷同和风险」\n  - 「这是暗标，帮我查格式和红线问题，出一份合规报告」\n  - 「投之前帮我把把关，别废标」（把投标文件放本地、给我路径即可）\n  - 用户得到：「高风险 0 · 待复核 39 · 提示 25」+ 一句话结论、检查范围、语义审查是否完整、整改建议 + 报告绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_合规审查.html`）（多份文件时含雷同检测结果；部分结果不得说成完整审查）。\n\n![合规审查报告示例](https://raw.githubusercontent.com/chichihaixiaojian666/biaoshu-skill/main/report-compliance.png)\n\n> 报告采用 editorial 版式（侧栏目录、风险统计、卡片化问题与证据），HTML 可离线打开、可打印。\n\n智能解读、标书生成、合规审查的结果均可同步在百炼®标书平台查看：<https://biaoshu.zhiliaobiaoxun.com/>\n\n> 百炼®标书是面向投标场景的**投标全流程工作台**。网页工作台之外，也支持通过**开放 API 与 Skill 接入**完成解读、抽包、生成与合规审查。\n>\n> **积分说明要分两层讲清楚**：解读、抽包、合规审查**本身不扣积分**，真正消耗积分的是标书生成；但通过开放 API / Skill 调用时，解读、生成、合规三个入口在提交前都要求**余额大于 0**，余额不足会先被拦截。\n\n## 🪶 轻咨询也接得住 & 顺势衔接下一步\n\n- **只给片段、问通用问题也接得住**：用户只粘了一段招标公告/采购需求，或问「投标要注意什么 / 暗标有什么要求 / 技术方案怎么写 / 常见废标原因有哪些 / 控标怎么识别」时，先给一段通用要点应答，**再按第一铁律说清「怎么给完整文件」**（上传文件，或给本地绝对路径并举个示例；本 skill 只读本地文件，云端文件请让用户先自行下载到本地），引导补上文件后做定制解读/审查。\n- **一步做完，顺势提示下一步**（用户不接就不再追）：解读完 → 问「要不要接着基于它生成投标文件？」；标书生成完 → 问「要不要再做一遍合规审查、排查废标风险？」；合规审查完 → 问「要不要按整改清单改完后复审一次？」。\n\n## 🚫 对用户输出的第一铁律（优先级最高，覆盖本文档其余所有内容）\n\n- 本 skill 的一切命令（`python3 …`、`zcm.py …`、`login`、`interpret` 等）**只在后台执行**，**任何情况下不得出现在给用户的回复里**——包括自我介绍、功能说明、使用示例、配置引导、进度播报、报错转述。\n- 用户只需要做两件事：**提供文件、说需求**；App Key 由用户按「快速开始」自行写入本地凭证文件（Key 不进对话）。其余任务命令全部由你（助手）代跑。\n- 用户问「怎么用 / 给我些示例」时，**只展示上方各功能「使用示例」里的场景话术**（用户怎么说 → 得到什么），并告诉他「把文件给我、直接说需求即可」。[references/usage.md](references/usage.md) 里的命令是你的后台操作手册，**不是可以展示给用户的内容**。\n- **安装成功后的介绍、或用户问「这个 skill 能干什么 / 怎么拿 App Key」时，必须完整传达两块信息；可按用户当前语言转述，涉及平台菜单、风险等级、报告标题等专有术语可保留简体中文原词**：\n  ① **怎么获取 App Key**——「快速开始：获取 App Key」的三步流程完整给出，**尤其第 3 步的凭证配置方式**（用户在 skill 目录下自建 `config.json`、写入 `{\"app_key\": \"bk_live_xxxxx\"}`、Key 不进对话）必须说清；\n  ② **有什么功能**——「三大功能」小节，**尤其各功能「使用示例」的场景话术和「用户得到」**必须完整出现。\n  两块都要**完整传达关键信息与示例**，可以按用户当前语言转述，不必逐字照抄；示例不可省略。\n- **让用户提供文件时，必须说清「怎么给」**：无论是要招标文件还是投标文件，都不能只说「发给我」。要明确告诉用户两种方式任选——**① 直接上传文件；② 给出本地文件路径**（绝对路径，形如 `/Users/你的用户名/Downloads/某采购项目招标文件.pdf`），并**举一个具体路径示例**（本 skill 只读本地文件，云端文件请让用户先自行下载到本地）。别让用户猜格式。\n- **产物必须逐个给绝对全路径**：解读报告 / 成品标书 / 合规报告每次产出后，把**每个文件的完整绝对路径**（形如 `/Users/you/biaoshu-bailian-files/某项目_智能解读.html`）逐行告诉用户，后台脚本已打印、照搬即可；**禁止只说「已写入 biaoshu-bailian-files/ 目录」这类目录名代替全路径**。\n- **凭证保护**：不得在回复中复述/输出 App Key，也不得转发任何**携带 Key 的链接**（如平台 402 返回的 `?bind_key=` 充值/绑定链接——会经会话记录、截图、链接预览泄露）；涉及充值/账户操作只给不含参数的官网普通链接。\n\n## ⚠️ 权限与数据说明（首次使用前告知用户）\n\n- **文件外发**：用户提供的招标/投标文件会**上传至百炼®标书服务器**（`biaoshu.zhiliaobiaoxun.com`）处理。此类文件常含商业、报价与个人信息，上传前须确认用户知悉并同意。\n- **网络访问**：仅访问上述百炼®标书域名（API 调用），无其他外联；不抓取任何云端链接。\n- **本地读写**：读取用户指定的文件；产物（标书/报告）写入 `biaoshu-bailian-files/`；凭证存 skill 内 `config.json`（权限 600，logout 可删，保存后把文件位置告知用户）。\n- **数据留存**：上传的文件与产出结果以 App Key 所属账户身份**留存在百炼®标书服务器**——任务结果与成品 .docx 约 7 天后过期，历史数据可登录官网查看管理。\n- **计费**：标书生成消耗 App Key 所属账户的积分，提交前脚本会预检余额。\n- **环境变量**：仅读取上方 frontmatter 声明的 `ZCM_*` 可选配置项，不读取其他任何环境变量。\n- **不采集**：本 skill 不采集设备信息、不代注册账号、不收集手机号/验证码。\n\n## 进一步\n\n凭 **App Key** 调用百炼®标书开放 API，完成投标全流程。所有任务走「**提交 → 自动轮询 → 取结果**」统一异步模型，以 App Key 所属用户身份执行（复用其知识库与积分钱包）。底层由零依赖 Python 客户端封装鉴权、轮询与友好错误码（具体命令见 [references/usage.md](references/usage.md)）。\n\n- **执行任务前先读** [references/usage.md](references/usage.md)：各步参数、命名规则、计费与凭证规则、报告/边界情形、断点续查、幂等、错误处理。\n- **输出铁律**（除非用户明确说不要）：运行脚本时进度照常显示、不重定向吞掉；解读/标书/合规结果文件的**绝对全路径**必须打印给用户。详见 usage.md 顶部「⚠️ 输出约定」。\n- **链接铁律**：凡向用户展示百炼®标书平台地址（注册、查看结果、充值、绑定等），一律**原样输出完整 URL**（如 https://biaoshu.zhiliaobiaoxun.com/ ），不要用「百炼®标书平台」「官网」这类超链接文字代替或省略。\n- **接口契约**（8 端点、错误码、解读/合规返回字段附录 A·B）→ 见 [references/api.md](references/api.md)。\n\nFile v1.0.14:_meta.json\n\n{\n  \"ownerId\": \"kn7dz1pzdygwz7z5fwfmrvhrnn84cs8q\",\n  \"slug\": \"biaoshu-writer-read\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1787577412516\n}\n\nFile v1.0.14:references/api.md\n\n# 百炼®标书开放 API 契约参考\n\n> **契约兼容标注（skill biaoshu-bailian 2.2.1）**\n> - 适配后端 API：`/api/open/v1`\n> - 契约核对日期：2026-08-10（`max_total_pages` 同步到 500；余额门槛/扣积分说明细化）（后端字段/枚举变化时更新此处并 bump 版本）\n> - 关键枚举快照：`risk_level ∈ {high, review, tip}` · `result_type ∈ {suspected, detected}` · `priority ∈ {high, medium, low}`\n> - 渲染兼容策略：`report.py` 同时兼容文档值（高/中/低）与实测值、证据多形态、缺字段不崩——契约小幅漂移只需 PATCH，不触发 MAJOR。\n\n> ⚠️ **数据外发与知情同意**：本文档所有接口均为百炼®标书云端服务——上传的招标/投标文件**常含商业、报价与个人信息**，将发送至 `biaoshu.zhiliaobiaoxun.com` 处理并消耗账户积分；**上传的文件与产出的结果会留存在百炼®标书服务器**（任务结果与成品 .docx 约 7 天后过期，数据以 App Key 所属账户身份存于平台、可登录官网查看管理）。**首次上传前必须确认用户知悉并同意**；完整披露见 SKILL.md「⚠️ 权限与数据说明」。\n\n`scripts/zcm.py` 已封装下列全部端点；本文档供需要直接发请求、排查错误或理解返回结构时查阅。\n所有契约均经后端源码 + 本地实跑核实。\n\n## 目录\n- [鉴权与环境](#鉴权与环境)\n- [核心模型与约定](#核心模型与约定)\n- [9 个端点详情](#9-个端点详情)\n- [错误码速查](#错误码速查)\n- [注意事项](#注意事项)\n\n---\n\n## 鉴权与环境\n\n- **Base URL（生产）**：`https://biaoshu.zhiliaobiaoxun.com/api/open/v1`\n- 每个请求都带鉴权头：\n\n| Header | 值 | 说明 |\n|---|---|---|\n| `X-App-Key` | App Key | 必填，形如 `bk_live_xxxxx` |\n| `Idempotency-Key` | UUID（可选） | 相同 key 24h 内返回同一 `job_id`，不重复扣费 |\n\n- 服务开关：开放 API 受超级管理员『系统设置』总开关控制，**关闭时整层返回 404**。\n- 凭证获取：官网 <https://biaoshu.zhiliaobiaoxun.com/> 注册 → 左侧菜单『Skill 接入 → 获取 APP Key』，面板首次打开自动生成 Key。\n  App Key 可随时在『Skill 接入 → 获取 APP Key』面板查看；重置后旧 Key 立即失效。\n\n## 核心模型与约定\n\n- **project_id**：统一句柄，由「智能解读」产出，是**唯一的招标文件上传入口**。后续抽包 / 生成 / 合规复用同一 project，不重复解读、不重复计费。\n- **job_id**：每个异步任务的对外句柄。提交类接口立即返回 `{ \"job_id\": \"...\" }`。\n- **任务状态**：`queued` → `running` → `succeeded` / `failed` / `canceled`。\n- **上传方式**：本 skill 一律 `multipart/form-data` 直传本地文件（后端另有 `file_url` 入参，**本 skill 不使用**，也不做任何远程抓取）。\n- **限流**：每 App Key 默认 60 req/min、同时进行任务 ≤ 3；超限 429。\n- **统一错误体**：`{ \"error\": { \"code\": \"...\", \"message\": \"...\" } }`\n- **计费**：实际扣积分只发生在 ③生成（正文逐条 + 导出）；①解读、②抽包、④合规审查本身不扣积分。\n- **余额门槛**：通过开放 API / Skill 提交时，①解读、③生成、④合规审查都要求 `wallet_balance >= 1` 才能发起；②抽包与各类查询接口不受该门槛限制。\n- **结果时效**：任务结果与 .docx 默认保留约 7 天，过期取结果返回 404 `result_expired`。⚠️ 这意味着**结果在此期间留存于百炼®标书服务器**（第三方存储）；上传文件与历史数据以账户身份存于平台，用户可登录官网查看管理——向用户交代结果时请一并说明。\n\n## 9 个端点详情\n\n### `GET /me` — 连通性与余额\n```json\n{\"wallet_balance\":1397084,\n \"limits\":{\"rate_per_min\":60,\"max_concurrent_jobs\":3,\"running_jobs\":0}}\n```\n\n### `POST /interpretations` — 智能解读（唯一上传入口）\n- 入参：multipart 字段 `file`（.pdf/.doc/.docx）。\n- 返回：`{\"job_id\":\"...\"}`。\n- 结果（`/jobs/{id}/result`）：`{\"job_id\",\"service\":\"interpretation\",\"result\":{...}}`。\n  `result` 含句柄 `project_id`/`result_id`/`status` + **8 个内容维度 + 控标洞察**，\n  完整字段见 [附录 A](#附录-a智能解读结果字段)。**记下 `result.project_id`**。\n\n### `POST /bid-documents/{project_id}/packages` — 抽取分包\n- 无 body。返回 `{\"job_id\":\"...\"}`。\n- 结果：\n```json\n{\"service\":\"bid_document\",\n \"result\":{\"packages\":[...],\"is_multi_package\":true,\"package_count\":2,\n           \"suggested_pages\":50,\"max_total_pages\":500}}\n```\n- 把 `packages` 给用户挑选，收集选中的 `package_ids`。\n- `is_multi_package=false` 时可跳过选包，generate 不带 `package_ids`。\n\n### `POST /bid-documents/{project_id}/generate` — 生成成品标书\n- 入参 JSON：`{\"package_ids\":[11,12],\"total_pages\":80}`（非多包可省略 body 或传 `{}`）。\n- 返回 `{\"job_id\":\"...\"}`。内部串行「选包 → 抽需求 → 大纲 → 逐条正文 → 制式模板填充 → 导出」，耗时长。\n- 进度阶段加权：`select / requirements / outline / content / templates / export`。\n- **结果是流式 .docx 二进制**（非 JSON），响应头 `Content-Disposition: attachment; filename=\"bid_<job_id>.docx\"`。\n\n### `POST /projects/{project_id}/compliance-reviews` — 合规审查\n- 入参：multipart `bid_files`（一或多份 .doc/.docx）+ 表单字段 `is_blind_bid` / `is_electronic_bid`。\n- project 必须已完成解读，否则 409。返回 `{\"job_id\":\"...\"}`。\n- 结果（`/jobs/{id}/result`）：`result.compliance` 含 `summary`/`issues`/`similarity_issues`/`manual_items` 等，\n  完整字段见 [附录 B](#附录-b合规审查结果字段)。\n\n### `GET /jobs/{job_id}` — 查任务状态（轮询用）\n```json\n{\"job_id\":\"...\",\"service\":\"interpretation|bid_document|compliance\",\n \"phase\":null,\"status\":\"running\",\n \"progress\":{\"percent\":20,\"stage\":\"interpreting\",\"stage_label\":\"智能解读中\",\"updated_at\":\"...\"},\n \"error\":null,\"created_at\":\"...\",\"updated_at\":\"...\"}\n```\n\n### `GET /jobs/{job_id}/result` — 取结果\n- 解读/合规返回 JSON；标书制作返回 .docx 二进制流。\n\n### `POST /jobs/{job_id}/cancel` — 取消\n- 尽力而为；已过的扣费点不退款。\n\n### `GET /knowledge-base` — 开放知识库分类总览\n\n- 返回开放给 skill 的资料库分类与数据量。\n- **明确排除**：历史标书库、标书模板库。\n\n### `GET /knowledge-base/{category}` — 按类别查询知识库\n\n- `category` 当前支持：\n  - `company_profile`\n  - `qualifications`\n  - `performances`\n  - `financial_reports`\n- 返回按类别分组的结构化 JSON。\n- 分页类默认 `page=1`、`page_size=50`，最大也只允许 `50`。\n- 只返回白名单字段：\n  - `company_profile`：公司名称、企业类型、营业期限、统一社会信用编码、注册地址、办公地址、法人名称、职务、法人联系方式\n  - `qualifications`：资质名称、证书编号、有效期限\n  - `performances`：合同名称、客户名称、合同金额、完成时间\n  - `financial_reports`：当前仅开放分类入口，不开放具体字段\n- **不返回任何附件信息**：包括但不限于访问地址、文件流、base64、附件存在标记。\n- 字段说明与回填边界由 skill 侧 [knowledge-fields.md](knowledge-fields.md) 补充约束。\n\n### 402 insufficient_balance 错误体新增字段\n\n`phone_bound`（bool）；另有 `bind_url` / `recharge_url`（**均携带明文 `bind_key=<app_key>`**）。\n🔒 **本 skill 不使用也不转发这些带 Key 的链接**（防凭证经会话记录/截图/链接预览泄露）——积分不足一律引导用户自行登录官网充值（不含参数的普通链接）。\n\n### 余额门槛 vs 实际扣积分（提交时 402）\n\n积分余额 < 1 时，`POST /interpretations`、`POST /bid-documents/{pid}/generate`、\n`POST /projects/{pid}/compliance-reviews` 三个提交入口都会在**提交时**直接返回 402\n`insufficient_balance`（错误体含上述引导字段）；充值后方可操作。\n\n这和“是否实际扣积分”是两件事：\n- **余额门槛**：解读 / 生成 / 合规三个入口都要求余额大于 0 才能提交。\n- **实际扣积分**：仍只有生成会真实消耗积分；解读、抽包、合规审查本身不扣积分。\n- **不受门槛限制**：抽包（packages）、`GET /me`、任务查询、结果获取等查询类接口不受该门槛限制。\n\nskill 侧提交前也会先调 `GET /me` 做预检，优先把这层差异解释给用户，避免把“余额不足拦截”误说成“这一步会扣积分”。\n\n## 错误码速查\n\n| HTTP | code | 含义与处理 |\n|---|---|---|\n| 401 | `missing_credentials` / `invalid_credentials` | 缺 `X-App-Key` Header / App Key 不对 → 检查凭证或重置 Key |\n| 403 | `account_disabled` | 凭证或用户被停用 |\n| 402 | `insufficient_points` | 余额不足，不扣费不产出 → 充值 |\n| 404 | `not_found` | 多为开放 API 总开关未开（整层 404）→ 联系管理员开启 |\n| 404 | `job_not_found` / `project_not_found` / `result_expired` | 句柄不存在/非本人/结果过期（7 天 TTL） |\n| 409 | `invalid_job_state` | 任务未成功就取结果 / 未解读就生成 / 未抽包就 generate |\n| 422 | `validation_error` | 文件缺失/类型不支持 / 缺 package_ids |\n| 429 | `rate_limited` / `too_many_concurrent_jobs` | 触发限流 → 退避重试（看 `Retry-After`）或减并发 |\n| 500 | `internal_error` | 服务端异常 → 重试或反馈 |\n\n任务级失败时 `GET /jobs/{id}` 的 `error.code`：`interpretation_failed` / `generation_failed` / `compliance_failed` / `insufficient_points` / `canceled` / `worker_lost`（服务重启导致，需重新提交）。\n\n## 注意事项\n\n- **唯一上传入口**：招标文件只能经 `/interpretations` 上传并产出 `project_id`；制作与合规都复用它，**不要重复上传同一招标文件**。\n- **幂等**：网络重试带相同 `Idempotency-Key`（UUID），避免重复建任务/重复扣费。\n- **计费**：扣 App Key 所属用户积分，与网页同价；生成前用 `GET /me` 看 `wallet_balance` 预判。\n- **内容质量依赖知识库**：正文质量取决于 owner 租户的公司资料库；资料缺失会致内容退化（不硬失败）。\n- **知识库查询接口**：skill 可独立查询企业信息 / 资质 / 业绩 / 财务报告，再由本地模型做待填项匹配与回填；历史标书库、标书模板库不在本接口开放范围内。\n- **知识库安全边界**：只能按 App Key 所属租户取数，不接受外部 `tenant_id` / `user_id`；接口有单独限流与访问审计日志。\n- **来源标记**：经开放 API 产生的数据标记为 **skill** 来源（网页端为「平台」），便于在网页历史/消费流水里区分。\n\n> 字段口径与根目录《百炼®标书Skill服务.md》附录 A/B 一致；`scripts/report.py` 据此渲染报告。\n\n---\n\n## 附录 A：智能解读结果字段\n\n`GET /jobs/{id}/result` 的 `result`（`service=interpretation`）：\n\n```json\n{\n  \"project_id\": \"123\", \"result_id\": 7, \"status\": \"completed\",\n  \"project_info\": [...], \"compliance\": [...], \"disqualification\": [...],\n  \"evaluation\": [...], \"key_requirements\": [...], \"business_terms\": [...],\n  \"pricing\": [...], \"procurement_analysis\": {...}, \"decision_analysis\": {...}\n}\n```\n\n- **project_info[]** 项目基本信息：`field_name` / `field_value` / `source_page` / `source_text`。\n- **compliance[]** 合标项（参与资格）：`category` / `requirement_text` / `source_page` / `source_text` / `is_structured`。\n- **disqualification[]** 废标项（红线）：在 compliance 字段基础上多 `type`（资格废标/响应性废标/合规废标）。\n- **evaluation[]** 评审项：`component` / `item` / `factor` / `score`(满分) / `weight` / `source_page` / `source_text` / `is_structured`。\n- **key_requirements[]** 关键要求：`category` / `requirement_text` / `source_page` / `source_text`。\n- **business_terms[]** 商务条款：`term_type` / `term_content` / `source_page` / `source_text`。\n- **pricing[]** 报价要求：`component` / `requirement_text` / `source_page` / `source_text`。\n- **procurement_analysis{}** 采购背景：`analysis_summary` / `procurement_background` / `procurement_objectives` / `procurement_scope_items[]` / `key_constraints[]` / `key_success_metrics[]`(每条 `{name,detail}`，关键成功指标)（缺失字段可为 null/空）。\n- **decision_analysis{}** 控标洞察：\n  - 顶层：`participation_recommendation`（建议/谨慎/不建议参与）、`control_risk_level`（高/中/低）、`confidence_level`、`summary[]`、`signals[]`、`evidence_items[]`、`actions[]`、`advantaged_supplier_profile[]`、`our_gap_assessment[]`。\n  - `signals[]`：`id` / `dimension`（qualification_barrier/technical_targeting/business_barrier/scoring_bias/acceptance_and_performance_risk/pricing_competitiveness_constraint）/ `title` / `risk_level` / `description` / `reasoning` / `evidence_item_ids[]` / `our_stance`（advantage/risk/neutral/unknown）/ `our_stance_reason`。\n  - `evidence_items[]`：`id` / `source_category` / `source_page` / `source_text_excerpt` / `why_it_matters`。\n  - `actions[]`：`priority`（high/medium/low）/ `action_type` / `recommendation` / `related_signal_ids[]`。\n\n---\n\n## 附录 B：合规审查结果字段\n\n`GET /jobs/{id}/result` 的 `result.compliance`（`service=compliance`）：\n\n```json\n{\n  \"run_id\": 42, \"status\": \"completed\", \"mode\": \"standalone\",\n  \"document_id\": 123, \"interpretation_result_id\": 7,\n  \"summary\": {...}, \"partial_summary\": {...}, \"bid_files\": [...],\n  \"issues\": [...], \"similarity_issues\": [...], \"manual_items\": [...],\n  \"scope_summary_lines\": [...], \"error_message\": null\n}\n```\n\n- **summary{}** 汇总：`high_count` / `review_count` / `tip_count` / `similarity_count` / `manual_unchecked_count` / `conclusion`(一句话结论) / `conclusion_phase`(full/rules_only/semantic_partial) / `overview_ready` / `semantic_review.state` / `semantic_review.message_zh`。`semantic_review` 用于提示语义审查是否完整完成；不是 full/complete 时，对用户不得表述为完整审查。\n- **partial_summary{}** 阶段性/部分结果摘要：字段可能随引擎变化，常见为阶段性风险计数、阶段状态、说明文案。存在该字段时，HTML 报告总览区应展示，作为“当前结果完整性”的补充。\n- **bid_files[]** 被查文件：`id` / `filename` / `content_hash` / `metadata` / `created_at`。\n- **issues[]** 合规问题（核心）：`id` / `bid_file_id` / `bid_filename` / `issue_type`(如 `hard_field_presence` 等) / `risk_level` / `result_type` / `title` / `description` / `tender_evidence` / `bid_evidence` / `suggestion` / `confidence`(0-1) / `status` / `user_note`。\n  > ⚠️ **实测枚举值**：`risk_level` = **`high`/`review`/`tip`**；`result_type` = **`suspected`/`detected`**。`summary.high_count/review_count/tip_count` 按 `risk_level` 计数。\n  > 证据多形态（因引擎而异）：语义类 `tender_evidence/bid_evidence` 主键 **`excerpt`**（另含 `chunk_id`/`section_path`/`section_title`）；硬字段类 `{field,expected_text}`；规则未命中 `{source}`。`report.py` 的 `_ev` 已按 `excerpt > text > field/expected_text > source` 兼容。\n- **similarity_issues[]** 多文件雷同（仅多份投标文件时有）：`file_a_id`/`file_b_id` / `file_a_name`/`file_b_name` / `similarity_type`(text_overlap/structure_overlap) / `risk_level` / `title` / `evidence_a{text,page}`/`evidence_b{...}` / `similarity_score`(0-1) / `suggestion` / `status`。\n- **manual_items[]** 人工核查清单：`category` / `title`(简短标题) / `description` / `source` / `is_checked` / `note`(备注) / `checked_by` / `checked_at`。\n- **scope_summary_lines[]** 检查范围摘要（适合报告开头展示）。\n\n报告推荐布局：总览（风险摘要、检查范围、语义审查状态、部分结果摘要） → 高风险问题(issues 高) → 待人工复核(result_type=semantic) → 格式提示(低) → 多文件相似度 → 人工核查清单。`scripts/report.py` 已实现此布局。\n\nFile v1.0.14:references/knowledge-fields.md\n\n# 知识库字段说明\n\n本文件供助手在**本地待填项回填**时查阅。推荐流程：\n1. 先用 `python3 scripts/zcm.py knowledge-base` 查看可用分类；\n2. 再按需查询某一类，例如 `python3 scripts/zcm.py knowledge-base qualifications`；\n3. 本地模型根据下列字段含义匹配待填项；\n4. **没有把握的字段宁可保留待填项，不要臆造。**\n\n> 开放范围仅含：`company_profile`、`qualifications`、`performances`、`financial_reports`。\n> 明确不含：历史标书库、标书模板库。\n> 明确不返回：任何附件地址、文件流、base64、附件布尔标记。\n\n## 一、company_profile（企业信息）\n\n| field_key | 字段名 | 说明 | 是否可直接回填 |\n|---|---|---|---|\n| `company_name` | 公司名称 | 企业全称/投标人名称 | 是 |\n| `enterprise_type` | 企业类型 | 单位性质/企业性质 | 是 |\n| `business_term` | 营业期限 | 营业执照中的经营期限 | 是 |\n| `credit_code` | 统一社会信用编码 | 企业统一社会信用代码 | 是 |\n| `registered_address` | 注册地址 | 营业执照注册地址 | 是 |\n| `office_address` | 办公地址 | 企业办公/联系地址 | 是 |\n| `legal_representative` | 法人名称 | 法定代表人姓名 | 是 |\n| `legal_rep_position` | 职务 | 法定代表人职务 | 是 |\n| `legal_rep_phone` | 法人联系方式 | 法定代表人联系电话 | 仅模板明确要求时回填 |\n\n## 二、qualifications（企业资质）\n\n| field_key | 字段名 | 说明 | 是否可直接回填 |\n|---|---|---|---|\n| `qualification_name` | 资质名称 | 资质/证书名称 | 是 |\n| `certificate_number` | 证书编号 | 资质证书编号 | 是 |\n| `valid_period` | 有效期限 | 统一按“起始日期 至 截止日期/长期”返回 | 是 |\n\n> 资质是**多条记录**。回填前先判断模板要的是哪类资质，再选对应记录，不要默认取第一条。\n\n## 三、performances（企业业绩）\n\n| field_key | 字段名 | 说明 | 是否可直接回填 |\n|---|---|---|---|\n| `contract_name` | 合同名称 | 业绩对应的合同或项目名称 | 是 |\n| `client_name` | 客户名称 | 甲方/客户名称 | 是 |\n| `contract_amount` | 合同金额 | 合同金额原值 | 是 |\n| `completion_date` | 完成时间 | 竣工/验收/完成日期 | 是 |\n\n> 业绩同样是**多条记录**。需要按项目名称、客户、金额或时间要求筛选最匹配的一条或几条，不能把多条业绩混成一条。\n\n## 四、financial_reports（财务报告）\n\n当前仅开放**分类入口**，暂不开放具体字段。\n\n这意味着：\n- 可以知道当前租户存在该类资料；\n- 不能通过本接口取出财务报告的正文、附件或明细字段；\n- 本地模型不要自行假设或补写财务数据。\n\n## 使用边界\n\n- 没值：保留待填项，不要自行生成。\n- 多条记录：资质、业绩都要先选记录，再回填字段。\n- 附件资料：本接口不返回任何附件相关信息，不能据此推断附件内容。\n- 租户隔离：只能查询当前 App Key 所属租户的数据，不能跨租户取数。\n\nFile v1.0.14:references/usage.md\n\n# 执行细节（操作手册）\n\n本文件是**执行任务时的完整操作指引**——做解读/制作/合规、生成报告、处理边界情形时按需查阅。接口契约与返回字段见 [api.md](api.md)。\n\n> ⚠️ **数据外发与知情同意**：解读/制作/合规都会把用户提供的文件**上传至百炼®标书云端**（`biaoshu.zhiliaobiaoxun.com`）处理，此类文件常含商业、报价与个人信息；**上传文件与结果会以账户身份留存在百炼®标书服务器**（结果/成品约 7 天过期，可登录官网查看管理）。**首次上传前必须确认用户知悉并同意**（完整披露见 SKILL.md「⚠️ 权限与数据说明」）。\n\n## ⚠️ 输出约定（必须遵守，除非用户明确说不要）\n\n运行 `zcm.py` 时**老老实实把脚本输出原样给用户看**，不得为了「省事/抽字段」把它藏起来：\n\n1. **实时进度照常显示**：解读/抽包/生成/合规都会把百分比+阶段（如 `[20%] 智能解读中`）打到 **stderr**。**不要 `2>` 重定向、不要吞掉**——用户要看到进度推进。需要后台实时播报时用 `progress-stream` + Monitor，而非把进度倒进文件。\n2. **完整打印结果文件的绝对全路径**：每次产出后，必须把以下文件的**绝对路径**明确告知用户：\n   - 智能解读结果/报告（`*_智能解读.html` 等）\n   - 成品标书 `*_投标文件.docx`\n   - 合规审查结果/报告（`*_合规审查.html` 等）\n\n   脚本本身已打印这些路径（`generate`/`result` 成功后打 `已下载成品标书：<全路径>` 到 stderr，并把路径打到 stdout）；**别用 `>`/`2>` 把它们重定向掉**。若用 `--no-wait`，完成后须主动补取结果/出报告并打印全部全路径。\n\n   此外，解读/生成/合规完成后脚本会打印一行 `💰 当前剩余积分：X`——**照常转述给用户**，让其对余额与「够不够下一次」有数；查询失败时不打印，属正常，不必追问。\n\n> 反例（禁止）：`python3 scripts/zcm.py generate <pid> > out.json 2> log` —— 这会同时藏掉进度和成品全路径。\n\n3. **凭证/积分类提示不要把命令与 exit 码原样抛给用户**：缺 Key（exit 2）、积分不足（402）这类脚本输出是给你（助手）看的提示。你应当把它翻译成一句「用户下一步该做什么」（去官网拿 Key、按指引把 Key 写入 skill 目录下的 `config.json`、或打开充值链接）——不要让用户自己敲命令，\n\nArchive v1.0.13: 7 files, 46957 bytes\n\nFiles: references/api.md (14812b), references/usage.md (15752b), scripts/report.py (36782b), scripts/zcm.py (34395b), skill-card.md (2514b), SKILL.md (13912b), _meta.json (139b)\n\nArchive v1.0.12: 7 files, 44564 bytes\n\nFiles: references/api.md (14387b), references/usage.md (14830b), scripts/report.py (33234b), scripts/zcm.py (33755b), skill-card.md (3048b), SKILL.md (13272b), _meta.json (139b)\n\nArchive v1.0.11: 7 files, 43767 bytes\n\nFiles: references/api.md (13786b), references/usage.md (14338b), scripts/report.py (33234b), scripts/zcm.py (34394b), skill-card.md (2475b), SKILL.md (12734b), _meta.json (139b)\n\nArchive v1.0.10: 7 files, 45389 bytes\n\nFiles: references/api.md (14763b), references/usage.md (14338b), scripts/report.py (33234b), scripts/zcm.py (37257b), skill-card.md (2848b), SKILL.md (12703b), _meta.json (139b)\n\nArchive v1.0.9: 7 files, 45546 bytes\n\nFiles: references/api.md (14763b), references/usage.md (14338b), scripts/report.py (33234b), scripts/zcm.py (37257b), skill-card.md (3330b), SKILL.md (12703b), _meta.json (138b)\n\nArchive v1.0.8: 7 files, 51260 bytes\n\nFiles: references/api.md (17638b), references/usage.md (17201b), scripts/report.py (33234b), scripts/zcm.py (52347b), skill-card.md (2610b), SKILL.md (11110b), _meta.json (138b)","readmeExcerpt":"Skill: 招标文件解读工具 Owner: chichihaixiaojian666 Summary: 上传招标/投标文件，AI 一站式完成智能解读（废标红线/评分标准/控标洞察）、成品投标文件(.docx)生成、标书审查（分级风险+雷同检测）和标书查重（2-3份投标文件相似/雷同风险检查）。覆盖投标、招标、标书、投标文件、竞标、围标、控标、废标、评分标准、资格条件、技术标、商务标、暗标、响应文件、应答文件、雷同检测、相似检查、标书查重等场景——当用户提供或提及招标/投标文件、问「这个标能不能投 / 有哪些废标红线 / 帮我写投标书 / 检查标书有没有问题 / 两份投标文件像不像 / 会不会被判雷同」，或想解读招标文件、生成投标文件、做标书审查或查重时使用。需百炼®标书 Api Key（官网注册 Tags: latest:1.0.17 Version history: v1.0.17 | 2026-09-16T08:14:23","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"available_words\": 1397084,\n  \"wallet_balance\": 1397084,\n  \"limits\": {\"rate_per_min\": 60, \"max_concurrent_jobs\": 3, \"running_jobs\": 0}\n}"},{"language":"json","snippet":"{\n  \"job_id\": \"...\",\n  \"service\": \"interpretation|bid_document|compliance|bid_duplicate\",\n  \"status\": \"queued|running|succeeded|failed|canceled\",\n  \"progress\": {\n    \"percent\": 47,\n    \"stage\": \"content\",\n    \"stage_label\": \"生成内容\",\n    \"message\": \"正在写正文 32/80 节\",\n    \"current_step\": 32,\n    \"total_steps\": 80,\n    \"current_step_label\": \"项目实施方案\",\n    \"elapsed_seconds\": 360,\n    \"estimated_remaining_seconds\": 120\n  },\n  \"error\": null\n}"},{"language":"json","snippet":"{\n  \"filename\": \"某项目投标文件.docx\",\n  \"download_url\": \"https://biaoshu.zhiliaobiaoxun.com/api/open/v1/jobs/job_xxx/download?token=短时token\",\n  \"expires_in\": 86400,\n  \"size_bytes\": 3980000\n}"},{"language":"json","snippet":"{\n  \"service\": \"bid_document\",\n  \"result\": {\n    \"packages\": [],\n    \"is_multi_package\": false,\n    \"package_count\": 1,\n    \"suggested_pages\": 200,\n    \"max_total_pages\": 1200,\n    \"estimated_words_per_page\": 500,\n    \"estimate_reserve_factor\": 1.05,\n    \"suggested_estimated_words\": 105000,\n    \"estimate_note\": \"按目标页数约 500 字/页估算，预计消耗仅供参考，实际消耗以平台最终结算为准\"\n  }\n}"},{"language":"json","snippet":"{\"package_ids\":[11,12],\"total_pages\":80}"},{"language":"json","snippet":"{\n  \"service\": \"compliance\",\n  \"result\": {\n    \"compliance\": {\n      \"run_id\": 42,\n      \"status\": \"completed\",\n      \"summary\": {},\n      \"partial_summary\": {},\n      \"bid_files\": [],\n      \"issues\": [],\n      \"similarity_issues\": [],\n      \"manual_items\": [],\n      \"scope_summary_lines\": [],\n      \"error_message\": null\n    }\n  }\n}"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: biaoshu-bailian\ndescription: 上传招标/投标文件，AI 一站式完成智能解读（废标红线/评分标准/控标洞察）、成品投标文件(.docx)生成、标书审查（分级风险+雷同检测）和标书查重（2-3份投标文件相似/雷同风险检查）。覆盖投标、招标、标书、投标文件、竞标、围标、控标、废标、评分标准、资格条件、技术标、商务标、暗标、响应文件、应答文件、雷同检测、相似检查、标书查重等场景——当用户提供或提及招标/投标文件、问「这个标能不能投 / 有哪些废标红线 / 帮我写投标书 / 检查标书有没有问题 / 两份投标文件像不像 / 会不会被判雷同」，或想解读招标文件、生成投标文件、做标书审查或查重时使用。需百炼®标书 Api Key（官网注册可领赠送字数）；文件经百炼®标书云端处理，智能解读免费，标书制作/审查/查重按可用字数计费。\nallowed-tools: Read, Write, Bash\npermissions:\n  network:\n    allow:\n      - biaoshu.zhiliaobiaoxun.com\n    deny:\n      - all-other-domains\n  filesystem:\n    read:\n      - 用户明确提供的招标文件\n      - 用户明确提供的投标文件\n      - 本 skill 自身脚本与 references 文档\n      - skill 内 config.json\n    write:\n      - biaoshu-bailian-files/\n      - skill 内 config.json\n    deny:\n      - 用户未明确授权的其他本地路径\n  environment:\n    allow:\n      - ZCM_HOME\n      - ZCM_OUTPUT_DIR\n    deny:\n      - all-other-environment-variables\n  billing:\n    - 标书生成会消耗 Api Key 所属账户可用字数\n  credentials:\n    input:\n      - Api Key 仅由用户本人写入 skill 内 config.json\n    deny:\n      - 在对话中索取或回显 Api Key\n  data-handling:\n    deny:\n      - 附件地址外传\n      - 文件流外传\n      - base64 外传\n---\n\n# 百炼®标书写作助手\n\n> Language policy: Follow the user's language for all explanations, summaries, prompts, and ordinary replies. If the user language is unclear, ask or mirror the latest user language. Platform menu names, source procurement terms, risk labels, and generated report artifacts may remain in Simplified Chinese (zh-CN) when they reflect the upstream platform or report template.\n\n## MCP Permission Declaration\n\nThis skill declares the minimum capabilities below and should be reviewed against exactly this boundary:\n- `Read`: only user-provided tender/bid files, this skill's own scripts/docs, and local `config.json`.\n- `Write`: only generated outputs in `biaoshu-bailian-files/` and local `config.json`.\n- `Network`: only `https://biaoshu.zhiliaobiaoxun.com` for the 百炼®标书开放 API.\n- `Environment`: only optional `ZCM_HOME` and `ZCM_OUTPUT_DIR` for local storage paths.\n\nThis skill does not request shell-wide wildcard privileges beyond running its bundled local client `scripts/zcm.py`, does not access arbitrary domains, and does not read unrelated local files or environment variables.\n\nFor avoidance of doubt:\n- No arbitrary web browsing.\n- No access to unrelated local folders.\n- No reading of unrelated environment variables.\n- No credential collection inside chat.\n- No attachment export, file stream export, or base64 export to third parties.\n\n\n> 📌 本文档同时是 AI 助手的执行手册：文末「🚫 对用户输出的第一铁律」与「⚠️ 权限与数据说明」优先级最高、覆盖全文，任何面向用户的输出都必须先满足其要求；一切任务命令由助手后台代跑（后台操作手册见 [references/usage.md](references/usage.md)）。\n\n## 快速开始：获取 Api Key\n\n用百炼®标书写作助手出解读/标书/标书审查/标书查重，只需一个 Api Key。用户本人按官网流程注册可领赠送字数，三步搞定（向用户转述时**逐步骤完整给出**，链接必须原样显示完整 URL，不要写成「百炼®标书平台」之类的链接文字）：\n\n1. 打开官网 https://biaoshu.zhiliaobiaoxun.com/?ch=c666 ，由用户本人按官网流程注册并登录（注册可领赠送字数）；\n2. 登录后点**左侧菜单『Skill 接入 → 获取 Api Key』**，在弹出面板中**查看/复制 Api Key**（首次打开自动生成，形如 `bk_live_xxxxx`；重置后旧 Key 立即失效）；\n3. 在**当前已安装的 biaoshu-bailian skill 根目录**创建凭证文件 `config.json`"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7dz1pzdygwz7z5fwfmrvhrnn84cs8q\",\n  \"slug\": \"biaoshu-writer-read\",\n  \"version\": \"1.0.17\",\n  \"publishedAt\": 1789546463078\n}"},{"path":"references/api-auth.md","content":"# 鉴权、任务与可用字数接口\n\n只在处理 Api Key、账户权益、任务轮询、结果下载、错误处理时读取本文件。\n\n## 鉴权\n\n- Base URL：`https://biaoshu.zhiliaobiaoxun.com/api/open/v1`\n- Header：`X-App-Key: <Api Key>`\n- 可选 Header：`Idempotency-Key: <UUID>`，同一个 key 24 小时内复用同一 `job_id`，避免重复提交。\n- 开放 API 受平台总开关控制；关闭时整层 404。\n\nApi Key 获取路径：打开 https://biaoshu.zhiliaobiaoxun.com/?ch=c666 → 用户本人按官网流程注册/登录 → 左侧菜单「Skill 接入 → 获取 Api Key」。\n\n## `GET /me`\n\n查询当前 Api Key 所属用户的权益与限制。\n\n```json\n{\n  \"available_words\": 1397084,\n  \"wallet_balance\": 1397084,\n  \"limits\": {\"rate_per_min\": 60, \"max_concurrent_jobs\": 3, \"running_jobs\": 0}\n}\n```\n\n- `available_words` 是当前可用字数。\n- `wallet_balance` 仅为兼容旧客户端，展示给用户时统一说“可用字数”。\n\n## `GET /word-entitlements`\n\n查询当前用户权益明细，返回会员周期字数、永久字数包、历史积分迁移字数、冻结字数等。历史积分迁移字数按“字数包”展示，永久有效。\n\n## 任务状态\n\n### `GET /jobs/{job_id}`\n\n返回任务状态、进度、错误信息。\n\n```json\n{\n  \"job_id\": \"...\",\n  \"service\": \"interpretation|bid_document|compliance|bid_duplicate\",\n  \"status\": \"queued|running|succeeded|failed|canceled\",\n  \"progress\": {\n    \"percent\": 47,\n    \"stage\": \"content\",\n    \"stage_label\": \"生成内容\",\n    \"message\": \"正在写正文 32/80 节\",\n    \"current_step\": 32,\n    \"total_steps\": 80,\n    \"current_step_label\": \"项目实施方案\",\n    \"elapsed_seconds\": 360,\n    \"estimated_remaining_seconds\": 120\n  },\n  \"error\": null\n}\n```\n\n长任务必须把 `percent/stage_label/message/current_step_label/elapsed_seconds` 转述给用户，避免看起来卡住。\n\n### `GET /jobs/{job_id}/result`\n\n- 智能解读、标书审查、标书查重返回 JSON。\n- 标书制作返回 `.docx` 二进制流。\n\n### `GET /jobs/{job_id}/download-url`\n\n仅标书制作任务成功后可用，返回短时下载链接。\n\n```json\n{\n  \"filename\": \"某项目投标文件.docx\",\n  \"download_url\": \"https://biaoshu.zhiliaobiaoxun.com/api/open/v1/jobs/job_xxx/download?token=短时token\",\n  \"expires_in\": 86400,\n  \"size_bytes\": 3980000\n}\n```\n\n短时 token 绑定 `job_id/user_id/export_id/过期时间`，不包含 Api Key。用户看到的就是 `filename/download_url/expires_in/size_bytes`；标书半成品还会返回 `partial/continue_available/outline_id/completion`。\n\n## 计费与 402\n\n- 智能解读免费，可用字数为 0 也能发起。\n- 标书制作、标书审查、标书查重按平台规则消耗可用字数。\n- 标书审查、标书查重提交前可用字数不足返回 402 `insufficient_balance`。\n- 标书生成会按页数做提交前预估，默认 `500` 字/页，再乘以安全系数；预估仅供参考，实际消耗以平台最终结算为准；生成前不根据余额做字数不足示警，不阻止提交。\n- 生成中如果字数用尽，任务会停止继续写正文；如果平台已导出半成品，先交付半成品下载链接，并提示购买会员或字数包后用 `continue-generate` 继续生成正文。\n- 不要把平台返回的 `recharge_url` / `bind_url` 原样转发给用户，因为可能包含 `bind_key`。只给官网普通地址：`https://biaoshu.zhiliaobiaoxun.com/recharge?ch=c666`。"},{"path":"references/api-bid-workflow.md","content":"# 智能解读与标书制作 API\n\n用于“解读招标文件 → 抽包 → 选页数 → 生成成品标书”的完整流程。智能解读和标书制作强相关，放在同一分册。\n\n## 流程\n\n1. `POST /interpretations` 上传招标文件，得到解读任务。\n2. `GET /jobs/{job_id}` 轮询解读进度。\n3. `GET /jobs/{job_id}/result` 获取 `project_id` 和 8 维度解读结果。\n4. `POST /bid-documents/{project_id}/packages` 抽取分包。\n5. 展示分包、系统建议页数、最大页数、预计消耗字数、当前可用字数，让用户确认。\n6. `POST /bid-documents/{project_id}/generate` 生成成品标书。\n7. `GET /jobs/{job_id}/download-url` 获取短时下载链接。\n\n## `POST /interpretations`\n\n- 入参：multipart `file` 或 JSON `{\"file_url\":\"https://...\"}`。\n- 文件：招标文件 `.pdf/.doc/.docx`，≤ 50 MB。\n- 返回：`{\"job_id\":\"...\"}`\n- 计费：智能解读免费，可用字数为 0 也能发起；生成前按页数做消耗预估，预估仅供参考，实际消耗以平台最终结算为准。\n\n结果中的 `result.project_id` 是后续抽包、生成、标书审查的统一项目句柄。\n\n核心字段：\n\n- `project_info[]`：项目基本信息。\n- `compliance[]`：合标/资格要求。\n- `disqualification[]`：废标红线。\n- `evaluation[]`：评分标准。\n- `key_requirements[]`：关键要求。\n- `business_terms[]`：商务条款。\n- `pricing[]`：报价要求。\n- `procurement_analysis{}`：采购背景。\n- `decision_analysis{}`：控标洞察、参与建议、风险信号、行动建议。\n\n## `POST /bid-documents/{project_id}/packages`\n\n- 无 body。\n- 返回分包列表和页数建议。\n- 抽包是标书制作的准备动作，不作为独立成果单独计费。\n\n典型结果：\n\n```json\n{\n  \"service\": \"bid_document\",\n  \"result\": {\n    \"packages\": [],\n    \"is_multi_package\": false,\n    \"package_count\": 1,\n    \"suggested_pages\": 200,\n    \"max_total_pages\": 1200,\n    \"estimated_words_per_page\": 500,\n    \"estimate_reserve_factor\": 1.05,\n    \"suggested_estimated_words\": 105000,\n    \"estimate_note\": \"按目标页数约 500 字/页估算，预计消耗仅供参考，实际消耗以平台最终结算为准\"\n  }\n}\n```\n\n规则：\n\n- `is_multi_package=true`：必须展示 `packages` 给用户选择，收集 `package_ids`。\n- `is_multi_package=false`：不问包，直接进入页数确认，生成时传 `--no-package`。\n- 用户未确认页数前不得提交生成任务；用户输入页数不能超过 `max_total_pages`。\n- 使用系统建议页数时，也必须把抽包结果里的 `suggested_pages` 明确带入 Skill 生成命令，不能默认按固定页数处理。\n\n## `POST /bid-documents/{project_id}/generate`\n\n入参：\n\n```json\n{\"package_ids\":[11,12],\"total_pages\":80}\n```\n\n非多包项目可省略 `package_ids`。`total_pages` 最高 1200。\n\n计费与拦截：\n\n- 标书制作按实际生成内容消耗可用字数。\n- Open API / Skill 提交前按 `total_pages * 500 * 1.05` 预估所需字数；预估仅供页数确认参考，实际消耗以平台最终结算为准；生成前不做余额不足示警。\n- Skill 调用 `generate` 时需把抽包结果里的 `max_total_pages` 作为动态上限；超过则本地拒绝，不提交 Open API。\n- 生成前只展示预计消耗，不根据余额做字数不足示警，也不阻止创建长任务；生成中如果真实消耗超过剩余可用字数，再按平台规则停止并返回不足提示。\n- 生成中如果真实消耗超过剩余可用字数，任务会停止继续写正文，错误码可能是 `insufficient_balance` / `insufficient_points`。如果后端已经成功导出半成品，skill 应先交付半成品下载链接；充值或购买字数包后，用 `continue-generate` 基于同一 `outline_id` 继续生成正文，不要重新解读、抽包或重建大纲。\n\n进度阶段：\n\n- `select`：选包。\n- `requirements`：抽需求。\n- `outline`：生成大纲。\n- `content`：生成正文。\n- `templates`：抽取制式模板并识别待填项。\n- `export`：导出 Word。\n\n进度字段：\n\n- `/jobs/{job_id}` 应持续返回 `progress.percent`、`progress.stage` / `stage_label`、`progress.message`、`progress.current_step`、`progress.total_steps`、`progress.current_step_label`、`progress.elapsed_seconds`，可选返回 `estimated_remaining_seconds`。\n- 如果后端没有写入上述字段，skill 只能展示排队/运行心跳，不能生成章节级进度。\n\n完成前完整性校验：\n\n- 后端在标记 `succeeded` 前应校验计划章节数、已生成章节数、空章节、模板占位符、待填项和导出 docx 结构。\n- 发现缺章节或结构异常时，不应标记成功；应自动补写，或把任务置为 `failed` 并返回明确错误码/原因供 skill 转述。\n\n生成成功后先取 `download-url` 给用户短时链接；用户明确要本地文件时，再用 `result -o` 下载本地文件。若 `download-url` 返回 `partial=true`，必须说明这是半成品、展示 `completion.generated/total/missing`，并提示"},{"path":"references/api-compliance.md","content":"# 标书审查 API\n\n用于发起标书合规审查。标书审查不是免费能力，按平台规则消耗可用字数。\n\n## `POST /projects/{project_id}/compliance-reviews`\n\n前置：`project_id` 来自智能解读结果。招标文件必须先解读，审查复用同一个 project，不重复上传招标文件。\n\n入参：\n\n- multipart `bid_files`：一份或多份投标文件。\n- 或 JSON `{\"file_urls\":[...],\"is_blind_bid\":false,\"is_electronic_bid\":false}`。\n\n文件限制：\n\n- 投标文件支持 `.doc/.docx/.pdf`。\n- 最多 100 份。\n- 单份 ≤ 1024 MB。\n- 总大小 ≤ 2 GB。\n\n选项：\n\n- `is_blind_bid`：暗标。\n- `is_electronic_bid`：电子投标。\n- `sibling_unit_names`：敏感单位名称。\n- `semantic_review=false` 或 `enable_semantic_review=false`：关闭语义审查，仅保留规则类检查。\n\n返回：`{\"job_id\":\"...\"}`\n\n计费：\n\n- 发起前校验可用字数。\n- 审查完成后按平台规则消耗可用字数；具体消耗以平台流水为准。\n- 可用字数不足返回 402 `insufficient_balance`。\n\n## 结果字段\n\n`GET /jobs/{job_id}/result` 返回：\n\n```json\n{\n  \"service\": \"compliance\",\n  \"result\": {\n    \"compliance\": {\n      \"run_id\": 42,\n      \"status\": \"completed\",\n      \"summary\": {},\n      \"partial_summary\": {},\n      \"bid_files\": [],\n      \"issues\": [],\n      \"similarity_issues\": [],\n      \"manual_items\": [],\n      \"scope_summary_lines\": [],\n      \"error_message\": null\n    }\n  }\n}\n```\n\n重点字段：\n\n- `summary`：高风险/待复核/提示数量、一句话结论、语义审查状态。\n- `partial_summary`：部分结果或阶段性结果提示。\n- `issues[]`：合规问题，含风险等级、招标依据、投标证据、修改建议。\n- `similarity_issues[]`：多份投标文件之间的雷同线索。\n- `manual_items[]`：人工核查清单。\n- `scope_summary_lines[]`：检查范围。\n\n如果 `semantic_review` 或 `partial_summary` 表示语义审查未完整完成，必须如实说“当前为部分结果/语义审查未完整完成”，不能说成完整审查。\n\n## 常见错误\n\n- 409 `report_task_conflict`：同一用户已有合规/查重类任务运行中，等完成后再发起。\n- 422 `validation_error`：投标文件缺失、类型不支持、数量或选项不合法。\n- 413：文件超出单份或总大小限制。\n- 402：可用字数不足，提示购买会员或字数包后重试。"}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"上传招标/投标文件，AI 一站式完成智能解读（废标红线/评分标准/控标洞察）、成品投标文件(.docx)生成、标书审查（分级风险+雷同检测）和标书查重（2-3份投标文件相似/雷同风险检查）。覆盖投标、招标、标书、投标文件、竞标、围标、控标、废标、评分标准、资格条件、技术标、商务标、暗标、响应文件、应答文件、雷同检测、相似检查、标书查重等场景——当用户提供或提及招标/投标文件、问「这个标能不能投 / 有哪些废标红线 / 帮我写投标书 / 检查标书有没有问题 / 两份投标文件像不像 / 会不会被判雷同」，或想解读招标文件、生成投标文件、做标书审查或查重时使用。需百炼®标书 Api Key（官网注册 Skill: 招标文件解读工具 Owner: chichihaixiaojian666 Summary: 上传招标/投标文件，AI 一站式完成智能解读（废标红线/评分标准/控标洞察）、成品投标文件(.docx)生成、标书审查（分级风险+雷同检测）和标书查重（2-3份投标文件相似/雷同风险检查）。覆盖投标、招标、标书、投标文件、竞标、围标、控标、废标、评分标准、资格条件、技术标、商务标、暗标、响应文件、应答文件、雷同检测、相似检查、标书查重等场景——当用户提供或提及招标/投标文件、问「这个标能不能投 / 有哪些废标红线 / 帮我写投标书 / 检查标书有没有问题 / 两份投标文件像不像 / 会不会被判雷同」，或想解读招标文件、生成投标文件、做标书审查或查重时使用。需百炼®标书 Api Key（官网注册 Tags: latest:1.0.17 Version history: v1.0.17 | 2026-09-16T08:14:23","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1185,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T18:12:43.737Z","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-09T18:12:43.737Z","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-10T09:27:17.247Z","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"}]}}}