{"id":"e560089d-009c-4b3e-8a22-ce8d50996cea","entityType":"agent","slug":"clawhub-chichihaixiaojian666-biaoshu-writer-swift","name":"标书自动撰写工具","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chichihaixiaojian666-biaoshu-writer-swift","canonicalPath":"/agent/clawhub-chichihaixiaojian666-biaoshu-writer-swift","generatedAt":"2026-10-10T05:28:14.481Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T17:02:09.856Z","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:34:48","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.3K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17fdnkpzsb1ek1tpn5c955qs184dded:biaoshu-writer-swift","sourceUrl":"https://clawhub.ai/chichihaixiaojian666/biaoshu-writer-swift","homepage":"https://clawhub.ai/chichihaixiaojian666/skills/biaoshu-writer-swift","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/chichihaixiaojian666/biaoshu-writer-swift","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/chichihaixiaojian666/skills/biaoshu-writer-swift","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-09T17:02:09.856Z","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-09T17:02:09.856Z","emptyReason":null},"stars":null,"forks":null,"downloads":2253,"packageName":null,"latestVersion":"1.0.17","tractionLabel":"2.3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T17:02:09.856Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T17:02:09.856Z","lastCrawledAt":"2026-10-09T17:02:09.856Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T17:02:09.856Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.17","createdAt":"2026-09-16T08:34:48.131Z","changelog":"- Major update: Expanded documentation, clarified usage, and improved configuration instructions. - Separated and expanded API reference docs: now includes dedicated guides for auth, bid workflow, compliance, duplicate checking, and other APIs. - Added a modular script library under `scripts/report_lib/` and `scripts/zcm_lib/` to organize report generation and API client logic. - Updated permissions and credential handling rules—now strictly require credentials to be stored in the skill’s local directory and preserved on upgrades. - Rewrote and clarified the SKILL.md with updated instructions for Api Key management, especially for installation, upgrades, and file handling. - Removed obsolete or redundant documentation (e.g., `skill-card.md`), refactoring for clarity and compliance.","fileCount":27,"zipByteSize":84749},{"version":"1.0.16","createdAt":"2026-09-01T10:32:21.593Z","changelog":"biaoshu-writer-swift v1.0.16 - Skill 重命名为“biaoshu-bailian”，名称与描述更贴合产品品牌和应用场景 - 「成品投标文件生成」计费方式由“消耗积分”改为“消耗可用字数”，相关文档同步调整 - 新增“标书查重”功能：支持2-3份投标文件相似/雷同风险自查，明确查重流程与输出内容 - 用户指南细化，四大核心功能全部配备场景化示例，强调绝对路径、凭证保护和数据交付方式 - 权限和计费说明全面更新——覆盖功能入口检查与服务器/本地数据流向细则 - 更新 references 文档及脚本以支持新功能和计费模式，删除旧 skill-card.md 文件","fileCount":8,"zipByteSize":57866},{"version":"1.0.15","createdAt":"2026-08-24T13:18:37.025Z","changelog":"Version 1.0.15 - Updated skill manifest to use a new, explicit `permissions` frontmatter section for network, filesystem, environment, billing, and credential boundaries; removed `allowed-tools` Bash specificity and tool wildcards. - Made permission boundaries clearer and stricter: only allows access to specified local files, directories, domains, and environment variables; prohibits attachment, file stream, and base64 export. - Added a new reference file: `references/knowledge-fields.md`. - Removed the `skill-card.md` file. - Language policy amended: all explanations and prompts now follow the user's language unless platform-specific terms dictate otherwise. - No functional change for end-users; changes clarify security, data handling, and external access for all audiences.","fileCount":8,"zipByteSize":50565},{"version":"1.0.14","createdAt":"2026-08-18T11:45:33.281Z","changelog":"本 skill 仅调用百炼®标书官方开放 API，完成解读、生成与合规审查。扫描命中的读写文件、HTTP 请求、调用外部 API 等能力，均为完成官方标书业务所必需的受控操作，仅处理用户主动提供的文件并输出业务结果，不涉及越权访问或第三方数据扩散。相关试用与账号引导也仅限百炼®标书官方体系内使用，不构成实际安全风险。申请人工复核。","fileCount":7,"zipByteSize":46997},{"version":"1.0.13","createdAt":"2026-08-10T11:42:05.184Z","changelog":"- skill-card.md 文件已移除。 - SKILL.md 精简并优化了 description，更明确 skill 的调用范围和前置条件。 - metadata 权限部分细化了环境变量说明，明确凭证路径固定不可由环境变量重定向。 - 在正文「三大功能」下新增积分扣费说明，明确哪些功能消耗积分、余额要求和拦截规则。 - 调整和补充了部分通知与合规语句，强调使用前用户需知悉云端处理和积分消耗细节。","fileCount":7,"zipByteSize":44514},{"version":"1.0.12","createdAt":"2026-07-23T02:41:42.154Z","changelog":"- 移除了 skill-card.md 文件。 - SKILL.md 权限声明调整：环境变量权限现在仅覆盖地址与路径（ZCM_BASE / ZCM_CONFIG / ZCM_HOME / ZCM_OUTPUT_DIR），不再允许 App Key 等凭证通过环境变量传入，App Key 仅支持本地 config.json 存储。 - 明确 App Key 绝不经环境变量读取，并在 not-collected 说明中补充相关限制。 - 其他功能说明、使用流程及合规与数据告知未改动。","fileCount":7,"zipByteSize":43843},{"version":"1.0.11","createdAt":"2026-07-22T11:44:12.845Z","changelog":"重大版本更新： - 调整 App Key 配置流程：需用户本地自建 config.json，不再允许粘贴 Key 至对话，提升账户安全性。 - 更新权限与数据说明，首次使用前明确告知文件上传、计费、数据留存等政策。 - 优化功能说明及话术示例，强调只读取本地文件，云端文件须用户先下载。 - 移除 skill-card.md 文件，精简 skill 结构。 - 增补 frontmatter 声明，详细列出网络、文件系统、环境变量等权限控制。 - 实施更严格的凭证保护措施，回复中不再包含任何 App Key 或带 key 的链接。","fileCount":7,"zipByteSize":45566},{"version":"1.0.10","createdAt":"2026-07-22T11:37:41.827Z","changelog":"Version 1.0.10 - Updated key usage and credential management: now users must manually create a local `config.json` with the App Key (do not paste the key in conversation). - Adjusted file access policy: only local files are accepted; users are required to download any online files before use. - Strengthened user privacy: do not ask for, display, or transmit sensitive keys or key-related links in conversation. - Enhanced permission and data usage disclosure, with explicit upfront explanations of file uploads and storage procedures. - Removed sample file \"skill-card.md\" and updated documentation to match new workflow and security standards.","fileCount":7,"zipByteSize":45414}]},"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-swift","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-swift/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-swift/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-swift/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-swift/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-swift/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-swift/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-10T05:28:14.474Z"}},"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-swift/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-swift/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-swift/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chichihaixiaojian666-biaoshu-writer-swift/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-09T17:02:09.856Z","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:34:48.131Z | auto\n\n- Major update: Expanded documentation, clarified usage, and improved configuration instructions.\n- Separated and expanded API reference docs: now includes dedicated guides for auth, bid workflow, compliance, duplicate checking, and other APIs.\n- Added a modular script library under `scripts/report_lib/` and `scripts/zcm_lib/` to organize report generation and API client logic.\n- Updated permissions and credential handling rules—now strictly require credentials to be stored in the skill’s local directory and preserved on upgrades.\n- Rewrote and clarified the SKILL.md with updated instructions for Api Key management, especially for installation, upgrades, and file handling.\n- Removed obsolete or redundant documentation (e.g., `skill-card.md`), refactoring for clarity and compliance.\n\nv1.0.16 | 2026-09-01T10:32:21.593Z | auto\n\nbiaoshu-writer-swift v1.0.16\n\n- Skill 重命名为“biaoshu-bailian”，名称与描述更贴合产品品牌和应用场景\n- 「成品投标文件生成」计费方式由“消耗积分”改为“消耗可用字数”，相关文档同步调整\n- 新增“标书查重”功能：支持2-3份投标文件相似/雷同风险自查，明确查重流程与输出内容\n- 用户指南细化，四大核心功能全部配备场景化示例，强调绝对路径、凭证保护和数据交付方式\n- 权限和计费说明全面更新——覆盖功能入口检查与服务器/本地数据流向细则\n- 更新 references 文档及脚本以支持新功能和计费模式，删除旧 skill-card.md 文件\n\nv1.0.15 | 2026-08-24T13:18:37.025Z | user\n\nVersion 1.0.15\n\n- Updated skill manifest to use a new, explicit `permissions` frontmatter section for network, filesystem, environment, billing, and credential boundaries; removed `allowed-tools` Bash specificity and tool wildcards.\n- Made permission boundaries clearer and stricter: only allows access to specified local files, directories, domains, and environment variables; prohibits attachment, file stream, and base64 export.\n- Added a new reference file: `references/knowledge-fields.md`.\n- Removed the `skill-card.md` file.\n- Language policy amended: all explanations and prompts now follow the user's language unless platform-specific terms dictate otherwise.\n- No functional change for end-users; changes clarify security, data handling, and external access for all audiences.\n\nv1.0.14 | 2026-08-18T11:45:33.281Z | user\n\n本 skill 仅调用百炼®标书官方开放 API，完成解读、生成与合规审查。扫描命中的读写文件、HTTP 请求、调用外部 API 等能力，均为完成官方标书业务所必需的受控操作，仅处理用户主动提供的文件并输出业务结果，不涉及越权访问或第三方数据扩散。相关试用与账号引导也仅限百炼®标书官方体系内使用，不构成实际安全风险。申请人工复核。\n\nv1.0.13 | 2026-08-10T11:42:05.184Z | user\n\n- skill-card.md 文件已移除。\n- SKILL.md 精简并优化了 description，更明确 skill 的调用范围和前置条件。\n- metadata 权限部分细化了环境变量说明，明确凭证路径固定不可由环境变量重定向。\n- 在正文「三大功能」下新增积分扣费说明，明确哪些功能消耗积分、余额要求和拦截规则。\n- 调整和补充了部分通知与合规语句，强调使用前用户需知悉云端处理和积分消耗细节。\n\nv1.0.12 | 2026-07-23T02:41:42.154Z | user\n\n- 移除了 skill-card.md 文件。\n- SKILL.md 权限声明调整：环境变量权限现在仅覆盖地址与路径（ZCM_BASE / ZCM_CONFIG / ZCM_HOME / ZCM_OUTPUT_DIR），不再允许 App Key 等凭证通过环境变量传入，App Key 仅支持本地 config.json 存储。\n- 明确 App Key 绝不经环境变量读取，并在 not-collected 说明中补充相关限制。\n- 其他功能说明、使用流程及合规与数据告知未改动。\n\nv1.0.11 | 2026-07-22T11:44:12.845Z | user\n\n重大版本更新：\n\n- 调整 App Key 配置流程：需用户本地自建 config.json，不再允许粘贴 Key 至对话，提升账户安全性。\n- 更新权限与数据说明，首次使用前明确告知文件上传、计费、数据留存等政策。\n- 优化功能说明及话术示例，强调只读取本地文件，云端文件须用户先下载。\n- 移除 skill-card.md 文件，精简 skill 结构。\n- 增补 frontmatter 声明，详细列出网络、文件系统、环境变量等权限控制。\n- 实施更严格的凭证保护措施，回复中不再包含任何 App Key 或带 key 的链接。\n\nv1.0.10 | 2026-07-22T11:37:41.827Z | user\n\nVersion 1.0.10\n\n- Updated key usage and credential management: now users must manually create a local `config.json` with the App Key (do not paste the key in conversation).\n- Adjusted file access policy: only local files are accepted; users are required to download any online files before use.\n- Strengthened user privacy: do not ask for, display, or transmit sensitive keys or key-related links in conversation.\n- Enhanced permission and data usage disclosure, with explicit upfront explanations of file uploads and storage procedures.\n- Removed sample file \"skill-card.md\" and updated documentation to match new workflow and security standards.\n\nv1.0.9 | 2026-07-22T11:01:13.976Z | user\n\nbiaoshu-writer-swift 1.0.9\n\n- Major update to onboarding: skill now auto-creates a trial account and App Key on installation, removing manual setup for new users.\n- Enhanced user instructions to clarify file providing methods (upload, local path, or downloadable URL) with examples.\n- Refined flow: after each step (解读, 标书生成, 合规审查), proactively suggests the next logical action.\n- Usage examples and outputs expanded; all user-facing examples require showing exact file paths for results.\n- Documentation simplified and reorganized for clarity; removed redundant or implementation-specific content.\n- File removed: skill-card.md.\n\nv1.0.8 | 2026-07-20T14:03:22.571Z | user\n\n重大版本更新：\n\n- 修改 App Key 配置流程，支持用户直接粘贴 Key 到对话中保存，无需手动编辑本地配置文件\n- 调整凭证存储路径为 skill 目录下的 `config.json`，保存后明确告知文件位置\n- 更新注册与获取 App Key 的指引说明，并同步官网操作菜单说明\n- 新增「经验沉淀」和「问题上报」说明，所有需上传内容严格二次确认，默认不自动提交\n- 明确并加强对 App Key 保护、产物路径输出、数据权限与不采集项的说明\n- 移除 skill-card.md 文件\n\nv1.0.7 | 2026-07-13T13:17:23.051Z | auto\n\n**biaoshu-writer-swift v1.0.7 – Major update focused on a streamlined \"one-click\" bid writing experience**\n\n- Skill重命名为「biaoshu-writer-swift」，聚焦“一键式”标书生成、自动解读、合规自查全流程\n- SKILL.md 文档大幅改版，优化说明结构和用语，强化对新手的分步指引与“场景话术”示例\n- 新增产品功能演示图片，帮助用户快速理解结果产出\n- App Key 获取流程改为更明确的两步法，强调凭证安全\n- 删除 skill-card.md，不再单独维护冗余简介\n- 保留所有权限与安全合规声明，进一步突出对话“只输出结果，不暴露命令”硬性规则\n\nv1.0.6 | 2026-07-11T08:28:03.189Z | user\n\nbiaoshu-writer-swift 1.0.6 Changelog\n\n- Updated user credential handling: now requires users to create a local credential file (`~/.zcm/config.json`) to store the App Key, instead of pasting it into the conversation.\n- Stronger privacy and security guidance: clarified that the App Key should never be provided in the conversation; the assistant no longer asks for or repeats the key.\n- Revised documentation and onboarding instructions to reflect safer credential setup (including explicit file path and content template for credential file).\n- Clarified output rules and mandatory inclusion of full file output paths after each operation.\n- Removed the redundant sample file `skill-card.md`.\n\nv1.0.5 | 2026-07-11T07:11:40.863Z | user\n\nbiaoshu-writer-swift 1.0.5\n\n- 权限说明加强：明确文件仅上传至招采猫，不再抓取任意云端文件链接。\n- 输出与数据安全升级：禁止在回复中输出 App Key 或含 Key 参数的链接，对充值/账户等操作仅给无参数官网链接。\n- 支持本地文件路径：招标文件输入限本地路径，用户需自行下载云端文件。\n- 数据留存说明补充：产出结果与上传文件按账户存储，7 天后过期，可官网管理。\n- 移除 skill-card.md 文件（无影响功能）。\n\nv1.0.4 | 2026-07-11T06:05:41.722Z | user\n\n- 更改本地凭证存储路径：由 `~/.zcm/credentials.json` 改为 `~/.zcm/config.json`\n- 移除 skill-card.md 文件，不影响用户功能\n- 其他功能、用法和权限说明保持不变\n\nv1.0.3 | 2026-07-11T05:32:58.710Z | user\n\n- 强化了对用户输出的规则：「产物必须逐个给绝对全路径」成为输出铁律，用户每次都会拿到文件的完整绝对路径，禁止用目录名代替。\n- 安装成功介绍和“能干什么/怎么拿 App Key”问答，需同时输出完整“怎么获取 App Key”步骤（含粘贴示例）和所有功能的详细使用示例，缺一不可，不可删减。\n- 明确禁止输出命令、后台操作和配置指引到用户界面，包括进度、报错转述等。\n- 优化了文档措辞，补充了绝对全路径展示的场景说明，全部产物需明确举例路径形态。\n- 核心功能、权限说明与原有能力保持一致。\n\nv1.0.2 | 2026-07-11T05:18:24.305Z | user\n\nbiaoshu-writer-swift 1.0.2\n\n- Updated user-facing documentation (SKILL.md) with stricter wording on data handling, UI output, and privacy compliance.\n- Added explicit instructions prohibiting backend command/parameter exposure to users and mandating absolute file paths for all outputs.\n- Enhanced App Key acquisition guidance, now requiring full original wording and example language for clarity.\n- Detailed all network, filesystem, and environment variable permissions in the skill metadata.\n- Removed the unused sample file skill-card.md.\n\nv1.0.1 | 2026-07-08T03:25:20.783Z | user\n\nRebranded and enhanced skill for招采猫标书制作\n\n- Skill名称由“biaoshu-writer-swift”更新为“biaoshu-bailian”，描述及用法调整为“百炼招采猫”官方命名与定位。\n- 新增 App Key 获取方式“免费试用”，零输入自动开通试用账号。\n- 优化 App Key 指引和注册体验，现支持三种获取方式，均附详细操作说明。\n- Skill功能描述更精炼，明确了标书制作全流程与应用场景。\n- 明确 skill 为官方接口轻客户端，不复刻或替代平台算法，定位更清晰。\n\nv1.0.0 | 2026-07-06T03:17:03.280Z | auto\n\nbiaoshu-writer-swift 1.0.0 初始发布\n\n- 提供基于 App Key 的一键生成标书工具，闭环支持投标文件自动成稿。\n- 覆盖三大核心功能：智能解读招标文件、一键生成成品投标文件、合规自查及自动排版与待填项引导。\n- 全流程统一异步提交、轮询、取结果，复用开放 API 与用户知识库。\n- 支持招标文件本地或云端上传，输出结构化报告（HTML/Word）。\n- 明确新用户注册和 App Key 获取路径，无Key时友好指引。\n- 输出须打印生成文件的绝对路径，支持在百炼招采猫平台同步查看。\n\nArchive index:\n\nArchive v1.0.17: 27 files, 84749 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 (3018b), SKILL.md (21560b), _meta.json (140b)\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-swift\",\n  \"version\": \"1.0.17\",\n  \"publishedAt\": 1789547688131\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\nUploads tender and bid documents to 百炼®标书 to interpret tender requirements, generate finished .docx bid documents, review compliance risks, and compare bid files for similarity or duplication risks.\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\nProcurement and bid teams use this skill to analyze tender files, draft bid-response documents, review submissions for disqualification and compliance risks, and compare multiple bid files for similarity concerns before submission.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Sensitive tender and bid files are uploaded to the vendor cloud service for processing.\n\nMitigation: Use only files the user is authorized to process, obtain explicit upload consent, and avoid using the skill for material that cannot leave the local environment.\n\nRisk: The Api Key is a full account credential and paid workflows may consume the account's usable word balance.\n\nMitigation: Use a dedicated key, keep config.json private, never paste the key into chat, and confirm paid generation, compliance review, or duplicate-check steps before submission.\n\nRisk: The security summary flags boundary concerns around local writes and project metadata.\n\nMitigation: Review configured output paths, avoid untrusted custom report names or paths, and inspect local project metadata if running in a shared environment.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chichihaixiaojian666/skills/biaoshu-writer-swift)\n- [Publisher profile](https://clawhub.ai/user/chichihaixiaojian666)\n- [百炼®标书 platform](https://biaoshu.zhiliaobiaoxun.com/?ch=c666)\n- [Open API overview](references/api.md)\n- [Authentication and task API](references/api-auth.md)\n- [Tender interpretation and bid-document workflow API](references/api-bid-workflow.md)\n- [Bid compliance review API](references/api-compliance.md)\n- [Bid similarity and duplicate-check API](references/api-duplicate.md)\n- [Usage guide](references/usage.md)\n- [Knowledge-base field guide](references/knowledge-fields.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Files, Guidance]\n\n**Output Format:** [Conversational guidance plus generated HTML, Word, JSON, and .docx artifacts depending on workflow]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires a user-provided Api Key; paid workflows may consume the account's usable word balance and generated task artifacts may expire after a limited retention period.]\n\n## Skill Version(s):\n\n1.0.17 (source: server release metadata)\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: 8 files, 57866 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 (2963b), SKILL.md (17626b), _meta.json (140b)\n\nFile v1.0.16: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.16:_meta.json\n\n{\n  \"ownerId\": \"kn7dz1pzdygwz7z5fwfmrvhrnn84cs8q\",\n  \"slug\": \"biaoshu-writer-swift\",\n  \"version\": \"1.0.16\",\n  \"publishedAt\": 1788258741593\n}\n\nFile v1.0.16: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.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)。\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.16:skill-card.md\n\n## Description:\n\n标书自动撰写工具 helps agents use the 百炼®标书 cloud service to interpret tender files, generate .docx bid documents, review bid compliance, and compare bid documents for similarity risks.\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 bid teams use this skill to process authorized tender and bid documents through 百炼®标书 for tender interpretation, bid-document generation, compliance review, and similarity checks. It supports an agent workflow where users provide local files and the agent returns summaries, reports, generated bid documents, or similarity findings.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Tender and bid documents may contain commercial or personal information and are uploaded to the 百炼®标书 cloud service.\n\nMitigation: Use the skill only with documents the user is authorized to process, and confirm the user is comfortable with the cloud upload before submitting files.\n\nRisk: The API key grants access to the provider account if exposed in chat or copied into shared logs.\n\nMitigation: Keep the API key in the local config file and do not ask the user to paste, repeat, or disclose it in conversation.\n\nRisk: Generated results and task history may remain available in the provider account for a limited time.\n\nMitigation: Tell users that outputs may persist with the provider account and direct them to manage history through the provider service when needed.\n\nRisk: Similarity checks provide risk signals and should not be treated as a legal finding of collusion or bid validity.\n\nMitigation: Present duplicate-check results as internal review signals and recommend human or legal review for submission decisions.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chichihaixiaojian666/skills/biaoshu-writer-swift)\n- [百炼®标书开放 API 契约参考](references/api.md)\n- [执行细节（操作手册）](references/usage.md)\n- [知识库字段说明](references/knowledge-fields.md)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance, files]\n\n**Output Format:** [Markdown guidance, JSON results, HTML or Word reports, .docx bid documents, and short-lived download links]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Outputs may include absolute local report paths, generated .docx bid files, cloud task status, similarity findings, and account word-balance notices.]\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, 50565 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 (3014b), SKILL.md (15170b), _meta.json (140b)\n\nFile v1.0.15:SKILL.md\n\n---\nname: biaoshu-writer-swift\ndescription: 主打「一键」体验。自动解读招标文件要点，随即生成成品投标文件(.docx)，自动排版并标出待填项，再做一遍合规自查。当用户明确提供招标/投标文件并要求解读、生成或合规审查时使用；仅咨询一般性招投标问题、未提供文件时不必调用本 SKILL。文件经百炼®标书云端处理、消耗账户积分，使用前请确认用户知悉。需 App 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    - 标书生成会消耗 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=s101 ，用手机号 + 短信验证码注册并登录（新用户赠积分）；\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.15:_meta.json\n\n{\n  \"ownerId\": \"kn7dz1pzdygwz7z5fwfmrvhrnn84cs8q\",\n  \"slug\": \"biaoshu-writer-swift\",\n  \"version\": \"1.0.15\",\n  \"publishedAt\": 1787577517025\n}\n\nFile v1.0.15: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.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- 租户隔离：只能查询当前 App 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**。**不要 `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`、或打开充值链接）——不要让用户自己敲命令，也不要索取或代存用户的 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. 可选：合规审查\n```\n招标文件支持 `.pdf/.doc/.docx`；投标文件 `.doc/.docx`。全部自动轮询、实时播报后端进度。各步详解见下。\n\n## 目录\n- [第 1 步：凭证](#第-1-步凭证)\n- [第 2 步：智能解读](#第-2-步智能解读)\n- [第 3 步：抽取分包](#第-3-步抽取分包)\n- [第 4 步：生成成品标书](#第-4-步生成成品标书)\n- [第 5 步：合规审查](#第-5-步合规审查)\n- [报告生成与命名](#报告生成与命名)\n- [关键约定](#关键约定)\n\n---\n\n## 第 1 步：凭证\n\n凭证默认存在 **skill 内 `config.json`**（权限 600，含真实 Key——**绝不上传发布包/提交仓库**，发布包不含配置文件）。App Key 只从 **skill 内 config.json** 读取（路径固定，不经环境变量、无旧目录回退、不可重定向）。\n\n**只需 App Key 一项**，由用户**自行到官网获取**（本 skill 不代注册、不收集手机号/验证码）。获取全路径（转述时逐步骤完整给出，链接原样显示完整 URL）：\n打开官网 https://biaoshu.zhiliaobiaoxun.com/ → 手机号 + 短信验证码注册并登录（新用户赠积分）→ 点**左侧菜单『Skill 接入 → 获取 APP Key』**，在弹出面板中查看/复制 App 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积分不足时脚本会打印引导，照原样转达给用户，由用户**自行登录官网充值**后回到对话继续，App Key 全程不变：充值入口 `https://biaoshu.zhiliaobiaoxun.com/recharge`（用注册手机号登录后操作）。\n\n- 🔒 **凭证保护（强制）**：平台 402 错误体里的 `recharge_url` / `bind_url` **携带明文 `bind_key`（即用户的 App 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 <路径>`；想长期固定 → `login --output-dir <目录>`。\n- 不指定 → 默认 skill 包同级 `biaoshu-bailian-files/`，文件名 `招标文件名_投标文件.docx`（招标文件名从本地缓存取，取不到退化 `bid_<job_id>.docx`）。\n\n```bash\npython3 scripts/zcm.py generate <project_id> --package-ids 11,12 --total-pages 80 -o 投标文件.docx\n# 非多包：python3 scripts/zcm.py generate <project_id>\n```\n- 存放目录优先级：`-o` > `ZCM_OUTPUT_DIR` > `login` 存的 `output_dir` > 默认 `biaoshu-bailian-files/`。\n- 自动轮询（默认超时 3600s，`--timeout` 可调）。完成后打印**成品完整路径**+所在目录，**两项都告诉用户**。\n- 后端会按「选包 → 抽需求 → 生成大纲 → 生成正文 → 填充制式模板 → 导出」串行完成；页数规划会综合分包结构、技术/商务内容、表格和图表，`total_pages` 最高 500。\n- 制式表格/范本会尽量自动填充；无法确认的公司资料、日期、报价、签章等信息会保留为待填项，不要替用户编造。\n- **跟用户解释积分时分两层说**：解读 / 合规 / 生成三个入口提交前都会先看余额，余额 < 1 会被拦住；但**真正扣积分的只有生成**。不要把“余额门槛”说成“解读/合规也扣积分”。\n- ⏱ **生成可能耗时 >10 分钟**（实测 30 页约 15 分钟）。脚本本身轮询不会超时，但**前端/工具调用常有 ~10 分钟上限**会把命令杀掉——**注意：后端任务不受影响、仍在跑，切勿重新提交（会重复扣费）**。长任务推荐：`generate <pid> --no-wait` 拿 `job_id`，再用 `progress-stream <job_id>`（配合 Monitor 后台实时播报）续查到终态，最后 `result <job_id> -o <路径>` 下载并打印全路径。万一命令被杀，用同一 `job_id` 续查即可，不要重发 generate。\n\n## 第 5 步：合规审查\n\n要**两样输入，都要让用户提供**：\n1. **招标文件**（`.pdf/.doc/.docx`）→ 经第 2 步解读产出 `project_id`；已解读则复用，不重传。\n2. **投标文件**：**一份或多份** `.doc/.docx`，被审查对象（仅本地路径），**每份 ≤ 1024 MB**。\n\n```bash\npython3 scripts/zcm.py compliance <project_id> /path/投标A.docx /path/投标B.docx\n# 暗标/电子标：加 --blind / --electronic\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## 报告生成与命名\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\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\n```\n- **默认只出 HTML**；用户明确要 Word 才 `docx`/`both`。\n- 命名：`招标文件名_智能解读` / `招标文件名_合规审查`。取名优先级：`--name` > 结果自动识别（`original_filename` / `project_info.项目名称` / 本地缓存）> `标签_时间戳`。\n  - `interpret` 自动用上传文件名；`generate` 自动用缓存名；**`compliance`/`report --job` 拿不到招标文件名时务必带 `--name`**，否则退化时间戳。\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）统一走以下三步：\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% 准备文档」→「20% 解读中」→「完成」）。Monitor 的 description 用正常任务名，**不带「重试」等临时标签**——即使是 worker_lost 后重新提交的 job，新 job 已正常运行，描述应反映当前状态而非历史原因。\n  3. **取结果 + 生成报告 + 输出路径**：Monitor 收到 `[完成]` 后必须主动补齐后处理，三类任务各有对应步骤：\n     - `interpret`：`result <job_id>`（提取 project_id）→ `report --job <job_id> --format html`（生成解读报告）→ 输出报告全路径\n     - `generate`：`result <job_id> -o <路径>.docx`（下载标书）→ 输出 docx 全路径\n     - `compliance`：`result <job_id>`（打合规摘要）→ `report --job <job_id> --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.15:skill-card.md\n\n## Description:\n\n标书自动撰写工具 helps users interpret tender documents, generate formatted .docx bid drafts, and review bid files for compliance using the 百炼®标书 cloud service.\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 bid teams use this skill to analyze tender files, generate editable bid documents, and review bid submissions for compliance risks. The skill is intended for cases where the user explicitly provides local tender or bid files and asks for interpretation, drafting, or compliance review.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Tender and bid documents can contain commercial, pricing, and personal information and are uploaded to the 百炼®标书 service for processing.\n\nMitigation: Use the skill only with user-selected local files after the user understands and accepts the cloud processing and account-based retention.\n\nRisk: The App Key can access account-scoped bid workflows and limited company knowledge-base fields.\n\nMitigation: Keep the App Key in the local skill configuration, never place it in chat, and rotate it immediately if exposed.\n\nRisk: Generated bid documents and compliance findings may contain待填项, incomplete semantic review status, or recommendations that require domain judgment.\n\nMitigation: Require human review before bid submission and clearly distinguish final results from partial or pending compliance review output.\n\nRisk: Bid-document generation consumes account credits and long-running generation should not be resubmitted blindly.\n\nMitigation: Confirm generation intent before starting, monitor job progress, and resume existing jobs instead of submitting duplicates.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chichihaixiaojian666/skills/biaoshu-writer-swift)\n- [Publisher profile](https://clawhub.ai/user/chichihaixiaojian666)\n- [百炼®标书 service](https://biaoshu.zhiliaobiaoxun.com/)\n- [Open API contract reference](references/api.md)\n- [Usage and operation reference](references/usage.md)\n- [Knowledge-base field reference](references/knowledge-fields.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Files, Guidance]\n\n**Output Format:** [Markdown text with generated HTML or Word reports and .docx bid documents]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Produces local file paths for interpretation reports, compliance reports, and generated bid documents; requires a user-managed App Key and user-selected local files.]\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: 7 files, 46997 bytes\n\nFiles: references/api.md (14812b), references/usage.md (15752b), scripts/report.py (36782b), scripts/zcm.py (34395b), skill-card.md (2891b), SKILL.md (13820b), _meta.json (140b)\n\nFile v1.0.14:SKILL.md\n\n---\nname: biaoshu-writer-swift\ndescription: 主打「一键」体验。自动解读招标文件要点，随即生成成品投标文件(.docx)，自动排版并标出待填项，再做一遍合规自查。当用户明确提供招标/投标文件并要求解读、生成或合规审查时使用；仅咨询一般性招投标问题、未提供文件时不必调用本 SKILL。文件经百炼®标书云端处理、消耗账户积分，使用前请确认用户知悉。需 App Key（官网注册赠积分）。\nallowed-tools: Read, Write, Bash(python3 scripts/zcm.py:*)\nmetadata:\n  permissions:\n    network:\n      - biaoshu.zhiliaobiaoxun.com（百炼®标书 API，唯一外联目标）\n    filesystem:\n      read: 仅用户明确提供的招标/投标文件与本 skill 自身脚本\n      write: biaoshu-bailian-files/（产物）；config.json（skill 内凭证，权限 600，logout 可删）\n    environment:\n      - ZCM_BASE / ZCM_HOME / ZCM_OUTPUT_DIR（可选：仅地址与输出路径覆盖，不含凭证；凭证路径固定为 skill 内 config.json，不可由环境变量重定向）\n    billing: 标书生成消耗 App Key 所属账户积分（提交前预检余额）\n    not-collected: 设备信息 / 手机号 / 验证码 / App Key 绝不经环境变量读取（仅本地 config.json）/ 除上述 ZCM_* 外的任何环境变量\n---\n\n# 标书自动撰写工具\n\n> Locale / language scope: This skill is designed for mainland-China bidding workflows and Chinese tender documents. You may explain steps in the user's language when needed, but platform menu names, risk labels, report headings, and generated report artifacts currently remain in Simplified Chinese (zh-CN).\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=s101 ，用手机号 + 短信验证码注册并登录（新用户赠积分）；\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-swift\",\n  \"version\": \"1.0.14\",\n  \"publishedAt\": 1787053533281\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 / 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### 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- **来源标记**：经开放 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/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`、或打开充值链接）——不要让用户自己敲命令，也不要索取或代存用户的 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. 可选：合规审查\n```\n招标文件支持 `.pdf/.doc/.docx`；投标文件 `.doc/.docx`。全部自动轮询、实时播报后端进度。各步详解见下。\n\n## 目录\n- [第 1 步：凭证](#第-1-步凭证)\n- [第 2 步：智能解读](#第-2-步智能解读)\n- [第 3 步：抽取分包](#第-3-步抽取分包)\n- [第 4 步：生成成品标书](#第-4-步生成成品标书)\n- [第 5 步：合规审查](#第-5-步合规审查)\n- [报告生成与命名](#报告生成与命名)\n- [关键约定](#关键约定)\n\n---\n\n## 第 1 步：凭证\n\n凭证默认存在 **skill 内 `config.json`**（权限 600，含真实 Key——**绝不上传发布包/提交仓库**，发布包不含配置文件）。App Key 只从 **skill 内 config.json** 读取（路径固定，不经环境变量、无旧目录回退、不可重定向）。\n\n**只需 App Key 一项**，由用户**自行到官网获取**（本 skill 不代注册、不收集手机号/验证码）。获取全路径（转述时逐步骤完整给出，链接原样显示完整 URL）：\n打开官网 https://biaoshu.zhiliaobiaoxun.com/ → 手机号 + 短信验证码注册并登录（新用户赠积分）→ 点**左侧菜单『Skill 接入 → 获取 APP Key』**，在弹出面板中查看/复制 App 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积分不足时脚本会打印引导，照原样转达给用户，由用户**自行登录官网充值**后回到对话继续，App Key 全程不变：充值入口 `https://biaoshu.zhiliaobiaoxun.com/recharge`（用注册手机号登录后操作）。\n\n- 🔒 **凭证保护（强制）**：平台 402 错误体里的 `recharge_url` / `bind_url` **携带明文 `bind_key`（即用户的 App 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 <路径>`；想长期固定 → `login --output-dir <目录>`。\n- 不指定 → 默认 skill 包同级 `biaoshu-bailian-files/`，文件名 `招标文件名_投标文件.docx`（招标文件名从本地缓存取，取不到退化 `bid_<job_id>.docx`）。\n\n```bash\npython3 scripts/zcm.py generate <project_id> --package-ids 11,12 --total-pages 80 -o 投标文件.docx\n# 非多包：python3 scripts/zcm.py generate <project_id>\n```\n- 存放目录优先级：`-o` > `ZCM_OUTPUT_DIR` > `login` 存的 `output_dir` > 默认 `biaoshu-bailian-files/`。\n- 自动轮询（默认超时 3600s，`--timeout` 可调）。完成后打印**成品完整路径**+所在目录，**两项都告诉用户**。\n- 后端会按「选包 → 抽需求 → 生成大纲 → 生成正文 → 填充制式模板 → 导出」串行完成；页数规划会综合分包结构、技术/商务内容、表格和图表，`total_pages` 最高 500。\n- 制式表格/范本会尽量自动填充；无法确认的公司资料、日期、报价、签章等信息会保留为待填项，不要替用户编造。\n- **跟用户解释积分时分两层说**：解读 / 合规 / 生成三个入口提交前都会先看余额，余额 < 1 会被拦住；但**真正扣积分的只有生成**。不要把“余额门槛”说成“解读/合规也扣积分”。\n- ⏱ **生成可能耗时 >10 分钟**（实测 30 页约 15 分钟）。脚本本身轮询不会超时，但**前端/工具调用常有 ~10 分钟上限**会把命令杀掉——**注意：后端任务不受影响、仍在跑，切勿重新提交（会重复扣费）**。长任务推荐：`generate <pid> --no-wait` 拿 `job_id`，再用 `progress-stream <job_id>`（配合 Monitor 后台实时播报）续查到终态，最后 `result <job_id> -o <路径>` 下载并打印全路径。万一命令被杀，用同一 `job_id` 续查即可，不要重发 generate。\n\n## 第 5 步：合规审查\n\n要**两样输入，都要让用户提供**：\n1. **招标文件**（`.pdf/.doc/.docx`）→ 经第 2 步解读产出 `project_id`；已解读则复用，不重传。\n2. **投标文件**：**一份或多份** `.doc/.docx`，被审查对象（仅本地路径），**每份 ≤ 1024 MB**。\n\n```bash\npython3 scripts/zcm.py compliance <project_id> /path/投标A.docx /path/投标B.docx\n# 暗标/电子标：加 --blind / --electronic\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## 报告生成与命名\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\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\n```\n- **默认只出 HTML**；用户明确要 Word 才 `docx`/`both`。\n- 命名：`招标文件名_智能解读` / `招标文件名_合规审查`。取名优先级：`--name` > 结果自动识别（`original_filename` / `project_info.项目名称` / 本地缓存）> `标签_时间戳`。\n  - `interpret` 自动用上传文件名；`generate` 自动用缓存名；**`compliance`/`report --job` 拿不到招标文件名时务必带 `--name`**，否则退化时间戳。\n- 报告内容依赖后端按 [api.md 附录 A/B](api.md) 返回完整结果；合规 HTML 总览会展示检查范围、结论、语义审查状态和部分结果摘要；`/result` 只回句柄或字段空时，报告注明「无明细」而不报错。\n\n## 关键约定\n\n- **必须输出完整路径**：解读报告 / 成品标书 / 合规报告生成后，把**每个文件的完整绝对路径**逐行告诉用户（脚本已用「已生成…/已下载…」打印绝对路径，照搬即可）——**不要只说落在某目录**。\n- **进度播报（两阶段，必须这样做才能实时）**：Bash 工具不流式传输 stderr，`--no-wait` + `progress-stream` + Monitor 是唯一能让用户看到实时进度的方式。长任务（interpret / generate / compliance）统一走以下三步：\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% 准备文档」→「20% 解读中」→「完成」）。Monitor 的 description 用正常任务名，**不带「重试」等临时标签**——即使是 worker_lost 后重新提交的 job，新 job 已正常运行，描述应反映当前状态而非历史原因。\n  3. **取结果 + 生成报告 + 输出路径**：Monitor 收到 `[完成]` 后必须主动补齐后处理，三类任务各有对应步骤：\n     - `interpret`：`result <job_id>`（提取 project_id）→ `report --job <job_id> --format html`（生成解读报告）→ 输出报告全路径\n     - `generate`：`result <job_id> -o <路径>.docx`（下载标书）→ 输出 docx 全路径\n     - `compliance`：`result <job_id>`（打合规摘要）→ `report --job <job_id> --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.14:skill-card.md\n\n## Description:\n\nThis skill helps agents analyze Chinese tender documents, generate editable bid documents, and run compliance reviews through the 百炼®标书 cloud service after the user supplies local files and an App Key.\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 bid teams, procurement-support staff, and their agents use this skill to process mainland-China tender documents, create draft bid packages, and check bid documents for compliance risks before submission.\n\n### Deployment Geography for Use:\n\nMainland China\n\n## Known Risks and Mitigations:\n\nRisk: Tender and bid documents may contain confidential business, pricing, or personal data and are uploaded to the 百炼®标书 cloud service.\n\nMitigation: Use the skill only after the user understands and accepts cloud processing, and avoid uploading documents outside the intended tender workflow.\n\nRisk: The App Key is stored locally and can authorize account activity and point consumption if exposed.\n\nMitigation: Have the user create the local config file themselves, never request or echo the App Key in chat, keep file permissions restrictive, and reset the key if exposure is suspected.\n\nRisk: API traffic can be redirected away from the disclosed service endpoint if an alternate base URL is intentionally configured.\n\nMitigation: Use the official 百炼®标书 endpoint by default and configure an alternate endpoint only when it is explicitly trusted with both documents and credentials.\n\nRisk: Generated bid drafts and compliance findings can be incomplete, stale, or unsuitable for a specific procurement submission.\n\nMitigation: Require human review before submission, especially for eligibility, pricing, signatures, legal terms, and all marked placeholders.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chichihaixiaojian666/skills/biaoshu-writer-swift)\n- [百炼®标书 service](https://biaoshu.zhiliaobiaoxun.com/)\n- [Usage guide](artifact/references/usage.md)\n- [Open API contract reference](artifact/references/api.md)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Files, Shell commands, Configuration, Guidance]\n\n**Output Format:** [Markdown responses plus generated HTML, Word, and DOCX files]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Generated bid documents may take more than 10 minutes and can contain placeholders that require user review and completion.]\n\n## Skill Version(s):\n\n1.0.14 (source: server release metadata)\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.13: 7 files, 44514 bytes\n\nFiles: references/api.md (14387b), references/usage.md (14830b), scripts/report.py (33234b), scripts/zcm.py (33755b), skill-card.md (2687b), SKILL.md (13180b), _meta.json (140b)\n\nFile v1.0.13:SKILL.md\n\n---\nname: biaoshu-writer-swift\ndescription: 主打「一键」体验。自动解读招标文件要点，随即生成成品投标文件(.docx)，自动排版并标出待填项，再做一遍合规自查。当用户明确提供招标/投标文件并要求解读、生成或合规审查时使用；仅咨询一般性招投标问题、未提供文件时不必调用本 SKILL。文件经百炼®标书云端处理、消耗账户积分，使用前请确认用户知悉。需 App Key（官网注册赠积分）。\nallowed-tools: Read, Write, Bash(python3 scripts/zcm.py:*)\nmetadata:\n  permissions:\n    network:\n      - biaoshu.zhiliaobiaoxun.com（百炼®标书 API，唯一外联目标）\n    filesystem:\n      read: 仅用户明确提供的招标/投标文件与本 skill 自身脚本\n      write: biaoshu-bailian-files/（产物）；config.json（skill 内凭证，权限 600，logout 可删）\n    environment:\n      - ZCM_BASE / ZCM_HOME / ZCM_OUTPUT_DIR（可选：仅地址与输出路径覆盖，不含凭证；凭证路径固定为 skill 内 config.json，不可由环境变量重定向）\n    billing: 标书生成消耗 App Key 所属账户积分（提交前预检余额）\n    not-collected: 设备信息 / 手机号 / 验证码 / App Key 绝不经环境变量读取（仅本地 config.json）/ 除上述 ZCM_* 外的任何环境变量\n---\n\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=s101 ，用手机号 + 短信验证码注册并登录（新用户赠积分）；\n2. 登录后点**左侧菜单『Skill 接入 → 获取 APP Key』**，在弹出面板中**查看/复制 App Key**（首次打开自动生成，形如 `bk_live\n\nArchive v1.0.12: 7 files, 43843 bytes\n\nFiles: references/api.md (13786b), references/usage.md (14338b), scripts/report.py (33234b), scripts/zcm.py (34394b), skill-card.md (2739b), SKILL.md (12463b), _meta.json (140b)\n\nArchive v1.0.11: 7 files, 45566 bytes\n\nFiles: references/api.md (14763b), references/usage.md (14338b), scripts/report.py (33234b), scripts/zcm.py (37257b), skill-card.md (2970b), SKILL.md (12432b), _meta.json (140b)\n\nArchive v1.0.10: 7 files, 45414 bytes\n\nFiles: references/api.md (14763b), references/usage.md (14338b), scripts/report.py (33234b), scripts/zcm.py (37257b), skill-card.md (3246b), SKILL.md (12432b), _meta.json (140b)\n\nArchive v1.0.9: 7 files, 51340 bytes\n\nFiles: references/api.md (17638b), references/usage.md (17201b), scripts/report.py (33234b), scripts/zcm.py (52346b), skill-card.md (2856b), SKILL.md (11106b), _meta.json (139b)\n\nArchive v1.0.8: 7 files, 45997 bytes\n\nFiles: references/api.md (15106b), references/usage.md (15341b), scripts/report.py (33226b), scripts/zcm.py (37935b), skill-card.md (2966b), SKILL.md (11828b), _meta.json (139b)","readmeExcerpt":"Skill: 标书自动撰写工具 Owner: chichihaixiaojian666 Summary: 上传招标/投标文件，AI 一站式完成智能解读（废标红线/评分标准/控标洞察）、成品投标文件(.docx)生成、标书审查（分级风险+雷同检测）和标书查重（2-3份投标文件相似/雷同风险检查）。覆盖投标、招标、标书、投标文件、竞标、围标、控标、废标、评分标准、资格条件、技术标、商务标、暗标、响应文件、应答文件、雷同检测、相似检查、标书查重等场景——当用户提供或提及招标/投标文件、问「这个标能不能投 / 有哪些废标红线 / 帮我写投标书 / 检查标书有没有问题 / 两份投标文件像不像 / 会不会被判雷同」，或想解读招标文件、生成投标文件、做标书审查或查重时使用。需百炼®标书 Api Key（官网注册 Tags: latest:1.0.17 Version history: v1.0.17 | 2026-09-16T08:34:48","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-swift\",\n  \"version\": \"1.0.17\",\n  \"publishedAt\": 1789547688131\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:34:48","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1356,"uniquenessScore":47,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T17:02:09.856Z","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-09T17:02:09.856Z","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-10T05:28:14.481Z","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"}]}}}