{"id":"bf8a260e-534d-4e98-8be7-ae0d8b911a84","entityType":"agent","slug":"clawhub-liu-jiapeng-biaoshu-writer-transit","name":"投标文件智能编写","canonicalUrl":"https://www.xpersona.co/agent/clawhub-liu-jiapeng-biaoshu-writer-transit","canonicalPath":"/agent/clawhub-liu-jiapeng-biaoshu-writer-transit","generatedAt":"2026-10-11T10:53:54.944Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T08:44:32.429Z","emptyReason":null},"description":"凭 App Key 调用招采猫开放 API，完成「招标文件智能解读 → 抽取分包 → 生成成品投标文件(.docx) → 可选合规审查」的端到端标书制作。当用户明确提供招标文件并希望生成投标文件/标书、对已生成标书做合规检查、或询问招采猫标书相关能力时使用。注意：招标/投标文件会上传到招采猫云端 API 处理，标书生成消耗账户积分；使用前请确认用户知悉。本 skill 是招采猫线上接口的轻客户端，不复刻其算法。 Skill: 投标文件智能编写 Owner: liu-jiapeng Summary: 凭 App Key 调用招采猫开放 API，完成「招标文件智能解读 → 抽取分包 → 生成成品投标文件(.docx) → 可选合规审查」的端到端标书制作。当用户明确提供招标文件并希望生成投标文件/标书、对已生成标书做合规检查、或询问招采猫标书相关能力时使用。注意：招标/投标文件会上传到招采猫云端 API 处理，标书生成消耗账户积分；使用前请确认用户知悉。本 skill 是招采猫线上接口的轻客户端，不复刻其算法。 Tags: latest:2.0.5 Version history: v2.0.5 | 2026-07-11T15:13:12.858Z | user biaoshu-writer-transit 2.0.5 - 移除 skill-card.md 文件。 - 更新权限说明，仅允许访问招采猫 API（biaoshu.zhiliaobi","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.1K downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s178hbet5kwyvdjvs8p9pvgw1x83w07t:biaoshu-writer-transit","sourceUrl":"https://clawhub.ai/liu-jiapeng/biaoshu-writer-transit","homepage":"https://clawhub.ai/liu-jiapeng/skills/biaoshu-writer-transit","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/liu-jiapeng/biaoshu-writer-transit","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/liu-jiapeng/skills/biaoshu-writer-transit","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":61,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"凭 App Key 调用招采猫开放 API，完成「招标文件智能解读 → 抽取分包 → 生成成品投标文件(.docx) → 可选合规审查」的端到端标书制作。当用户明确提供招标文件并希望生成投标文件/标书、对已生成标书做合规检查、或询问招采猫标书相关能力时使用。注意：招标/投标文件会上传到招采猫云端 API 处理，标书生成"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T08:44:32.429Z","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-11T08:44:32.429Z","emptyReason":null},"stars":null,"forks":null,"downloads":1109,"packageName":null,"latestVersion":"2.0.5","tractionLabel":"1.1K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T08:44:32.415Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T08:44:32.429Z","lastCrawledAt":"2026-10-11T08:44:32.415Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T08:44:32.415Z","lastVerifiedAt":null,"highlights":[{"version":"2.0.5","createdAt":"2026-07-11T15:13:12.858Z","changelog":"biaoshu-writer-transit 2.0.5 - 移除 skill-card.md 文件。 - 更新权限说明，仅允许访问招采猫 API（`biaoshu.zhiliaobiaoxun.com`），不再支持任意云端文件抓取。 - 本地读写路径调整，凭证文件修改为 `~/.zcm/config.json`，产物路径不变。 - 明确上传数据在招采猫服务器存留约 7 天，可登录官网管理。 - 强化隐私保护：禁止回复中出现 App Key 或含 App Key 的链接，新增独立凭证文件配置说明，避免自动保存方式泄露风险。 - 智能解读现仅支持本地文件路径，禁止由助手主动抓取云端文件，请用户自行下载。","fileCount":7,"zipByteSize":42621},{"version":"2.0.1","createdAt":"2026-07-11T06:01:47.340Z","changelog":"更新描述： - 强化了对用户输出的规则：「产物必须逐个给绝对全路径」成为输出铁律，用户每次都会拿到文件的完整绝对路径，禁止用目录名代替。 - 安装成功介绍和“能干什么/怎么拿 App Key”问答，需同时输出完整“怎么获取 App Key”步骤（含粘贴示例）和所有功能的详细使用示例，缺一不可，不可删减。 - 明确禁止输出命令、后台操作和配置指引到用户界面，包括进度、报错转述等。 - 优化了文档措辞，补充了绝对全路径展示的场景说明，全部产物需明确举例路径形态。 - 核心功能、权限说明与原有能力保持一致。","fileCount":7,"zipByteSize":42006},{"version":"1.0.0","createdAt":"2026-07-07T23:02:47.695Z","changelog":"biaoshu-writer-transit v1.0.0 - 首次发布，提供投标文件智能编写与全流程自动化工具。 - 支持凭 App Key 一键生成技术标与商务标，包含三大核心功能：智能解读、标书制作、合规审查。 - 投标文件自动提取、结构化分析，支持本地或云端招标文件，最大支持 50MB。 - 支持投标文件(.docx)自动生成与合规性多维检查，输出结构化报告，可直接导出 HTML/Word。 - 完善的错误提示，未获取 App Key 时自动引导领取，多注册方式选择。 - 所有结果文件会返回绝对全路径，支持断点续查与平台同步查看。","fileCount":7,"zipByteSize":41909}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s178hbet5kwyvdjvs8p9pvgw1x83w07t:biaoshu-writer-transit","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","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-liu-jiapeng-biaoshu-writer-transit/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liu-jiapeng-biaoshu-writer-transit/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liu-jiapeng-biaoshu-writer-transit/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-liu-jiapeng-biaoshu-writer-transit/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-liu-jiapeng-biaoshu-writer-transit/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-liu-jiapeng-biaoshu-writer-transit/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-11T10:53:54.943Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liu-jiapeng-biaoshu-writer-transit/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liu-jiapeng-biaoshu-writer-transit/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liu-jiapeng-biaoshu-writer-transit/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-liu-jiapeng-biaoshu-writer-transit/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-11T08:44:32.429Z","emptyReason":null},"readme":"Skill: 投标文件智能编写\n\nOwner: liu-jiapeng\n\nSummary: 凭 App Key 调用招采猫开放 API，完成「招标文件智能解读 → 抽取分包 → 生成成品投标文件(.docx) → 可选合规审查」的端到端标书制作。当用户明确提供招标文件并希望生成投标文件/标书、对已生成标书做合规检查、或询问招采猫标书相关能力时使用。注意：招标/投标文件会上传到招采猫云端 API 处理，标书生成消耗账户积分；使用前请确认用户知悉。本 skill 是招采猫线上接口的轻客户端，不复刻其算法。\n\nTags: latest:2.0.5\n\nVersion history:\n\nv2.0.5 | 2026-07-11T15:13:12.858Z | user\n\nbiaoshu-writer-transit 2.0.5\n\n- 移除 skill-card.md 文件。\n- 更新权限说明，仅允许访问招采猫 API（`biaoshu.zhiliaobiaoxun.com`），不再支持任意云端文件抓取。\n- 本地读写路径调整，凭证文件修改为 `~/.zcm/config.json`，产物路径不变。\n- 明确上传数据在招采猫服务器存留约 7 天，可登录官网管理。\n- 强化隐私保护：禁止回复中出现 App Key 或含 App Key 的链接，新增独立凭证文件配置说明，避免自动保存方式泄露风险。\n- 智能解读现仅支持本地文件路径，禁止由助手主动抓取云端文件，请用户自行下载。\n\nv2.0.1 | 2026-07-11T06:01:47.340Z | user\n\n更新描述：\n\n- 强化了对用户输出的规则：「产物必须逐个给绝对全路径」成为输出铁律，用户每次都会拿到文件的完整绝对路径，禁止用目录名代替。\n- 安装成功介绍和“能干什么/怎么拿 App Key”问答，需同时输出完整“怎么获取 App Key”步骤（含粘贴示例）和所有功能的详细使用示例，缺一不可，不可删减。\n- 明确禁止输出命令、后台操作和配置指引到用户界面，包括进度、报错转述等。\n- 优化了文档措辞，补充了绝对全路径展示的场景说明，全部产物需明确举例路径形态。\n- 核心功能、权限说明与原有能力保持一致。\n\nv1.0.0 | 2026-07-07T23:02:47.695Z | auto\n\nbiaoshu-writer-transit v1.0.0\n\n- 首次发布，提供投标文件智能编写与全流程自动化工具。\n- 支持凭 App Key 一键生成技术标与商务标，包含三大核心功能：智能解读、标书制作、合规审查。\n- 投标文件自动提取、结构化分析，支持本地或云端招标文件，最大支持 50MB。\n- 支持投标文件(.docx)自动生成与合规性多维检查，输出结构化报告，可直接导出 HTML/Word。\n- 完善的错误提示，未获取 App Key 时自动引导领取，多注册方式选择。\n- 所有结果文件会返回绝对全路径，支持断点续查与平台同步查看。\n\nArchive index:\n\nArchive v2.0.5: 7 files, 42621 bytes\n\nFiles: references/api.md (13569b), references/usage.md (14251b), scripts/report.py (33226b), scripts/zcm.py (33153b), skill-card.md (2928b), SKILL.md (10519b), _meta.json (141b)\n\nFile v2.0.5:SKILL.md\n\n---\nname: biaoshu-bailian\ndescription: 凭 App Key 调用招采猫开放 API，完成「招标文件智能解读 → 抽取分包 → 生成成品投标文件(.docx) → 可选合规审查」的端到端标书制作。当用户明确提供招标文件并希望生成投标文件/标书、对已生成标书做合规检查、或询问招采猫标书相关能力时使用。注意：招标/投标文件会上传到招采猫云端 API 处理，标书生成消耗账户积分；使用前请确认用户知悉。本 skill 是招采猫线上接口的轻客户端，不复刻其算法。\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/（产物）；~/.zcm/config.json（凭证，权限 600，logout 可删）\n    environment:\n      - ZCM_APP_KEY（可选：App Key，替代凭证文件）\n      - ZCM_BASE / ZCM_CONFIG / ZCM_HOME / ZCM_OUTPUT_DIR（可选：地址与路径覆盖）\n    billing: 标书生成消耗 App Key 所属账户积分（提交前预检余额）\n    not-collected: 设备信息 / 手机号 / 验证码 / 除上述 ZCM_* 外的任何环境变量\n---\n\n# 百炼招采猫 · 标书制作 Skill\n\n凭 **App Key** 调用招采猫开放 API，完成投标全流程。所有任务走「**提交 → 自动轮询 → 取结果**」统一异步模型，以 App Key 所属用户身份执行（复用其知识库与积分钱包）。底层由零依赖 Python 客户端封装鉴权、轮询与友好错误码（具体命令见 [references/usage.md](references/usage.md)）。\n\n## 🚫 对用户输出的第一铁律（优先级最高，覆盖本文档其余所有内容）\n\n- 本 skill 的一切命令（`python3 …`、`zcm.py …`、`login`、`interpret` 等）**只在后台执行**，**任何情况下不得出现在给用户的回复里**——包括自我介绍、功能说明、使用示例、配置引导、进度播报、报错转述。\n- 用户只需要做三件事：**提供文件、说需求、粘贴 App Key**。命令全部由你（助手）代跑。\n- 用户问「怎么用 / 给我些示例」时，**只展示下方各功能「使用示例」里的场景话术**（用户怎么说 → 得到什么），并告诉他「把文件给我、直接说需求即可」。[references/usage.md](references/usage.md) 里的命令是你的后台操作手册，**不是可以展示给用户的内容**。\n- **安装成功后的介绍、或用户问「这个 skill 能干什么 / 怎么拿 App Key」时，输出必须包含两块，缺一不可**：\n  ① **怎么获取 App Key**——「开始前你需要」的获取四步，**尤其第 4 步的粘贴示例话术**（「我的 App Key 是 bk_live_xxxxx，帮我保存一下」）必须原样出现；\n  ② **有什么功能**——「三大功能」小节，**尤其各功能「使用示例」的场景话术和「用户得到」**必须完整出现。\n  两块都**优先原文照抄**，不要改写成摘要；示例是强制项，任何精简都不得省略示例。\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/`；凭证存 `~/.zcm/config.json`（权限 600，skill 目录之外）。\n- **数据留存**：上传的文件与产出结果以 App Key 所属账户身份**留存在招采猫服务器**——任务结果与成品 .docx 约 7 天后过期，历史数据可登录官网查看管理。\n- **计费**：标书生成消耗 App Key 所属账户的积分，提交前脚本会预检余额。\n- **环境变量**：仅读取上方 frontmatter 声明的 `ZCM_*` 可选配置项，不读取其他任何环境变量。\n- **不采集**：本 skill 不采集设备信息、不代注册账号、不收集手机号/验证码。\n\n## 开始前你需要\n\n招采猫 `App Key`（形如 `bk_live_xxxxx`），由用户**自行到官网获取**。获取全路径（向用户转述时**逐步骤完整给出**，链接必须原样显示完整 URL，不要写成「招采猫平台」之类的链接文字）：\n\n1. 打开官网 https://biaoshu.zhiliaobiaoxun.com/\n2. 用手机号 + 短信验证码注册并登录（新用户赠积分）；\n3. 登录后点**左侧菜单『开放 API』**，在弹出面板中**生成/查看 App Key**（形如 `bk_live_xxxxx`；重置后旧 Key 立即失效）；\n4. 把 Key 直接粘贴到对话里让助手保存（下次免输），例如：「我的 App Key 是 bk_live_xxxxx，帮我保存一下」。（助手收到后在后台保存并提醒下面这条注意事项——按第一铁律，保存用的命令不得出现在回复里。）\n\n> 🔒 注意：粘贴到对话里的 Key 会留在会话记录中（自动保存方式的已知风险，转述时告知用户）。介意的用户可**手动配置**：自行创建凭证文件 `~/.zcm/config.json`（完整全路径），内容为 `{\"app_key\": \"bk_live_xxxxx\"}`，Key 全程不经对话。Key 泄露或想作废时，随时到官网左侧菜单『开放 API』重置（旧 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  - 用户得到：「参与建议：谨慎参与 · 控标风险：高 · 废标红线 30 条 · 技术主观分占 45%」等解读要点 + 报告绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_智能解读.html`）（后续制作/审查自动复用该项目，无需重传）。\n\n### 📝 标书制作\n- **输入**：已解读项目 + 选定分包（多包时）；可指定目标页数。\n- **输出**：成品投标文件 `.docx`——按招标文件名自动命名，含目录、章节与「待填项」定位书签。（此步消耗积分。）\n- **使用示例**（用户可以这样说）：\n  - 「就用刚才解读的项目，帮我生成投标文件」\n  - 「选 01 包，生成一份 80 页左右的标书，存到桌面」\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  - 用户得到：「高风险 0 · 待复核 39 · 提示 25」+ 一句话结论与整改建议 + 报告绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_合规审查.html`）（多份文件时含雷同检测结果）。\n\n> 报告采用 editorial 版式（侧栏目录、风险统计、卡片化问题与证据），HTML 可离线打开、可打印。\n\n智能解读、标书生成、合规审查的结果均可同步在百炼招采猫平台查看：<https://biaoshu.zhiliaobiaoxun.com/>\n\n## 进一步\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 v2.0.5:_meta.json\n\n{\n  \"ownerId\": \"kn71v36r333vaarytqgdse3ews83wx7b\",\n  \"slug\": \"biaoshu-writer-transit\",\n  \"version\": \"2.0.5\",\n  \"publishedAt\": 1783782792858\n}\n\nFile v2.0.5:references/api.md\n\n# 招采猫开放 API 契约参考\n\n> **契约兼容标注（skill biaoshu-bailian 2.0.5）**\n> - 适配后端 API：`/api/open/v1`\n> - 契约核对日期：2026-07-06（后端字段/枚举变化时更新此处并 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- [8 个端点详情](#8-个端点详情)\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/> 注册 →『账户 → 开放 API』生成 Key。\n  App Key 可随时在『账户 → 开放 API』面板查看；重置后旧 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- **结果时效**：任务结果与 .docx 默认保留约 7 天，过期取结果返回 404 `result_expired`。⚠️ 这意味着**结果在此期间留存于招采猫服务器**（第三方存储）；上传文件与历史数据以账户身份存于平台，用户可登录官网查看管理——向用户交代结果时请一并说明。\n\n## 8 个端点详情\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\":300}}\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### 积分前置闸门（提交时 402）\n\n积分余额 < 1 时，`POST /interpretations`、`POST /bid-documents/{pid}/generate`、\n`POST /projects/{pid}/compliance-reviews` 三个计费入口在**提交时**直接返回 402\n`insufficient_balance`（错误体含上述引导字段），充值或绑定手机号领积分后方可操作；\n抽包（packages）与查询类接口不受限。skill 侧提交前也会先调 `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`。\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报告推荐布局：总览 → 风险摘要(summary) → 高风险问题(issues 高) → 待人工复核(result_type=semantic) → 格式提示(低) → 多文件相似度 → 人工核查清单。`scripts/report.py` 已实现此布局。\n\nFile v2.0.5: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> 反例（禁止）：`python3 scripts/zcm.py generate <pid> > out.json 2> log` —— 这会同时藏掉进度和成品全路径。\n\n3. **凭证/积分类提示不要把命令与 exit 码原样抛给用户**：缺 Key（exit 2）、积分不足（402）这类脚本输出是给你（助手）看的提示。你应当把它翻译成一句「用户下一步该做什么」（去官网拿 Key / 打开绑定或充值链接），保存 Key 的 `login` 命令由你代跑——不要让用户自己敲命令。\n4. **本手册里的一切命令永不面向用户**（SKILL.md 第一铁律）：命令只在后台执行；向用户介绍功能或举例时，用 SKILL.md 各功能「使用示例」的场景话术（用户怎么说 → 得到什么），不要把本文件的命令、参数、代码块贴进回复。\n\n## 用法速查（完整流程）\n\n```bash\npython3 scripts/zcm.py login --app-key bk_live_xxx   # 1. 配凭证（存 ~/.zcm/config.json；或环境变量）\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凭证默认存在 **`~/.zcm/config.json`**（skill 目录之外，权限 600，不随 skill 分发）。读取优先级：环境变量 > 凭证文件。`ZCM_CONFIG` 可改凭证文件路径。\n\n**只需 App Key 一项**，由用户**自行到官网获取**（本 skill 不代注册、不收集手机号/验证码）。获取全路径（转述时逐步骤完整给出，链接原样显示完整 URL）：\n打开官网 https://biaoshu.zhiliaobiaoxun.com/ → 手机号 + 短信验证码注册并登录（新用户赠积分）→ 点**左侧菜单『开放 API』**，在弹出面板中生成/查看 App Key（形如 `bk_live_xxxxx`，重置后旧 Key 立即失效）。\n\n**配置方式（任选其一）**：\n1. 用户把 Key 粘贴到对话后，**由你代跑** `login --app-key bk_live_xxx` 保存（自动建/更新凭证文件，权限 600）——别把这条命令丢给用户自己敲。⚠️ 同时提醒：粘贴的 Key 会留在会话记录中，介意可用方式 3 手动配置。\n2. 临时用环境变量：`export ZCM_APP_KEY=bk_live_xxx`（首次会自动落盘到凭证文件）。\n3. **手动配置（Key 全程不经对话，最私密）**：用户自行创建凭证文件 **`~/.zcm/config.json`**（完整全路径，`~` 为用户主目录），内容模板如下，保存后建议 `chmod 600`：\n   ```json\n   {\"app_key\": \"bk_live_xxxxx\"}\n   ```\n   （可选字段：`base` 自定义 API 地址、`output_dir` 成品存放目录。）向用户介绍此方式时把**文件全路径和模板**原样给出。\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- `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- ⏱ **生成可能耗时 >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`（风险计数 + 一句话结论）、`issues[]`（风险等级/招标依据/投标证据/修改建议）、`similarity_issues[]`（多文件雷同）、`manual_items[]`（人工核查清单）。优先讲高风险与结论。字段见 [api.md 附录 B](api.md)。\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) 返回完整结果；`/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）**：脚本只打印**不含凭证参数的官网充值链接**，照原样转达即可；错误体里带 `bind_key` 的 `recharge_url`/`bind_url` 一律不转发（见第 1 步「凭证保护」）。\n\nFile v2.0.5:skill-card.md\n\n## Description:\n\n该 skill 调用招采猫开放 API，对本地招标文件进行智能解读、分包抽取和 .docx 投标文件生成，并可对投标文件执行合规审查。\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[liu-jiapeng](https://clawhub.ai/user/liu-jiapeng)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and agents use this skill to prepare bids by converting local tender documents into structured analysis, package selection, generated bid-document drafts, and compliance review reports. It is suited to workflows where the user has a 招采猫 App Key and has agreed to upload tender or bid files to that service.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Tender and bid files can contain confidential commercial, pricing, or personal data and are uploaded to the 招采猫 service.\n\nMitigation: Use the skill only when the user trusts the publisher and service, and confirm the user understands and agrees to the upload before processing files.\n\nRisk: The App Key can be exposed if pasted into chat or if key-bearing recharge or binding URLs are forwarded.\n\nMitigation: Prefer manually creating ~/.zcm/config.json with restrictive permissions, never echo the App Key or key-bearing URLs in responses, and reset the App Key if exposure is suspected.\n\nRisk: A custom API endpoint can redirect documents and credentials away from the expected 招采猫 production service.\n\nMitigation: Inspect ~/.zcm/config.json and environment overrides before use, and avoid custom API endpoints unless the user fully controls and trusts them.\n\nRisk: Bid generation consumes credits from the App Key owner's account.\n\nMitigation: Check balance and confirm the user's intent before starting generation jobs.\n\n## Reference(s):\n\n- [Skill usage guide](references/usage.md)\n- [招采猫开放 API 契约参考](references/api.md)\n- [ClawHub skill page](https://clawhub.ai/liu-jiapeng/skills/biaoshu-writer-transit)\n- [招采猫 service](https://biaoshu.zhiliaobiaoxun.com/)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Files]\n\n**Output Format:** [Chinese-language guidance, JSON API results, HTML or Word reports, and .docx bid documents]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Generated bid documents consume account credits. User-provided tender and bid files are uploaded to 招采猫, and task results and generated documents are retained by that service for about 7 days.]\n\n## Skill Version(s):\n\n2.0.5 (source: server release metadata, artifact/scripts/zcm.py, and artifact/references/api.md)\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 v2.0.1: 7 files, 42006 bytes\n\nFiles: references/api.md (12800b), references/usage.md (13693b), scripts/report.py (33226b), scripts/zcm.py (36087b), skill-card.md (2560b), SKILL.md (9797b), _meta.json (141b)\n\nFile v2.0.1:SKILL.md\n\n---\nname: biaoshu-bailian\ndescription: 凭 App Key 调用招采猫开放 API，完成「招标文件智能解读 → 抽取分包 → 生成成品投标文件(.docx) → 可选合规审查」的端到端标书制作。当用户明确提供招标文件并希望生成投标文件/标书、对已生成标书做合规检查、或询问招采猫标书相关能力时使用。注意：招标/投标文件会上传到招采猫云端 API 处理，标书生成消耗账户积分；使用前请确认用户知悉。本 skill 是招采猫线上接口的轻客户端，不复刻其算法。\nallowed-tools: Read, Write, Bash(python3 scripts/zcm.py:*)\nmetadata:\n  permissions:\n    network:\n      - biaoshu.zhiliaobiaoxun.com（招采猫 API；另有用户主动提供的云端文件 URL 下载）\n    filesystem:\n      read: 仅用户明确提供的招标/投标文件与本 skill 自身脚本\n      write: biaoshu-bailian-files/（产物）；~/.zcm/credentials.json（凭证，权限 600，logout 可删）\n    environment:\n      - ZCM_APP_KEY（可选：App Key，替代凭证文件）\n      - ZCM_BASE / ZCM_CONFIG / ZCM_HOME / ZCM_OUTPUT_DIR（可选：地址与路径覆盖）\n    billing: 标书生成消耗 App Key 所属账户积分（提交前预检余额）\n    not-collected: 设备信息 / 手机号 / 验证码 / 除上述 ZCM_* 外的任何环境变量\n---\n\n# 百炼招采猫 · 标书制作 Skill\n\n凭 **App Key** 调用招采猫开放 API，完成投标全流程。所有任务走「**提交 → 自动轮询 → 取结果**」统一异步模型，以 App Key 所属用户身份执行（复用其知识库与积分钱包）。底层由零依赖 Python 客户端封装鉴权、轮询与友好错误码（具体命令见 [references/usage.md](references/usage.md)）。\n\n## 🚫 对用户输出的第一铁律（优先级最高，覆盖本文档其余所有内容）\n\n- 本 skill 的一切命令（`python3 …`、`zcm.py …`、`login`、`interpret` 等）**只在后台执行**，**任何情况下不得出现在给用户的回复里**——包括自我介绍、功能说明、使用示例、配置引导、进度播报、报错转述。\n- 用户只需要做三件事：**提供文件、说需求、粘贴 App Key**。命令全部由你（助手）代跑。\n- 用户问「怎么用 / 给我些示例」时，**只展示下方各功能「使用示例」里的场景话术**（用户怎么说 → 得到什么），并告诉他「把文件给我、直接说需求即可」。[references/usage.md](references/usage.md) 里的命令是你的后台操作手册，**不是可以展示给用户的内容**。\n- **安装成功后的介绍、或用户问「这个 skill 能干什么 / 怎么拿 App Key」时，输出必须包含两块，缺一不可**：\n  ① **怎么获取 App Key**——「开始前你需要」的获取四步，**尤其第 4 步的粘贴示例话术**（「我的 App Key 是 bk_live_xxxxx，帮我保存一下」）必须原样出现；\n  ② **有什么功能**——「三大功能」小节，**尤其各功能「使用示例」的场景话术和「用户得到」**必须完整出现。\n  两块都**优先原文照抄**，不要改写成摘要；示例是强制项，任何精简都不得省略示例。\n- **产物必须逐个给绝对全路径**：解读报告 / 成品标书 / 合规报告每次产出后，把**每个文件的完整绝对路径**（形如 `/Users/you/biaoshu-bailian-files/某项目_智能解读.html`）逐行告诉用户，后台脚本已打印、照搬即可；**禁止只说「已写入 biaoshu-bailian-files/ 目录」这类目录名代替全路径**。\n\n## ⚠️ 权限与数据说明（首次使用前告知用户）\n\n- **文件外发**：用户提供的招标/投标文件会**上传至招采猫服务器**（`biaoshu.zhiliaobiaoxun.com`）处理。此类文件常含商业、报价与个人信息，上传前须确认用户知悉并同意。\n- **网络访问**：仅访问上述招采猫域名（API 调用），以及下载用户主动提供的云端文件 URL，无其他外联。\n- **本地读写**：读取用户指定的文件；产物（标书/报告）写入 `biaoshu-bailian-files/`；凭证存 `~/.zcm/credentials.json`（权限 600，skill 目录之外）。\n- **计费**：标书生成消耗 App Key 所属账户的积分，提交前脚本会预检余额。\n- **环境变量**：仅读取上方 frontmatter 声明的 `ZCM_*` 可选配置项，不读取其他任何环境变量。\n- **不采集**：本 skill 不采集设备信息、不代注册账号、不收集手机号/验证码。\n\n## 开始前你需要\n\n招采猫 `App Key`（形如 `bk_live_xxxxx`），由用户**自行到官网获取**。获取全路径（向用户转述时**逐步骤完整给出**，链接必须原样显示完整 URL，不要写成「招采猫平台」之类的链接文字）：\n\n1. 打开官网 https://biaoshu.zhiliaobiaoxun.com/\n2. 用手机号 + 短信验证码注册并登录（新用户赠积分）；\n3. 登录后点**左侧菜单『开放 API』**，在弹出面板中**生成/查看 App Key**（形如 `bk_live_xxxxx`；重置后旧 Key 立即失效）；\n4. 把 Key 直接粘贴到对话里让助手保存（下次免输），例如：「我的 App Key 是 bk_live_xxxxx，帮我保存一下」。（助手收到后在后台保存并提醒下面这条注意事项——按第一铁律，保存用的命令不得出现在回复里。）\n\n> 🔒 注意：粘贴到对话里的 Key 会留在会话记录中；Key 泄露或想作废时，随时到官网左侧菜单『开放 API』重置（旧 Key 立即失效）。\n\n无 Key 时各功能会打印上述获取指引而非崩溃。配置命令见 [references/usage.md](references/usage.md)（仅供助手后台使用）。\n\n## 三大功能\n\n### 🔍 智能解读\n- **输入**：招标文件（`.pdf` / `.doc` / `.docx`，**≤ 50 MB**），本地路径或云端 URL（云端文件会先下载到本地再处理）。\n- **输出**：8 维度结构化解读——项目信息 / 合标项 / 废标红线 / 评分标准 / 关键要求 / 商务条款 / 报价要求 / 采购背景；外加**控标洞察**（参与建议、控标信号、行动建议）。可导出解读报告（HTML / Word）。\n- **使用示例**（用户可以这样说）：\n  - 「帮我解读这份招标文件 `/Users/me/某采购项目招标文件.pdf`」\n  - 「看看这个标能不能投？有哪些废标红线？文件在 `https://example.com/某项目招标文件.pdf`」\n  - 「分析一下这份招标文件的评分标准和控标风险，顺便出一份解读报告」\n  - 用户得到：「参与建议：谨慎参与 · 控标风险：高 · 废标红线 30 条 · 技术主观分占 45%」等解读要点 + 报告绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_智能解读.html`）（后续制作/审查自动复用该项目，无需重传）。\n\n### 📝 标书制作\n- **输入**：已解读项目 + 选定分包（多包时）；可指定目标页数。\n- **输出**：成品投标文件 `.docx`——按招标文件名自动命名，含目录、章节与「待填项」定位书签。（此步消耗积分。）\n- **使用示例**（用户可以这样说）：\n  - 「就用刚才解读的项目，帮我生成投标文件」\n  - 「选 01 包，生成一份 80 页左右的标书，存到桌面」\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  - 用户得到：「高风险 0 · 待复核 39 · 提示 25」+ 一句话结论与整改建议 + 报告绝对全路径（形如 `/Users/you/biaoshu-bailian-files/某采购项目招标文件_合规审查.html`）（多份文件时含雷同检测结果）。\n\n> 报告采用 editorial 版式（侧栏目录、风险统计、卡片化问题与证据），HTML 可离线打开、可打印。\n\n智能解读、标书生成、合规审查的结果均可同步在百炼招采猫平台查看：<https://biaoshu.zhiliaobiaoxun.com/>\n\n## 进一步\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 v2.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn71v36r333vaarytqgdse3ews83wx7b\",\n  \"slug\": \"biaoshu-writer-transit\",\n  \"version\": \"2.0.1\",\n  \"publishedAt\": 1783749707340\n}\n\nFile v2.0.1:references/api.md\n\n# 招采猫开放 API 契约参考\n\n> **契约兼容标注（skill biaoshu-bailian 2.0.3）**\n> - 适配后端 API：`/api/open/v1`\n> - 契约核对日期：2026-07-06（后端字段/枚举变化时更新此处并 bump 版本）\n> - 关键枚举快照：`risk_level ∈ {high, review, tip}` · `result_type ∈ {suspected, detected}` · `priority ∈ {high, medium, low}`\n> - 渲染兼容策略：`report.py` 同时兼容文档值（高/中/低）与实测值、证据多形态、缺字段不崩——契约小幅漂移只需 PATCH，不触发 MAJOR。\n\n`scripts/zcm.py` 已封装下列全部端点；本文档供需要直接发请求、排查错误或理解返回结构时查阅。\n所有契约均经后端源码 + 本地实跑核实。\n\n## 目录\n- [鉴权与环境](#鉴权与环境)\n- [核心模型与约定](#核心模型与约定)\n- [8 个端点详情](#8-个端点详情)\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/> 注册 →『账户 → 开放 API』生成 Key。\n  App Key 可随时在『账户 → 开放 API』面板查看；重置后旧 Key 立即失效。\n\n## 核心模型与约定\n\n- **project_id**：统一句柄，由「智能解读」产出，是**唯一的招标文件上传入口**。后续抽包 / 生成 / 合规复用同一 project，不重复解读、不重复计费。\n- **job_id**：每个异步任务的对外句柄。提交类接口立即返回 `{ \"job_id\": \"...\" }`。\n- **任务状态**：`queued` → `running` → `succeeded` / `failed` / `canceled`。\n- **上传方式**（所有上传类接口二选一）：\n  - `multipart/form-data` 直传文件；\n  - JSON `{ \"file_url\": \"https://...\" }`（远程下载，**仅 https、禁内网/回环、限大小与类型**，违规 422）。\n- **限流**：每 App Key 默认 60 req/min、同时进行任务 ≤ 3；超限 429。\n- **统一错误体**：`{ \"error\": { \"code\": \"...\", \"message\": \"...\" } }`\n- **计费**：仅在 ③生成（正文逐条 + 导出）发生一次；①解读、②抽包不扣费，仅受限流约束。\n- **结果时效**：任务结果与 .docx 默认保留约 7 天，过期取结果返回 404 `result_expired`。\n\n## 8 个端点详情\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）**或** JSON `{\"file_url\":\"https://...\"}`。\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\":300}}\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）**或** JSON `{\"file_urls\":[...],\"is_blind_bid\":false,\"is_electronic_bid\":false}`。\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`\n（`https://biaoshu.zhiliaobiaoxun.com/register?bind_key=<app_key>`）；\n`recharge_url` 追加 `?bind_key=<app_key>`。\n\n### 积分前置闸门（提交时 402）\n\n积分余额 < 1 时，`POST /interpretations`、`POST /bid-documents/{pid}/generate`、\n`POST /projects/{pid}/compliance-reviews` 三个计费入口在**提交时**直接返回 402\n`insufficient_balance`（错误体含上述引导字段），充值或绑定手机号领积分后方可操作；\n抽包（packages）与查询类接口不受限。skill 侧提交前也会先调 `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` | 文件缺失/类型不支持 / file_url 非 https 或指向内网 / 缺 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`。\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报告推荐布局：总览 → 风险摘要(summary) → 高风险问题(issues 高) → 待人工复核(result_type=semantic) → 格式提示(低) → 多文件相似度 → 人工核查清单。`scripts/report.py` 已实现此布局。\n\nFile v2.0.1:references/usage.md\n\n# 执行细节（操作手册）\n\n本文件是**执行任务时的完整操作指引**——做解读/制作/合规、生成报告、处理边界情形时按需查阅。接口契约与返回字段见 [api.md](api.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> 反例（禁止）：`python3 scripts/zcm.py generate <pid> > out.json 2> log` —— 这会同时藏掉进度和成品全路径。\n\n3. **凭证/积分类提示不要把命令与 exit 码原样抛给用户**：缺 Key（exit 2）、积分不足（402）这类脚本输出是给你（助手）看的提示。你应当把它翻译成一句「用户下一步该做什么」（去官网拿 Key / 打开绑定或充值链接），保存 Key 的 `login` 命令由你代跑——不要让用户自己敲命令。\n4. **本手册里的一切命令永不面向用户**（SKILL.md 第一铁律）：命令只在后台执行；向用户介绍功能或举例时，用 SKILL.md 各功能「使用示例」的场景话术（用户怎么说 → 得到什么），不要把本文件的命令、参数、代码块贴进回复。\n\n## 用法速查（完整流程）\n\n```bash\npython3 scripts/zcm.py login --app-key bk_live_xxx   # 1. 配凭证（存 ~/.zcm/credentials.json；或环境变量）\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凭证默认存在 **`~/.zcm/credentials.json`**（skill 目录之外，权限 600，不随 skill 分发）。读取优先级：环境变量 > 凭证文件。`ZCM_CONFIG` 可改凭证文件路径。\n\n**只需 App Key 一项**，由用户**自行到官网获取**（本 skill 不代注册、不收集手机号/验证码）。获取全路径（转述时逐步骤完整给出，链接原样显示完整 URL）：\n打开官网 https://biaoshu.zhiliaobiaoxun.com/ → 手机号 + 短信验证码注册并登录（新用户赠积分）→ 点**左侧菜单『开放 API』**，在弹出面板中生成/查看 App Key（形如 `bk_live_xxxxx`，重置后旧 Key 立即失效）。\n\n**配置方式（任选其一）**：\n1. 用户把 Key 发你后，**由你代跑** `login --app-key bk_live_xxx` 保存（自动建/更新凭证文件，权限 600）——别把这条命令丢给用户自己敲。\n2. 临时用环境变量：`export ZCM_APP_KEY=bk_live_xxx`（首次会自动落盘到凭证文件）。\n\n- 缺凭证时脚本会打印官网获取指引并退出（码 2），把指引转述给用户即可。\n- 先 `python3 scripts/zcm.py me` 确认连通与积分余额（生成会扣分）。\n\n### 积分不足（402，给用户自助链接，skill 不代办）\n\n积分不足时脚本会打印引导（含链接），照原样转达给用户，**二选一均由用户自己在网页完成**，App Key 全程不变：\n\n1. **未绑手机号**：给「注册即绑定」链接（脚本 402 输出里的 `bind_url`，形如 `https://biaoshu.zhiliaobiaoxun.com/register?bind_key=<当前 App Key>`）。用户在网页注册手机号即把新账号绑定到**这枚现有 Key**，+200 积分、Key 不变，回到对话直接继续，**无需再 login**。\n2. **充值**：用脚本输出的 `recharge_url`。\n\n- ⛔ **禁止**：已有 Key 的用户，别引导他去官网首页「另注册新账号 / 另生成新 Key 再 `login` 切换」——那会把积分留在一个**孤立的新账号**上、还得换 Key。官网首页 `https://biaoshu.zhiliaobiaoxun.com/`（不带 `bind_key`）只给**完全没有任何 Key** 的新用户。\n- **别凭空写站点首页当充值/绑定入口**；充值用脚本输出的 `recharge_url`，绑定用带 `bind_key` 的链接。\n\n## 第 2 步：智能解读\n\n唯一招标文件入口；只在这步传一次，后续全程复用 `project_id`。\n\n```bash\npython3 scripts/zcm.py interpret /path/招标文件.pdf      # 本地路径，或 http(s) URL\n```\n- 支持 `.pdf/.doc/.docx`，**≤ 50 MB**（超限脚本提前报错）。自动轮询，结束打印 `project_id`（**记下它**）+ **完整解读结果**。\n- **云端文件先下载到本地再处理**：传入 URL 时，脚本会先把文件下载到 `biaoshu-bailian-files/_downloads/`（拿到真实文件名、绕开后端远程下载的 https/内网/大小限制），再按本地文件上传。文件名也据此自动命名报告。\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- `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- ⏱ **生成可能耗时 >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`，被审查对象（本地路径或 http(s) URL），**每份 ≤ 1024 MB**。\n\n```bash\npython3 scripts/zcm.py compliance <project_id> /path/投标A.docx /path/投标B.docx\n# 暗标/电子标：加 --blind / --electronic\n```\n- 投标文件传 URL 时，**同样先逐个下载到本地再上传**（落 `biaoshu-bailian-files/_downloads/`）。\n- **直接把合规结果展示给用户**——含 `summary`（风险计数 + 一句话结论）、`issues[]`（风险等级/招标依据/投标证据/修改建议）、`similarity_issues[]`（多文件雷同）、`manual_items[]`（人工核查清单）。优先讲高风险与结论。字段见 [api.md 附录 B](api.md)。\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) 返回完整结果；`/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）**：错误体带 `phone_bound` / `bind_url`（未绑手机号时）——脚本会打印自助链接：未绑手机号先给「网页注册即绑定领 200 积分」链接（App Key 不变），已绑则直接给充值链接（`recharge_url`，携带 `bind_key`）。均由用户自行在网页完成。\n\nFile v2.0.1:skill-card.md\n\n## Description: <br>\nThis skill uses a Zhaocaimiao App Key to help users interpret tender documents, extract bid packages, generate .docx bid documents, and optionally review bid documents for compliance. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[liu-jiapeng](https://clawhub.ai/user/liu-jiapeng) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nProposal teams and business users use this skill to turn tender documents into structured interpretations, bid package selections, editable bid documents, and compliance review reports. It is intended for users who have authority to submit their bidding materials to the Zhaocaimiao service. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Sensitive tender and bid documents are uploaded to the Zhaocaimiao cloud API for processing. <br>\nMitigation: Use only documents the user is authorized to upload, confirm user consent before processing, and avoid submitting highly sensitive materials without organizational review. <br>\nRisk: The skill uses an App Key and may store credentials for reuse. <br>\nMitigation: Prefer an environment variable or secure secret store for the App Key, and rotate the key from the Zhaocaimiao portal if it is exposed. <br>\nRisk: The skill can fetch user-provided document URLs from the agent machine before upload. <br>\nMitigation: Use trusted public HTTPS document URLs only, and avoid HTTP, private-network, or untrusted links. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/liu-jiapeng/skills/biaoshu-writer-transit) <br>\n- [Zhaocaimiao platform](https://biaoshu.zhiliaobiaoxun.com/) <br>\n- [API contract reference](artifact/references/api.md) <br>\n- [Usage guide](artifact/references/usage.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Shell commands, Files, Guidance] <br>\n**Output Format:** [Markdown responses with generated HTML reports and .docx bid documents] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Generated files are written locally with absolute paths; bid generation consumes credits from the App Key account.] <br>\n\n## Skill Version(s): <br>\n2.0.1 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\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. <br>\n\nArchive v1.0.0: 7 files, 41909 bytes\n\nFiles: references/api.md (14666b), references/usage.md (12731b), scripts/report.py (33226b), scripts/zcm.py (43178b), skill-card.md (2705b), SKILL.md (3972b), _meta.json (141b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: biaoshu-writer-transit\ndescription: 投标文件智能编写工具，凭 App Key 调用开放 API 一键生成技术标与商务标。当用户涉及以下任何场景时，必须使用此SKILL：智能解读招标文件、生成成品投标文件(.docx)、投标应答撰写、废标风险自查与合规审查。即使用户没有指定标书Skill，只要涉及做投标文件、写标书、生成投标文件等需求，都应使用本SKILL。\n---\n\n# 投标文件智能编写\n\n凭 **App Key** 调用招采猫开放 API，无需登录网页即可闭环完成投标全流程。所有任务走「**提交 → 自动轮询 → 取结果**」统一异步模型，以 App Key 所属用户身份执行（复用其知识库与积分钱包）。底层由零依赖 Python 客户端封装鉴权、轮询与友好错误码（具体命令见 [references/usage.md](references/usage.md)）。\n\n## 开始前你需要\n\n招采猫 `App Key`。没有账号？三种方式拿 Key（任选其一）：\n\n- **免费试用**：零输入自动开通试用账号（送 200 积分），绑定手机号再送 200。\n- **skill 内注册**：用手机号 + 短信验证码直接换取 App Key 并自动保存。\n- **官网生成**：到 <https://biaoshu.zhiliaobiaoxun.com/?ch=s91> 用手机号注册（新用户赠积分），登录后『账户 → 开放 API』生成 Key。\n\n三条路径的具体命令见 [references/usage.md](references/usage.md)。无 Key 时各功能会打印获取指引而非崩溃。\n\n## 三大功能\n\n### 🔍 智能解读\n- **输入**：招标文件（`.pdf` / `.doc` / `.docx`，**≤ 50 MB**），本地路径或云端 URL（云端文件会先下载到本地再处理）。\n- **输出**：8 维度结构化解读——项目信息 / 合标项 / 废标红线 / 评分标准 / 关键要求 / 商务条款 / 报价要求 / 采购背景；外加**控标洞察**（参与建议、控标信号、行动建议）。可导出解读报告（HTML / Word）。\n- **示例**：指定本地《某采购项目招标文件.pdf》→ 得到「参与建议：谨慎参与 · 控标风险：高 · 废标红线 30 条 · 技术主观分占 45%」等，并生成《某采购项目_智能解读.html》。\n\n### 📝 标书制作\n- **输入**：已解读项目 + 选定分包（多包时）；可指定目标页数。\n- **输出**：成品投标文件 `.docx`——按招标文件名自动命名，含目录、章节与「待填项」定位书签。（此步消耗积分。）\n- **示例**：解读后选定「01 包」→ 生成《某采购项目_投标文件.docx》，可直接编辑填充。\n\n### ✅ 合规审查\n- **输入**：招标文件（已解读）+ **一份或多份**投标文件（`.doc` / `.docx`，每份 **≤ 1024 MB**）。\n- **输出**：分级风险问题清单（高风险 / 待复核 / 提示，每条带招标依据、投标证据、修改建议）+ 多文件雷同检测 + 人工核查清单。可导出合规报告。\n- **示例**：审查《某项目_投标文件.docx》→ 得到「高风险 0 · 待复核 39 · 提示 25」+ 一句话结论与整改建议，并生成《某项目_合规审查.html》。\n\n> 报告采用 editorial 版式（侧栏目录、风险统计、卡片化问题与证据），HTML 可离线打开、可打印。\n\n智能解读、标书生成、合规审查的结果均可同步在百炼招采猫平台查看：<https://biaoshu.zhiliaobiaoxun.com/>\n\n## 进一步\n\n- **执行任务前先读** [references/usage.md](references/usage.md)：各步参数、命名规则、计费与凭证规则、报告/边界情形、断点续查、幂等、错误处理。\n- **输出铁律**（除非用户明确说不要）：运行脚本时进度照常显示、不重定向吞掉；解读/标书/合规结果文件的**绝对全路径**必须打印给用户。详见 usage.md 顶部「⚠️ 输出约定」。\n- **接口契约**（8 端点、错误码、解读/合规返回字段附录 A·B）→ 见 [references/api.md](references/api.md)。\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn71v36r333vaarytqgdse3ews83wx7b\",\n  \"slug\": \"biaoshu-writer-transit\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1783465367695\n}\n\nFile v1.0.0:references/api.md\n\n# 招采猫开放 API 契约参考\n\n> **契约兼容标注（skill biaoshu-bailian 1.1.0）**\n> - 适配后端 API：`/api/open/v1`\n> - 契约核对日期：2026-07-06（后端字段/枚举变化时更新此处并 bump 版本）\n> - 关键枚举快照：`risk_level ∈ {high, review, tip}` · `result_type ∈ {suspected, detected}` · `priority ∈ {high, medium, low}`\n> - 渲染兼容策略：`report.py` 同时兼容文档值（高/中/低）与实测值、证据多形态、缺字段不崩——契约小幅漂移只需 PATCH，不触发 MAJOR。\n\n`scripts/zcm.py` 已封装下列全部端点；本文档供需要直接发请求、排查错误或理解返回结构时查阅。\n所有契约均经后端源码 + 本地实跑核实。\n\n## 目录\n- [鉴权与环境](#鉴权与环境)\n- [核心模型与约定](#核心模型与约定)\n- [8 个端点详情](#8-个端点详情)\n- [错误码速查](#错误码速查)\n- [注意事项](#注意事项)\n- [纯 curl 备用调用](#纯-curl-备用调用)\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/> 注册 →『账户 → 开放 API』生成 Key。\n  App Key 可随时在『账户 → 开放 API』面板查看；重置后旧 Key 立即失效。\n\n## 核心模型与约定\n\n- **project_id**：统一句柄，由「智能解读」产出，是**唯一的招标文件上传入口**。后续抽包 / 生成 / 合规复用同一 project，不重复解读、不重复计费。\n- **job_id**：每个异步任务的对外句柄。提交类接口立即返回 `{ \"job_id\": \"...\" }`。\n- **任务状态**：`queued` → `running` → `succeeded` / `failed` / `canceled`。\n- **上传方式**（所有上传类接口二选一）：\n  - `multipart/form-data` 直传文件；\n  - JSON `{ \"file_url\": \"https://...\" }`（远程下载，**仅 https、禁内网/回环、限大小与类型**，违规 422）。\n- **限流**：每 App Key 默认 60 req/min、同时进行任务 ≤ 3；超限 429。\n- **统一错误体**：`{ \"error\": { \"code\": \"...\", \"message\": \"...\" } }`\n- **计费**：仅在 ③生成（正文逐条 + 导出）发生一次；①解读、②抽包不扣费，仅受限流约束。\n- **结果时效**：任务结果与 .docx 默认保留约 7 天，过期取结果返回 404 `result_expired`。\n\n## 8 个端点详情\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）**或** JSON `{\"file_url\":\"https://...\"}`。\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\":300}}\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）**或** JSON `{\"file_urls\":[...],\"is_blind_bid\":false,\"is_electronic_bid\":false}`。\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### `POST /open/v1/trial-accounts`（无鉴权）\n\n设备指纹开通试用账号；同设备（指纹或 MAC 相同）幂等返回原 Key。\n\n请求：`{\"device\": {\"hostname\": \"\", \"platform\": \"\", \"arch\": \"\", \"username\": \"\", \"home_path\": \"\", \"mac_hash\": \"\"}}`\n（6 项均为字符串，采集失败传空串；全空 → 422 fingerprint_required。）\n\n响应：`{\"app_key\": \"bk_live_...\", \"wallet_balance\": 200, \"is_new\": true}`\n\n错误：422 `fingerprint_required`（全空指纹）；429 `trial_limit_exceeded`（**每个 IP / 每个 MAC 终身仅限自动开通 1 个**，改走手机号注册）。\n\n### `POST /open/v1/auth/register` 变更\n\n入参新增可选 `trial_app_key`：手机号未注册且 Key 对应试用账号（无 phone）时，\n绑定到该账号（Key 不变、+200），响应含 `\"bound\": true`；其余情形自动忽略该参数。\n\n### 402 insufficient_balance 错误体新增字段\n\n`phone_bound`（bool）；未绑手机号时另有 `bind_url`\n（`https://biaoshu.zhiliaobiaoxun.com/register?bind_key=<app_key>`）；\n`recharge_url` 追加 `?bind_key=<app_key>`。\n\n### 积分前置闸门（提交时 402）\n\n积分余额 < 1 时，`POST /interpretations`、`POST /bid-documents/{pid}/generate`、\n`POST /projects/{pid}/compliance-reviews` 三个计费入口在**提交时**直接返回 402\n`insufficient_balance`（错误体含上述引导字段），充值或绑定手机号领积分后方可操作；\n抽包（packages）与查询类接口不受限。skill 侧提交前也会先调 `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` | 文件缺失/类型不支持 / file_url 非 https 或指向内网 / 缺 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## 纯 curl 备用调用\n\n`zcm.py` 不可用时的等价命令（`$BASE`/`$KEY` 见上）：\n\n```bash\nexport BASE=\"https://biaoshu.zhiliaobiaoxun.com/api/open/v1\"\nH=(-H \"X-App-Key: $KEY\")\n\ncurl -s \"${H[@]}\" \"$BASE/me\"                                              # 连通+余额\ncurl -s \"${H[@]}\" -F \"file=@招标文件.pdf\" \"$BASE/interpretations\"          # 解读\ncurl -s \"${H[@]}\" -X POST \"$BASE/bid-documents/<pid>/packages\"           # 抽包\ncurl -s \"${H[@]}\" -H \"Content-Type: application/json\" \\\n  -d '{\"package_ids\":[11,12],\"total_pages\":80}' \\\n  -X POST \"$BASE/bid-documents/<pid>/generate\"                           # 生成\ncurl -s \"${H[@]}\" \"$BASE/jobs/<jid>\"                                     # 查状态\ncurl -s \"${H[@]}\" \"$BASE/jobs/<jid>/result\" -o 投标文件.docx              # 下载成品\ncurl -s \"${H[@]}\" -F \"bid_files=@投标文件.docx\" \\\n  -X POST \"$BASE/projects/<pid>/compliance-reviews\"                      # 合规\n```\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`。\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报告推荐布局：总览 → 风险摘要(summary) → 高风险问题(issues 高) → 待人工复核(result_type=semantic) → 格式提示(低) → 多文件相似度 → 人工核查清单。`scripts/report.py` 已实现此布局。\n\nFile v1.0.0:references/usage.md\n\n# 执行细节（操作手册）\n\n本文件是**执行任务时的完整操作指引**——做解读/制作/合规、生成报告、处理边界情形时按需查阅。接口契约与返回字段见 [api.md](api.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> 反例（禁止）：`python3 scripts/zcm.py generate <pid> > out.json 2> log` —— 这会同时藏掉进度和成品全路径。\n\n## 用法速查（完整流程）\n\n```bash\ncp config.json.example config.json && 填入 app_key   # 1. 配凭证（或用 login / 环境变量）\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`**。读取优先级：环境变量 > `config.json`（回退旧 `~/.zcm/credentials.json`）。\n\n**只需 App Key 一项**：\n\n**配置方式（任选其一）**：\n1. 复制模板：`cp config.json.example config.json`，填入 `app_key`（`base`/`output_dir` 可选）：\n   ```json\n   {\"app_key\":\"bk_live_xxxxx\",\"base\":\"\",\"output_dir\":\"\"}\n   ```\n2. 命令写入：`python3 scripts/zcm.py login --app-key bk_live_xxx`（自动建/更新 config.json，权限 600）。\n3. 临时用环境变量：`export ZCM_APP_KEY=bk_live_xxx`（首次会自动落盘到 config.json）。\n4. 没 Key 想直接注册：`python3 scripts/zcm.py register`（skill 内手机号+短信验证码换取 App Key，自动保存）。\n5. 免费试用：`python3 scripts/zcm.py trial`（自动采集设备特征开通试用账号，送 200 积分；同设备重复执行幂等返回原 Key，不重复赠分）。\n\n- 🔒 **发布安全**：`config.json` 含真实 Key——**绝不上传发布包/提交仓库**；包里只带 `config.json.example`。`ZCM_CONFIG` 可改 config.json 路径。\n- **用户没给凭证**：先索取，三选一引导——① `trial` 免费试用零输入自动开通（送 200 积分，绑定手机号再送 200）；② `register` 在 skill 内手机号注册直接拿 Key；③ 去官网 <https://biaoshu.zhiliaobiaoxun.com/> 手机号注册 →『账户 → 开放 API』生成 Key 再 `login` 保存。缺凭证时脚本自动打印这三条指引并退出（码 2）。\n- 先 `python3 scripts/zcm.py me` 确认连通与积分余额（生成会扣分）。\n\n### 绑定手机号（试用账号 +200 积分）\n\n- skill 内：`python3 scripts/zcm.py register`——已有试用 Key 时自动请求绑定，成功则 App Key 不变、+200。\n- 网页端：打开 402 响应下发的 `bind_url`（形如 `https://biaoshu.zhiliaobiaoxun.com/register?bind_key=bk_live_xxx`），手机号验证后绑定到同一账号。\n- 手机号已被注册过：返回老账号 Key 并切换，试用账号数据不迁移。\n\n## 第 2 步：智能解读\n\n唯一招标文件入口；只在这步传一次，后续全程复用 `project_id`。\n\n```bash\npython3 scripts/zcm.py interpret /path/招标文件.pdf      # 本地路径，或 http(s) URL\n```\n- 支持 `.pdf/.doc/.docx`，**≤ 50 MB**（超限脚本提前报错）。自动轮询，结束打印 `project_id`（**记下它**）+ **完整解读结果**。\n- **云端文件先下载到本地再处理**：传入 URL 时，脚本会先把文件下载到 `biaoshu-bailian-files/_downloads/`（拿到真实文件名、绕开后端远程下载的 https/内网/大小限制），再按本地文件上传。文件名也据此自动命名报告。\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- `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- ⏱ **生成可能耗时 >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`，被审查对象（本地路径或 http(s) URL），**每份 ≤ 1024 MB**。\n\n```bash\npython3 scripts/zcm.py compliance <project_id> /path/投标A.docx /path/投标B.docx\n# 暗标/电子标：加 --blind / --electronic\n```\n- 投标文件传 URL 时，**同样先逐个下载到本地再上传**（落 `biaoshu-bailian-files/_downloads/`）。\n- **直接把合规结果展示给用户**——含 `summary`（风险计数 + 一句话结论）、`issues[]`（风险等级/招标依据/投标证据/修改建议）、`similarity_issues[]`（多文件雷同）、`manual_items[]`（人工核查清单）。优先讲高风险与结论。字段见 [api.md 附录 B](api.md)。\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) 返回完整结果；`/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）**：错误体带 `phone_bound` / `bind_url`（未绑手机号时）——脚本会先引导「绑定手机号再领 200 积分」（`register`，App Key 不变），已绑则直接给充值链接（`recharge_url`，携带 `bind_key`）。\n\nFile v1.0.0:skill-card.md\n\n## Description: <br>\n投标文件智能编写工具，凭 App Key 调用开放 API 一键生成技术标与商务标，并支持招标文件智能解读、投标应答撰写、废标风险自查与合规审查。 <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[liu-jiapeng](https://clawhub.ai/user/liu-jiapeng) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nExternal users and procurement teams use this skill to interpret tender files, generate editable bid documents, and review bids for compliance risks. The skill is most relevant when a user has an App Key for the 招采猫 service and needs a command-driven workflow for bid preparation. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Tender and bid documents may be uploaded to the 招采猫 service. <br>\nMitigation: Use the skill only with documents approved for that service, and avoid submitting confidential procurement material unless the service is acceptable for the work. <br>\nRisk: The skill stores API keys locally and can create trial or registered accounts that collect phone or device-identifying data. <br>\nMitigation: Prefer an already-created App Key, choose explicit credential and output paths, protect local configuration files, and avoid the trial device-fingerprint flow unless that data collection is acceptable. <br>\nRisk: Generated bid content and compliance findings may affect procurement decisions. <br>\nMitigation: Review generated documents, reports, and suggested fixes with qualified personnel before submission or business use. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/liu-jiapeng/skills/biaoshu-writer-transit) <br>\n- [招采猫 service](https://biaoshu.zhiliaobiaoxun.com/) <br>\n- [Usage guide](references/usage.md) <br>\n- [API reference](references/api.md) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Files, Guidance] <br>\n**Output Format:** [Markdown guidance with shell commands and generated local files such as DOCX, HTML, Word reports, and JSON results.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Outputs may include absolute local file paths, progress text, structured analysis, bid documents, and compliance reports.] <br>\n\n## Skill Version(s): <br>\n1.0.0 (source: release evidence) <br>\n\n## Ethical Considerations: <br>\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. <br>","readmeExcerpt":"Skill: 投标文件智能编写 Owner: liu-jiapeng Summary: 凭 App Key 调用招采猫开放 API，完成「招标文件智能解读 → 抽取分包 → 生成成品投标文件(.docx) → 可选合规审查」的端到端标书制作。当用户明确提供招标文件并希望生成投标文件/标书、对已生成标书做合规检查、或询问招采猫标书相关能力时使用。注意：招标/投标文件会上传到招采猫云端 API 处理，标书生成消耗账户积分；使用前请确认用户知悉。本 skill 是招采猫线上接口的轻客户端，不复刻其算法。 Tags: latest:2.0.5 Version history: v2.0.5 | 2026-07-11T15:13:12.858Z | user biaoshu-writer-transit 2.0.5 - 移除 skill-card.md 文件。 - 更新权限说明，仅允许访问招采猫 API（biaoshu.zhiliaobi","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\"wallet_balance\":1397084,\n \"limits\":{\"rate_per_min\":60,\"max_concurrent_jobs\":3,\"running_jobs\":0}}"},{"language":"json","snippet":"{\"service\":\"bid_document\",\n \"result\":{\"packages\":[...],\"is_multi_package\":true,\"package_count\":2,\n           \"suggested_pages\":50,\"max_total_pages\":300}}"},{"language":"json","snippet":"{\"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\":\"...\"}"},{"language":"json","snippet":"{\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}"},{"language":"json","snippet":"{\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}"},{"language":"bash","snippet":"python3 scripts/zcm.py login --app-key bk_live_xxx   # 1. 配凭证（存 ~/.zcm/config.json；或环境变量）\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. 可选：合规审查"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: biaoshu-bailian\ndescription: 凭 App Key 调用招采猫开放 API，完成「招标文件智能解读 → 抽取分包 → 生成成品投标文件(.docx) → 可选合规审查」的端到端标书制作。当用户明确提供招标文件并希望生成投标文件/标书、对已生成标书做合规检查、或询问招采猫标书相关能力时使用。注意：招标/投标文件会上传到招采猫云端 API 处理，标书生成消耗账户积分；使用前请确认用户知悉。本 skill 是招采猫线上接口的轻客户端，不复刻其算法。\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/（产物）；~/.zcm/config.json（凭证，权限 600，logout 可删）\n    environment:\n      - ZCM_APP_KEY（可选：App Key，替代凭证文件）\n      - ZCM_BASE / ZCM_CONFIG / ZCM_HOME / ZCM_OUTPUT_DIR（可选：地址与路径覆盖）\n    billing: 标书生成消耗 App Key 所属账户积分（提交前预检余额）\n    not-collected: 设备信息 / 手机号 / 验证码 / 除上述 ZCM_* 外的任何环境变量\n---\n\n# 百炼招采猫 · 标书制作 Skill\n\n凭 **App Key** 调用招采猫开放 API，完成投标全流程。所有任务走「**提交 → 自动轮询 → 取结果**」统一异步模型，以 App Key 所属用户身份执行（复用其知识库与积分钱包）。底层由零依赖 Python 客户端封装鉴权、轮询与友好错误码（具体命令见 [references/usage.md](references/usage.md)）。\n\n## 🚫 对用户输出的第一铁律（优先级最高，覆盖本文档其余所有内容）\n\n- 本 skill 的一切命令（`python3 …`、`zcm.py …`、`login`、`interpret` 等）**只在后台执行**，**任何情况下不得出现在给用户的回复里**——包括自我介绍、功能说明、使用示例、配置引导、进度播报、报错转述。\n- 用户只需要做三件事：**提供文件、说需求、粘贴 App Key**。命令全部由你（助手）代跑。\n- 用户问「怎么用 / 给我些示例」时，**只展示下方各功能「使用示例」里的场景话术**（用户怎么说 → 得到什么），并告诉他「把文件给我、直接说需求即可」。[references/usage.md](references/usage.md) 里的命令是你的后台操作手册，**不是可以展示给用户的内容**。\n- **安装成功后的介绍、或用户问「这个 skill 能干什么 / 怎么拿 App Key」时，输出必须包含两块，缺一不可**：\n  ① **怎么获取 App Key**——「开始前你需要」的获取四步，**尤其第 4 步的粘贴示例话术**（「我的 App Key 是 bk_live_xxxxx，帮我保存一下」）必须原样出现；\n  ② **有什么功能**——「三大功能」小节，**尤其各功能「使用示例」的场景话术和「用户得到」**必须完整出现。\n  两块都**优先原文照抄**，不要改写成摘要；示例是强制项，任何精简都不得省略示例。\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/`；凭证存 `~/.zcm/config.json`（权限 600，skill 目录之外）。\n- **数据留存**：上传的文件与产出结果以 App Key 所属账户身份**留存在招采猫服务器**——任务结果与成品 .docx 约 7 天后过期，历史数据可登录官网查看管理。\n- **计费**：标书生成消耗 App Key 所属账户的积分，提交前脚本会预检余额。\n- **环境变量**：仅读取上方 frontmatter 声明的 `ZCM_*` 可选配置项，不读取其他任何环境变量。\n- **不采集**：本 skill 不采集设备信息、不代注册账号、不收集手机号/验证码。\n\n## 开始前你需要\n\n招采猫 `App Key`（形如 `bk_live_xxxxx`），由用户**自行到官网获取**。获取全路径（向用户转述时**逐步骤完整给出**，链接必须原样显示完整 URL，不要写成「招采猫平台」之类的链接文字）：\n\n1. 打开官网 https://biaoshu.zhiliaobiaoxun.com/\n2. 用手机号 + 短信验证码注册并登录（新用户赠积分）；\n3. 登录后点**左侧菜单『开放 API』**，在弹出面板中**生成/查看 App Key**（形如 `bk_live_xxxxx`；重置后旧 Key 立即失效）；\n4. 把 Key 直接粘贴到对话里让助手保存（下次免输），例如：「我的 App Key 是 bk_live_xxxxx，帮我保存一下」。（助手收到后在后台保存并提醒下面这条注意事项——按第一铁律，保存用的命令不得出现在回复里。）\n\n> 🔒 注意：粘贴到对话里的 Key 会留在会话记录中（自动保存方式的已知风险，转述时告知用户）。介意的用户可**手动配置**：自行创建凭证文件 `~/.zcm/config.json`（完整全路径），内容为 `{\"app_key\": \"bk_live_xxxxx\"}`，Key 全程不经对话。Key 泄露或想作废时，随时"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn71v36r333vaarytqgdse3ews83wx7b\",\n  \"slug\": \"biaoshu-writer-transit\",\n  \"version\": \"2.0.5\",\n  \"publishedAt\": 1783782792858\n}"},{"path":"references/api.md","content":"# 招采猫开放 API 契约参考\n\n> **契约兼容标注（skill biaoshu-bailian 2.0.5）**\n> - 适配后端 API：`/api/open/v1`\n> - 契约核对日期：2026-07-06（后端字段/枚举变化时更新此处并 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- [8 个端点详情](#8-个端点详情)\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/> 注册 →『账户 → 开放 API』生成 Key。\n  App Key 可随时在『账户 → 开放 API』面板查看；重置后旧 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- **结果时效**：任务结果与 .docx 默认保留约 7 天，过期取结果返回 404 `result_expired`。⚠️ 这意味着**结果在此期间留存于招采猫服务器**（第三方存储）；上传文件与历史数据以账户身份存于平台，用户可登录官网查看管理——向用户交代结果时请一并说明。\n\n## 8 个端点详情\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\":300}}\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\""},{"path":"references/usage.md","content":"# 执行细节（操作手册）\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> 反例（禁止）：`python3 scripts/zcm.py generate <pid> > out.json 2> log` —— 这会同时藏掉进度和成品全路径。\n\n3. **凭证/积分类提示不要把命令与 exit 码原样抛给用户**：缺 Key（exit 2）、积分不足（402）这类脚本输出是给你（助手）看的提示。你应当把它翻译成一句「用户下一步该做什么」（去官网拿 Key / 打开绑定或充值链接），保存 Key 的 `login` 命令由你代跑——不要让用户自己敲命令。\n4. **本手册里的一切命令永不面向用户**（SKILL.md 第一铁律）：命令只在后台执行；向用户介绍功能或举例时，用 SKILL.md 各功能「使用示例」的场景话术（用户怎么说 → 得到什么），不要把本文件的命令、参数、代码块贴进回复。\n\n## 用法速查（完整流程）\n\n```bash\npython3 scripts/zcm.py login --app-key bk_live_xxx   # 1. 配凭证（存 ~/.zcm/config.json；或环境变量）\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凭证默认存在 **`~/.zcm/config.json`**（skill 目录之外，权限 600，不随 skill 分发）。读取优先级：环境变量 > 凭证文件。`ZCM_CONFIG` 可改凭证文件路径。\n\n**只需 App Key 一项**，由用户**自行到官网获取**（本 skill 不代注册、不收集手机号/验证码）。获取全路径（转述时逐步骤完整给出，链接原样显示完整 URL）：\n打开官网 https://biaoshu.zhiliaobiaoxun.com/ → 手机号 + 短信验证码注册并登录（新用户赠积分）→ 点**左侧菜单『开放 API』**，在弹出面板中生成/查看 App Key（形如 `bk_live_xxxxx`，重置后旧 Key 立即失效）。\n\n**配置方式（任选其一）**：\n1. 用户把 Key 粘贴到对话后，**由你代跑** `login --app-key bk_live_xxx` 保存（自动建/更新凭证文件，权限 600）——别把这条命令丢给用户自己敲。⚠️ 同时提醒：粘贴的 Key 会留在会话记录中，介意可用方式 3 手动配置。\n2. 临时用环境变量：`export ZCM_APP_KEY=bk_live_xxx`（首次会自动落盘到凭证文件）。\n3. **手动配置（Key 全程不经对话，最私密）**：用户自行创建凭证文件 **`~/.zcm/config.json`**（完整全路径，`~` 为用户主目录），内容模板如下，保存后建议 `chmod 600`：\n   ```json\n   {\"app_key\": \"bk_live_xxxxx\"}\n   ```\n   （可选字段：`base` 自定义 API 地址、`output_dir` 成品存放目录。）向用户介绍此方式时把**文件全路径和模板**原样给出。\n\n- 缺凭证时脚本会打印官网获取指引并退出（码 2），把指引转述给用户即可。\n- 先 `python3 scripts/zcm.py me` 确认连通与积分余额（生成会扣分）。\n\n### 积分不足（402，给用户自助链接，skill 不代办）\n\n积分不足时脚本会打印引导，照原样转达给用户，由用户**自行登录官网充值**后回到对话继续，App Key 全程不变：充值入口 `https://biaoshu.zhiliaobiaoxun.com/recharge`（用注册手机号登录后操作）。\n\n- 🔒 **凭证保护（强制）**：平"},{"path":"skill-card.md","content":"## Description:\n\n该 skill 调用招采猫开放 API，对本地招标文件进行智能解读、分包抽取和 .docx 投标文件生成，并可对投标文件执行合规审查。\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[liu-jiapeng](https://clawhub.ai/user/liu-jiapeng)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and agents use this skill to prepare bids by converting local tender documents into structured analysis, package selection, generated bid-document drafts, and compliance review reports. It is suited to workflows where the user has a 招采猫 App Key and has agreed to upload tender or bid files to that service.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Tender and bid files can contain confidential commercial, pricing, or personal data and are uploaded to the 招采猫 service.\n\nMitigation: Use the skill only when the user trusts the publisher and service, and confirm the user understands and agrees to the upload before processing files.\n\nRisk: The App Key can be exposed if pasted into chat or if key-bearing recharge or binding URLs are forwarded.\n\nMitigation: Prefer manually creating ~/.zcm/config.json with restrictive permissions, never echo the App Key or key-bearing URLs in responses, and reset the App Key if exposure is suspected.\n\nRisk: A custom API endpoint can redirect documents and credentials away from the expected 招采猫 production service.\n\nMitigation: Inspect ~/.zcm/config.json and environment overrides before use, and avoid custom API endpoints unless the user fully controls and trusts them.\n\nRisk: Bid generation consumes credits from the App Key owner's account.\n\nMitigation: Check balance and confirm the user's intent before starting generation jobs.\n\n## Reference(s):\n\n- [Skill usage guide](references/usage.md)\n- [招采猫开放 API 契约参考](references/api.md)\n- [ClawHub skill page](https://clawhub.ai/liu-jiapeng/skills/biaoshu-writer-transit)\n- [招采猫 service](https://biaoshu.zhiliaobiaoxun.com/)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Shell commands, Configuration, Files]\n\n**Output Format:** [Chinese-language guidance, JSON API results, HTML or Word reports, and .docx bid documents]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Generated bid documents consume account credits. User-provided tender and bid files are uploaded to 招采猫, and task results and generated documents are retained by that service for about 7 days.]\n\n## Skill Version(s):\n\n2.0.5 (source: server release metadata, artifact/scripts/zcm.py, and artifact/references/api.md)\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."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"凭 App Key 调用招采猫开放 API，完成「招标文件智能解读 → 抽取分包 → 生成成品投标文件(.docx) → 可选合规审查」的端到端标书制作。当用户明确提供招标文件并希望生成投标文件/标书、对已生成标书做合规检查、或询问招采猫标书相关能力时使用。注意：招标/投标文件会上传到招采猫云端 API 处理，标书生成消耗账户积分；使用前请确认用户知悉。本 skill 是招采猫线上接口的轻客户端，不复刻其算法。 Skill: 投标文件智能编写 Owner: liu-jiapeng Summary: 凭 App Key 调用招采猫开放 API，完成「招标文件智能解读 → 抽取分包 → 生成成品投标文件(.docx) → 可选合规审查」的端到端标书制作。当用户明确提供招标文件并希望生成投标文件/标书、对已生成标书做合规检查、或询问招采猫标书相关能力时使用。注意：招标/投标文件会上传到招采猫云端 API 处理，标书生成消耗账户积分；使用前请确认用户知悉。本 skill 是招采猫线上接口的轻客户端，不复刻其算法。 Tags: latest:2.0.5 Version history: v2.0.5 | 2026-07-11T15:13:12.858Z | user biaoshu-writer-transit 2.0.5 - 移除 skill-card.md 文件。 - 更新权限说明，仅允许访问招采猫 API（biaoshu.zhiliaobi","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1180,"uniquenessScore":46,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T08:44:32.429Z","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-11T08:44:32.429Z","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-11T10:53:54.944Z","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"}]}}}