53 Commits

Author SHA1 Message Date
684ec3ba69 feat(references): 分项明细列表支持排序——budget标的金额大到小/time发布时间后到前;数据源侧先全局排序再截断(金额TopN是真TopN非局部排序);三个分项弹窗(招标/国内众包/海外)顶部加排序切换按钮(当前态primary高亮,点击重建弹窗带sort参数);弹窗标题回显当前排序;agent工具opp_category_references/opp_overseas_references加sort参数(白名单收敛,非法值回落time) 2026-09-15 14:36:04 +08:00
7a8afab054 fix(feasibility): promote_to_project幂等守卫——E2E实测重复调用重复建项目;description带[report_id=X]精确标记,立项前查已立则返回既有项目;handler区分reused文案;E2E L3改为幂等断言(不重复建+库中仅1项目) 2026-09-14 14:11:10 +08:00
2304b86667 test(feasibility): 修A4断言期望值——EI det=6/ftr=1低复杂度应3FP非7,非法type正确进pending(产品行为对,脚本期望值写错) 2026-09-14 14:06:06 +08:00
5686b255e9 test(feasibility): P3可行性研究E2E脚本——FP规则引擎独立复算/draft正负链(全personal拒绝+跨项目+伪org+未归一化)/八节报告落库+成本系数核对/评分/promote门禁(draft拒→confirmed拒审批→approved放行)/八节PPT断言(python-pptx解析章节页)/重复立项行为记录/清理立项项目 2026-09-14 14:02:42 +08:00
4092304726 feat(feasibility): P3可行性研究——opp_feasibility引擎(fp_estimate规则引擎FP/draft_feasibility八节报告/score_candidate评分/promote_to_project立项门禁)+report_type列(models/DDL/CRUD重生成)+详情页与PPT按类型选四节或八节模板(sections_for_type单一规则源)+列表类型徽标+prompt链路C+params/demand_mining字典种子+i18n词条
- fp_calc.calc()返回键实锤核对: total_fp/counts/errors(原total_ufp/by_type兜底猜错,已修)
- promote门禁修正: resolve_approval会把status置approved,confirmed只是中间态→门禁接受confirmed/approval_initiated/approved(原只认confirmed会导致审批通过后反而不能立项)
- _cluster_ctx补项目隔离(对齐_check_batch_visible口径)+全personal类别如实拒绝可行性样本不足
- 八节模板兜底节=需求规格;四节存量解析口径零变化
- opp_approvals CRUD手改(项目过滤)被xls2ui重生成吃掉→已checkout还原,只保留opp_reports新列部分
2026-09-14 09:03:58 +08:00
ca921d3550 fix(normalize): 原子化解析容错+产出率兜底——LLM输出no为字符串/浮点时isinstance(int)全过滤致46文档仅6原子;int()转换+范围校验;批LLM失败用标题作原子;原子覆盖<50%文档时缺者标题兜底(众包标题即浓缩语义,保证覆盖率可算) 2026-09-12 12:01:04 +08:00
eba6285841 fix(normalize): LLM客户端硬超时——llm_call的_timeout只透传治理端点,客户端aiohttp无超时致上游挂起无限等(实测atomize卡6分钟atoms=0);_llm包装asyncio.wait_for(120s)+指数退避重试2次,三处调用统一 2026-09-12 11:53:24 +08:00
1e64ab7e75 feat(normalize): P2-③类内共性提取引擎——opp_normalize.py(原子化LLM合批并发→embedding+τ2并查集候选组→LLM裁决归一(相似度只当触发器)→能力域分组→覆盖率三层core≥0.6/ext≥0.4/personal);3新表atoms/std_demands/domains+clusters补normalize_status/error列;2工具normalize_cluster/coverage_report(org隔离+未归一先报错引导);params种子5项 2026-09-12 11:41:51 +08:00
2bf137e650 docs: README菜单清单补⛏需求挖掘(三级下钻2026-09-12) 2026-09-12 11:17:21 +08:00
73c87b72a6 fix(mining-ui): 类别排名弹窗补auto_open+resizable(对齐opp_demand_items范式)——modal:True无auto_open致PopupWindow渲染display:none不可见,实测DOM在位rect=0定位 2026-09-12 11:14:55 +08:00
25348fa2e1 feat(mining-ui): P2需求挖掘三级下钻UI——⛏需求挖掘菜单(无require_project,平台级批次也可见)→批次列表(启动全量/指定类型按钮+状态色标+done行下钻)→类别排名PopupWindow(排名/占比/命名依据)→类内明细(每条带来源,src_id复用opp_item_detail详情弹窗);opp_mining_start.dspy复用start_mining与工具通道同实现;cluster_detail补src_id字段;load_path注册4端点 2026-09-12 11:00:49 +08:00
3fadee97b9 docs: README+模块技能同步项目归属口径(挖掘分项目,可见性对齐opp_reports,E2E 11项全过) 2026-09-12 09:06:54 +08:00
02b904164e test(mining): 项目隔离E2E脚本——11项断言(批次落项目/跨项目批次+类别+明细三层拒绝/B列表不含A/存量归平台级/无项目会话只见平台级)全过 2026-09-12 09:05:52 +08:00
8b7626dc83 feat(mining): 挖掘批次/类别落项目归属(用户确认商机产线分项目)——opp_mining_batches/opp_clusters加project_id(空=平台级挖掘),可见性对齐opp_reports口径(挂项目仅本项目会话可见/平台级本机构可见/无项目只见平台级),_check_batch_visible单一规则源status/list_clusters/cluster_detail复用;补列脚本information_schema守卫幂等 2026-09-12 09:02:04 +08:00
058c5f5235 docs(skill): 模块自述技能+README同步P1需求挖掘——4工具/架构图/机构隔离定夺/VDB协议/性能铁律(串行540s→并发60s)/params种子/验证脚本用法 2026-09-11 23:32:00 +08:00
bc6790a03a perf(mining): LLM簇命名串行→并发(Semaphore限5)——实测42簇串行命名540s占批次全程551s,并发后应~1/5;params种子段(τ/topk/min_cluster/big_split/keep_batches/embed_batch/cache_col,build.sh 2b幂等导入,已存在不覆盖);README同步挖掘架构文档 2026-09-11 23:23:06 +08:00
f1eab971cb feat(mining): P1需求挖掘投产线能力包——opp_mining(VDB客户端/增量embedding缓存/批次工作集/kNN图/τ并查集/大簇细分/LLM命名+规则兜底)+opp_mining_flow(状态机编排pulling→embedding→clustering→naming→done,后台create_task,进度实时落库,失败可行动报错)+4工具(start_mining/mining_status/list_clusters/cluster_detail)+OPP_PROMPT挖掘工作流;共享缓存collection全机构复用嵌入,批次/类别org_id隔离;gen_ddl.sh修死路径+DDL重生成5表 2026-09-11 23:04:35 +08:00
091d9db02d feat(mining): P1聚类质量分析脚本——多τ对比(0.70/0.75/0.82/0.88)+超大簇(>150)质心二次细分(τ+0.10)+向量/kNN文件缓存(省embedding费用)+样例去重;2075条真实数据实测167s,τ=0.75为最优拐点(42簇,top1=8.2%微信小程序,语义纯净无失控巨簇) 2026-09-11 22:49:56 +08:00
4ad5dfda81 feat(mining): P1聚类算法验证脚本(真实数据)——爬虫拉全量需求→rag_client Bearer embedding(10条/批,3次退避)→VDB kNN(pagerows=30)→τ阈值并查集聚类→小组质心并入→簇质量报告;坑:cookie会话401(Secure标志+aiohttp拒发http),生产路径Bearer不受限;独立脚本须initEnv()注入password_decode 2026-09-11 22:41:52 +08:00
b10ef50661 feat(mining): P1需求挖掘3表models(批次/快照/类别)+幂等建表脚本+P0 VDB/embed探测脚本——org_id机构隔离,scope支持top/targeted,heat_rank避开MariaDB保留字,double带length+dec精度 2026-09-11 22:22:02 +08:00
5c37341f4c feat(opp): 当前项目过滤——opp_reports_list只显示当前项目报告+平台级调研(未挂项目),无项目提示'选择或新建'带直达按钮;opp_approvals get注入会话级强制过滤;三菜单加require_project门禁 2026-09-11 18:29:52 +08:00
09d77f7483 fix(ppt): 表格行高按内容估算逐行设置——显式换行强制断行+CJK/ASCII显示宽度估算换行数+行距余量1.45;根治实测长文本(含换行项目符号列表)在行底被截断;总高超页截行加提示不跨页拆表 2026-09-11 17:18:58 +08:00
47f191fc81 feat(ppt): 研发报告PPT重做设计系统——深海军蓝主色+亮蓝强调统一配色;封面深色满版+强调短线+方向标签;四节章节分隔页(带节序号);内容页强调竖条标题+多级要点缩进+粗体引导词着色;markdown表格真渲染pptx Table(表头深蓝白字隔行浅底自适应列宽);页脚页码+署名;长内容自动分页;目视验证13页2表格排版专业 2026-09-11 15:09:04 +08:00
8c5bf498c8 fix(opp): 统计聚合优先+明细limit硬上限——_clamp_detail_limit(50上限,默认20/10);category_references/demands/overseas_references默认limit 500/50→20/10;工具描述改『统计首选hot_*/明细只取样例limit≤10』;OPP_PROMPT硬规则补统计聚合优先+平均价=total_budget/count公式;根治prompt原指引『给排名统计调category_references取分项明细』诱导agent拉300条全量明细撑爆上下文 2026-09-11 13:46:28 +08:00
2f71d851ef fix(opp): LIKE 模式参数化——SQL字面量裸%被驱动当格式化符炸ValueError(实测500), agent.% 改走 ${agent_pat}$ 传值 2026-09-09 15:18:50 +08:00
8627b855c0 feat(opp): 研发报告菜单改造——owner过滤列表+四节详情+成果文件下载
用户需求(2026-09-09):研发报告按钮点击按项目owner过滤列表;每项点击看
研发场景/输入/输出/成果;成果文件多个列出、逐个点击下载。

1. 列表页 api/opp_reports_list.dspy(替换CRUD裸表页作菜单入口):
   - list_visible_reports 单一事实源:挂项目的报告仅项目owner可见
     (sd_projects.created_by==uid;agent建的项目降级同机构,对齐
     check_project_owner既有语义);未挂项目的平台级调研登录可见;
     孤儿报告(项目已删)不可见(LIKE 'agent.%' 写法有 rag_client.py 生产先例)
   - 整行点击下钻详情,交互范式照抄 opp_references_items.dspy
2. 详情弹窗 api/opp_report_detail.dspy:
   - parse_report_sections 四节解析(## 研发场景/输入/输出/成果),
     MdWidget逐节渲染;兼容序号/冒号/加粗标题变体;三级标题不误判;
     旧报告无节时全文归输出节;空节如实标注不编造
   - check_report_visible 与列表同一可见性规则(语义不漂移)
3. 文件下载 api/opp_report_file_dl.dspy + list_report_files:
   - 范围=项目deliverables/全部文件+报告PPT(realpath去重)
   - 安全模型对齐 opp_attachment_dl:前端只传report_id+name,
     服务端回查清单命中才给文件,文件名不参与路径拼接(防穿越)
4. agent侧四节模板硬要求:OPP_PROMPT新增节+create/update_report工具描述
5. RBAC load_path 补3端点;i18n zh/en 补9词条;README 补改造说明

离线实测11项断言全过:标准四节/标题变体/旧报告归输出/缺节/三级标题不误判/
重复节拼接/空正文/deliverables扫描+PPT去重/项目外PPT/无项目不崩/防穿越
2026-09-09 15:04:20 +08:00
a066cb0f91 feat(opp): item detail full-text rendered by MdWidget (markdown, clickable links) - crawler now stores markdown detail_text 2026-09-09 11:24:27 +08:00
f44e5f7f83 fix(opp): 附件按平台副本状态诚实渲染——已存副本才给下载按钮,未存(如需登录)给打开原始页,不伪装可下载 2026-09-08 23:57:56 +08:00
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
1040eb0bd9 fix(opp): infer source name from source_url domain - crawler records carry no source code, only source_url; registry domain suffix match (search.ccgp.gov.cn -> ccgp) 2026-09-08 18:59:52 +08:00
8c032d7be0 feat(opp): detail popups show source as name button jumping to source url - SOURCE_REGISTRY in opp_common aligned with crawler sites.yaml (source_url preferred, homepage fallback) 2026-09-08 18:56:14 +08:00
d607d8d940 fix: model_dataurl补pipeline_id(产线隔离) 2026-09-02 19:05:35 +08:00
c508e2ba8a fix(session): 默认tab session_id按产线分离(default_opportunity_general) 2026-08-31 22:03:56 +08:00
0d094e6f54 chore: load_path pyc regen (tracked artifact) 2026-08-31 11:36:15 +08:00
333aad0127 feat: 数据项列表全面带来源URL——国内众包需求主题接入数据参考弹窗(新opp_demand_items.dspy,逐条带需求详情/来源页)+category_references支持record_type+prompt强制数据项列表逐条挂来源链接 2026-08-31 11:34:38 +08:00
ca8e9f2c71 海外软件需求接入商机产线: opp_hot_overseas/opp_overseas_references工具+数据参考弹窗海外板块+opp_demands补海外源 2026-08-30 19:54:00 +08:00
a53b81ffe6 feat: 接入众包平台需求数据——opp_demands/opp_hot_demands工具(猪八戒/一品威客甲方需求) 2026-08-30 13:50:18 +08:00
d777f0ac33 feat(opp): 口述条件检索/汇总——opp_query_tenders+先调研后报告流程
- 新增 opp_query_tenders: 用户口述条件(关键词/地区/采购人/公告类型/来源/
  预算区间/AI评分/时间窗)→LLM映射参数,返回明细或按维度汇总(条数/预算/样例)
- 数据层 query_tenders 透传爬虫平台 /api/tenders_query
- prompt 改四步流程: 收集资料→数据分析→发现商机→产研报告(不直接写报告)
2026-08-30 08:51:55 +08:00
b2c87edf74 fix: submit_for_confirmation按confirm_task_id绑定幂等——禁止复用其他报告的确认任务(绑定丢失导致报告无法确认) 2026-08-29 15:11:32 +08:00
f192128f5e feat: references可查证界面+报告确认门禁全文展示+PPT存储下载+数据参考菜单 2026-08-29 13:08:16 +08:00
2c8d723142 fix: crawler_get局部import urllib.request遮蔽模块级urllib→所有查询类opp工具UnboundLocalError 2026-08-29 09:25:57 +08:00
5d8978b78d fix: resolve_approval漏查project_id列→人工审批任务永远pending(阻塞任务泄漏) 2026-08-29 08:38:29 +08:00
6f0aaee727 feat: 商机产线agent会话入口页(参照投标产线) 2026-08-29 08:28:26 +08:00
025368d66b feat: 审批改走钉钉审批(dingdingflow)——发起时推钉钉+回调钩子写回,无配置降级人工; 补.gitignore 2026-08-28 22:31:53 +08:00
4b530212e6 fix(i18n): 补列标题翻译键——审批页英文视图列头中英混杂(主键ID/报告ID/审批状态/结论时间等未翻译) 2026-08-28 21:20:02 +08:00
5a41e74c83 fix: opp_approvals data_filter单条件AND被sqlor拒绝(需>=2条件)——补report_id条件; 重新生成CRUD页 2026-08-28 21:17:26 +08:00
dc71c92d34 fix(log): 加载日志改debug级——宿主日志过滤info,各模块加载日志均debug才可观测 2026-08-28 17:55:50 +08:00
fdbae0e05a fix(i18n): msg.txt改key=value格式(merge解析器只认=,冒号格式从未被合并) 2026-08-28 17:44:55 +08:00
dd6d616744 docs: 测试用例方案——27用例覆盖22功能点(冒烟5/数据7/闭环8/UI5/RBAC2),test agent经run_shell+playwright执行浏览器用例 2026-08-28 17:28:02 +08:00
819a1d6dac docs: 补齐模块规范三件套——README(人看)/skill/SKILL.md(agent看)/i18n中英双语;修正pipeline_human_tasks真实表结构插入 2026-08-28 17:18:46 +08:00