yumoqing 45cec8987e feat(opp): 数据参考三级整行下钻+明细详情弹窗+附件下载代理
- 汇总主题/分项条目整行点击(cursor:pointer)弹下级弹窗,撤「查看分项」按钮
- 明细每条来源写进说明文字(source_text),删除 source_button_widget 来源按钮
- 新 opp_item_detail.dspy: 爬虫平台条目全量字段+公告全文+附件列表
- 新 opp_attachment_dl.dspy: 服务端附件下载代理,归属校验防SSRF,
  降级链 download_url→/api/attachments/{id}/download→原始url,失败如实报错
- opp_data_capability: tender_attachments/normalize_attachment 容错对接
  爬虫平台附件子系统(/api/tenders/{id}/attachments,另一会话开发中,未就绪时降级提示)
- opp_common: crawler_get_raw 原始字节下载辅助; load_path 注册两个新端点
- README/prompt 同步新交互描述
2026-09-08 23:39:16 +08:00

pipeline-opportunity — 商机产线能力包

把招标市场情报转化为软件研发商机:热点软件推荐 → 每日AI/Agent招标 → 研发报告编写 → 人工确认 → 研发审批流程

平台边界(重要)

  • 数据爬取平台ebpe.cc:/d/ymq/work/tender_opp独立部署采集中国招标网站数据、 持久存储、去重,仅通过内网 HTTP 只读接口对外(192.168.16.2:9085X-API-Token 鉴权)。
  • 本模块(产线平台侧):商机业务闭环。只消费爬虫数据,不爬取、不存招标原始数据; 报告/审批状态落产线库 opp_reports / opp_approvals 表,绝不回写爬虫库。

依赖方向:产线平台 ──HTTP──> 数据爬取平台(单向)。

产线闭环与门禁

opp_hot_software / opp_daily_ai_tenders爬虫平台数据
        ↓ 选定方向
opp_create_report草稿→ opp_update_report补写数据必须来自工具返回
        ↓
opp_submit_report ──> 人工确认任务门禁pipeline_human_tasks: opp_report_confirm
        ↓ 人工确认通过confirm 回流)
initiate_approval ──> 研发审批任务门禁opp_dev_approval
        ↓ 人工审批结论回流
approved / rejectedrejected 可退回 draft 重来)

状态机:draft → confirmed → approval_initiated → approved/rejected(非法迁移一律拒绝)。 agent 禁止自批自审:确认与审批结论只能由人工任务回流驱动。

工具清单(主 agent / 驾驶舱)

工具 用途
opp_hot_software 热点软件推荐(招标量+预算+地区排名)
opp_daily_ai_tenders 每日 AI/Agent 招标展示数据
opp_search_tenders 关键词检索招标信息
opp_tender_detail 单条详情(含原文/预算/联系人/来源链接)
opp_crawler_stats 爬虫平台采集健康度
opp_create_report / opp_update_report 报告草稿创建与补写
opp_list_reports / opp_get_report 报告列表与全文
opp_submit_report 提交人工确认(门禁)
opp_list_approvals 审批单列表
opp_diagnose 产线诊断(报告分布/待办/爬虫连通性)

角色:agent.opp_analyst(商机分析师)、agent.opp_writer(研发报告撰写工程师)。 slash 命令:/hot /ai /reports /oppdiag

数据参考弹窗三级下钻2026-09-08 交互定稿)

菜单「📋 数据参考」→ opp_references_popup.dspy,三级结构全部整行点击cursor:pointer 无「查看分项」按钮):

  1. 汇总层(主题排名:招标/国内众包/海外三板块):点主题条目 → 弹出该主题分项列表 opp_references_items / opp_demand_items / opp_overseas_items.dspy)。
  2. 分项层明细条目每条说明文字标注「来源xxx」source_text() 解析, 来源按钮已废弃删除);点条目 → 弹出具体内容(opp_item_detail.dspy 爬虫平台 /api/tenders/{id} 全量字段 + 公告/需求全文 + 原文页/采集来源页按钮 + 附件列表)。
  3. 附件层:详情弹窗列出条目附件(爬虫平台 /api/tenders/{id}/attachments 字段容错归一 normalize_attachment),「下载」按钮走服务端代理 opp_attachment_dl.dspy——先回查条目附件清单做归属校验(防 SSRF前端传任意 att_url 不在清单内即拒绝),再按降级链取字节:记录 download_url → /api/attachments/{id}/download → 附件原始 url代理失败如实报错不静默。

附件端点未就绪(爬虫平台附件子系统部署中)时:分项列表不显示 📎 角标、详情弹窗 显示「附件服务暂不可用」,其余功能不受影响。

爬虫平台接入配置

系统级配置禁硬编码,走 appbase params 表(兜底默认值内网地址):

params 键
tender_api_base http://192.168.16.2:9085(默认)
tender_api_token 爬虫平台 state/api.env 中的 TENDER_API_TOKEN

部署(宿主 = pipeline-app

  1. git clone<APP_ROOT>/pkgs/pipeline-opportunity
  2. bash build.sh(建表 + 种子数据 + wwwroot 软链 + pip install
  3. app 入口已接线:load_pipeline_opportunity()try/except 兜底)
  4. RBACcd <APP_ROOT> && py3/bin/python pkgs/pipeline-opportunity/scripts/load_path.py
  5. i18n合并 i18n/{zh,en}/msg.txt 到宿主 wwwrootmerge_i18n.py调 /i18n_getmsgs 刷新
  6. 重启应用;浏览器验证驾驶舱 /pipeline-opportunity/agent

  • opp_reports研发报告software/title/content/status/confirm_task_id/confirmed_by
  • opp_approvals研发审批report_id/status/note/resolved_by

技能

产线技能在 pipeline-core 技能库:skills_library/pipelines/opportunity_general/ common/opp-workflow 总纲 + roles/agent.opp_analyst、agent.opp_writer 角色技能)。

Description
No description provided
Readme 25 KiB