199 Commits

Author SHA1 Message Date
db901563ea feat(i18n): 新增对话完毕词条四语(## 完毕 ##/Done/完了/완료)+merge产物 2026-09-05 10:59:04 +08:00
0ab390b912 feat(mig): m0009 llm_model删价格/成本四字段(定价走ppid) 2026-09-04 21:03:00 +08:00
e0dbac6f9d feat(accounting): 独立异步记账进程——模型用量出账(客户付/商户营收/供应商成本),同步记账留web,进程由start/stop.sh管理 2026-09-04 19:32:43 +08:00
4e3521dfd5 refactor(llm): 模型选择收敛——主菜单删旧'模型管理'入口(统一走'模型治理');security_check白名单加统一推理端点/pipeline-llm/api/v1/ 2026-09-04 17:05:58 +08:00
9db01aa736 feat(mig): m0009 pipeline-rag下位应用种子+pipeline_kb_suggestions表 2026-09-04 15:58:14 +08:00
153f4b75a3 feat(mig): m0008 llm_api_profile补path/headers+llm_model补query_profile_ids(异步多步编排) 2026-09-04 14:00:17 +08:00
d41dc0c357 feat(mig): m0007 llm_vendor存量空org_id归零为系统级0——表单启用机构过滤后存量空值不可见须归位 2026-09-03 16:22:02 +08:00
ec4aebd9a3 feat(app): load_dapi() 接线——注册 Bearer key 认证供 rag 对外 API 鉴权(对齐 sage) 2026-09-03 16:12:30 +08:00
6051a7e5ba fix(mig): m0006改用ON DUPLICATE KEY UPDATE幂等写法——规避dmig破坏性语句门禁(2026-09-02) 2026-09-02 17:13:23 +08:00
b1bb17c163 feat(mig): m0006 投标产线四维度分析——新建bid_cost_benefit表+bid_qc_pass_score固化为8.5(2026-09-02) 2026-09-02 17:10:43 +08:00
1be7424444 security: 平台内部助手菜单门控改为owner组织角色判定
与platform_ability代码层判定对齐: roles中任一orgtypeid='owner'角色可见
2026-09-02 16:14:19 +08:00
67e77a11c3 feat: 宿主集成pipeline-platform模块
- build.sh: clone/pip/wwwroot软链三处列表加入
- pipeline_app: load_pipeline_platform()(service之后)
- 菜单入口URL改 /pipeline-platform/agent_platform
2026-09-02 15:26:55 +08:00
1ab0ade8b4 feat(menu): 平台内部助手菜单项(仅管理员可见)
入口→/pipeline_core/agent_platform, is_admin门控(owner.superuser/admin)
2026-09-02 15:07:32 +08:00
de9cd112b5 fix(rp): /rag 权限补入 roles.logined——菜单按RBAC过滤导致知识库菜单不显示 2026-09-02 13:44:54 +08:00
464f621f72 fix(create_tables): DDL语句分割先剔除注释行——头部注释与首条CREATE粘连导致llm_vendor漏建 2026-09-01 17:30:34 +08:00
252f119f35 feat(llm-govern): 集成pipeline-llm模型治理模块
- pipeline_app.py: load_llm() try/except兜底加载
- build.sh: clone/pip install/CRUD生成/wwwroot软链 四处枚举加pipeline-llm
- create_tables.py: 执行模块手写幂等DDL(8张llm_表,不走json2ddl避DEFAULT引号bug)
- import_init.py: 注册appcodes字典; rp.json: /pipeline-llm/** → logined
- index.ui主菜单: 加「模型治理」项(/pipeline-llm, TabPanel)
2026-09-01 17:28:03 +08:00
235b3caf2d fix(smoke): 登录用例密码改${SMOKE_PASS}占位符——之前字面***未替换撞失败计数 2026-09-01 16:59:14 +08:00
f19fd76c25 fix(smoke): 手动解析Set-Cookie——cookiejar在http下拒存Secure cookie导致登录态丢失 2026-09-01 16:58:40 +08:00
b86b39e051 feat(deploy): 冒泡测试套件 run_smoke.py+13关键用例 + ddiff类型差异不再误报缺列 2026-09-01 16:57:15 +08:00
704c3f6495 docs(deploy): 操作顺序铁律改'先库后码再重启'——先代码后库撞Unknown column崩溃实录 2026-09-01 16:41:17 +08:00
fc51fba1ea feat(deploy): dmig 环境感知迁移——env字段限定prod/test执行范围
- m0005 生产专用 workspace_base=/d/doit/workspaces(env=prod)
- detect_env: DEPLOY_ENV优先,/doit/路径推断
- 防止生产专用参数在测试环境误执行
2026-09-01 16:22:14 +08:00
27b6a7f543 fix(deploy): dmig 台账两个bug——skipped批次误判待执行+detail含引号写入失败
- ledger_state: applied+skipped 都算已处理,含 failed 的可重试
- _esc/_ledger_write: detail 转义单引号+ON DUPLICATE KEY UPDATE
2026-09-01 16:04:38 +08:00
dd40df6337 feat(deploy): 测试→生产增量部署机制——dmig迁移引擎+ddiff差异对账+dbackup增量备份+四步规范
- METHODOLOGY.md: 备份/操作/验证/回退四大步操作规范
- dmig.py: 迁移引擎(台账表pipeline_deploy_ledger+幂等+破坏性守卫+down回退)
- ddiff.py: 环境schema/参数/模块版本差异对账
- dbackup.py: mysqldump增量表备份+恢复命令生成
- migrations/m0001-m0004: 首批迁移(今日发现的生产库缺口)
2026-09-01 16:00:35 +08:00
a7d78655d3 fix(rbac): 删/** any全局通配+产线shell改logined——any不应覆盖五条产线 2026-08-31 16:40:05 +08:00
6fa1dddd11 fix(load_path): 验证SQL的%%改${}$占位符——sqlor裸%当格式占位符崩 2026-08-31 15:53:36 +08:00
51b92210db fix(load_path): ROOT改脚本相对定位——写死~/pipeline在生产HOME=/d/doit下崩溃 2026-08-31 15:52:02 +08:00
521d3ca75a fix(import_init): INIT_MODULES 补 pipeline-bidding——漏了导致投标产线码表从未导入 2026-08-31 13:45:56 +08:00
4ef2825b59 feat(topbar): 语言按钮前加主题切换+最小化窗口按钮(参考sage)
- 主题按钮:dark/light切换,localStorage持久化,刷新恢复;图标随主题变
- 最小化窗口按钮:bricks.app.show_windows_panel(app-dock.svg图标)
- theme_toggle.js:页面加载恢复主题+同步图标(注册any权限,防401渲染中断)
- merge_i18n补两按钮tip词条
2026-08-29 16:50:44 +08:00
f750f024f9 feat(menu): 产线菜单归组+顺序重排, KTV产线改名营销产线
- 五条产线归入「产线」组, 顺序: 商机→投标→开发→运维→营销
- KTV产线改名营销产线(待开发); 运维产线面向FOMS(待开发)
- 未开发的运维/营销产线点击提示规划中
- merge_i18n: 支持key:value格式+纳入主应用i18n目录(此前主应用词条从未合并)
2026-08-29 16:35:07 +08:00
3775ea8802 feat: 主菜单加商机产线入口 2026-08-29 08:28:27 +08:00
9a5b3966a5 feat: 钉钉审批菜单改两级(审批节点配置+审批记录); merge_i18n补dingdingflow 2026-08-28 22:32:00 +08:00
0cfd8fedac fix(i18n): MODULES清单补pipeline-bidding/pipeline-opportunity(此前新产线翻译从未合并进wwwroot) 2026-08-28 17:44:54 +08:00
c04bcf0c9f feat: 挂载商机产线能力包 load_pipeline_opportunity(数据来自数据爬取平台内网HTTP) 2026-08-28 17:37:04 +08:00
a92314cf39 fix(menu): is_admin 去掉 *.admin 通配——get_userroles 会把每个角色扩展出 *.{name} 形式,客户机构管理员被误判为平台管理员 2026-08-28 16:49:49 +08:00
bdad3aded3 feat(menu): 移除产线管理菜单项; 客户角色首菜单改为产品展示+我的账户
- 产线管理三功能已从后端移除(死库存), 菜单同步删除
- customer.customer 角色: 首菜单=产品展示(商城卡片页), 我的账户子菜单
  (充值/我的账户/我的权益); 管理员/其他角色走原菜单
- is_admin 判断补充 *.superuser/*.admin 通配形式
2026-08-28 16:34:16 +08:00
33fb5fb919 security(menu): 账务管理菜单角色门禁——财务后台项仅财务角色可见
客户/普通用户只见自服务项(我的账户/账务明细/账单/我的信用额度);
账户余额台账、科目、分录配置、信用额度管理、币种、汇率、记账日志
仅 owner 财务角色与分销商管理员/会计/运营可见。
2026-08-27 18:13:23 +08:00
52815a5130 fix(build): CRUD 重生成列表补上 pricing——定价管理菜单 500 根因
pricing 的 json/ 有 CRUD 定义但第7步生成循环漏掉它,
wwwroot/pricing_program 从未生成,登录用户点菜单 fpath=None 报 500
2026-08-27 18:04:34 +08:00
ymq
b92c9a75fc feat(menu): 投标产线入口指向多session会话界面 /pipeline-bidding/agent 2026-08-27 13:13:07 +08:00
ymq
212821f560 feat(menu): 用户菜单挂产品商城入口(购买/我的权益) 2026-08-27 10:54:20 +08:00
38010ccdfd fix: load_pipeline_bidding() 漏调用——只 import 未执行,投标能力包从未装载(poller/能力包/角色工具全部未生效) 2026-08-27 00:27:03 +08:00
def469ddbc feat(bidding): 接入投标产线模块
- app/pipeline_app.py:load_pipeline_bidding(未装时优雅降级)
- build.sh:模块清单四处加 pipeline-bidding(clone/install/CRUD/wwwroot软链)
- wwwroot/index.ui:侧栏+主页卡片加「投标产线」入口(→/pipeline-bidding/index.ui)
2026-08-26 22:54:44 +08:00
ymq
f27ce2662e feat(supplychain): 供销管理菜单 + i18n
- wwwroot/index.ui 加「供销管理」菜单 8 子项(供应商/资源定价/合同/平台关系/产品映射/分销商/分销协议/销售记账)
- i18n 四语言
2026-08-26 16:45:30 +08:00
ymq
6f5d4a6136 feat(supplychain): 集成供应链模块 + filemgr
- build.sh 四处列表 + 8b DDL 循环加 filemgr supplychain
- app/pipeline_app.py: load_filemgr() + load_supplychain()(filemgr 先于 supplychain)
2026-08-26 16:40:20 +08:00
4f00b931f5 feat(product_management): 接入产品层
- app/pipeline_app.py: load_product_management(),置于资源模块之后
  (产品层通过 env.product_interface 调 account_resource/storage_resource)
- 打通资源→产品→定价→折扣→出账链路
2026-08-26 15:39:08 +08:00
a08bac91b6 feat(商品化): 补 5 个模块集成 + 接入两个资源模块 + accounting 菜单(参考 sage)
关键修复:accounting/pricing/discount/unipay 的表和前端早已就位,
但 app/pipeline_app.py 从未 load 它们 —— 相关页面一点即 NameError 500。

- 入口补 load_pricing/accounting/discount/unipay + load_account_resource/storage_resource
  顺序:pricing 先于 accounting 与资源模块(资源计费依赖 pricing_program_charging)
- build.sh 四处列表 + 8b DDL 循环加 account_resource/storage_resource
- wwwroot/index.ui 加「账务管理」菜单 11 子项(参考 sage menu.ui 的配置账务结构)
  按 pipeline-app 实际存在的页面取项:sage 菜单里的 open_account.ui 本模块不存在,已剔除,
  另补上 sage 未列但存在的 我的账户/余额/明细/账单/信用额度/币种/汇率/记账日志
- i18n 四语言补「账务管理」
2026-08-26 14:54:24 +08:00
947b6d3abf feat(dingdingflow): 接入钉钉审批模块
- app/pipeline_app.py: load_dingdingflow(),置于 load_pipeline_service() 之前
  (后者的 dingtalk_approval 适配器依赖前者注册的 register_biz_handler)
- build.sh: 四处模块列表 + 8b DDL 循环加 dingdingflow(dda_* 表建到 pipeline 库)
- wwwroot/index.ui: 侧边栏加「钉钉审批」菜单(open_tab)
- i18n zh/en/jp/ko 补文案
2026-08-25 18:23:32 +08:00
bcd8f54a9d fix(build): uapi 表必须先建,rag 的 uapi_seed.sql 才有表可插
原 8b 步骤只生成 rag DDL,pipeline 库无 upapp/uapi/uapiio 表 → 种子导入静默失败(0 行)。
改为循环生成 uapi+rag 两模块 DDL,按 uapi建表→rag建表→配置种子 顺序导入。
2026-08-25 15:32:58 +08:00
f1af8c882f security: 新增脏授权清理脚本 + 修正目录型路径误判
clean_dirty_perms.py:清理指向不存在路径的 any 脏授权。默认预演(--dry-run),
--apply 才动库且先导出可回滚备份 SQL;保护名单(/rbac/** 登录流程、/bricks /imgs
/assets /i18n 静态资源、根路径)永不删;通配路径跳过交人工决策。
实测清掉 216 条(llmage/rag/public/msp/supplychain 等未安装模块残留 + xls2ui
历史 bug 产生的 //i18n_getmsgs// 双斜杠畸形路径),any 授权 801→585。

security_check.py 修正关键误判:原 _resolve_file 把目录型路径(CRUD 列表目录、
/bricks /imgs 静态目录)判成「文件不存在」→ 会把真实存在的目录误报成脏授权,
照该清单盲删会删掉登录页必需的静态资源授权。新增 _path_exists()
(os.path.exists 跟随软链、目录也算存在)专门判存在性。
2026-08-25 15:27:44 +08:00
e756236272 fix(security_check): 目录型路径不再误判为脏授权
新增 _path_exists() 判断路径存在性(文件或目录,跟随软链)。
原 _resolve_file() 对 CRUD 目录/静态目录返回 None,被当成「文件不存在」→ 真实存在的目录误报脏授权。
(服务器端已验证的改动,按回传流程补提交)
2026-08-25 15:27:33 +08:00
8e09c5389a feat(rag): 接入 rag 知识库模块 + uapi 外部 API 网关
- app/pipeline_app.py: load_uapi() + init_rag_module()(uapi 必须先于 rag)
- build.sh: 四处模块列表加 uapi/rag(clone/pip/xls2ui/wwwroot symlink)
  新增 8b 步骤:json2ddl 建 rag_* 表 + 导入 uapi_seed.sql 配置种子
- wwwroot/index.ui: 侧边栏加「知识库」菜单项(open_tab 符合 UI 导航契约)
- i18n zh/en/jp/ko: 补知识库相关四语言文案

rag 表统一 rag_ 前缀,与产线业务表隔离;数据独立于 ragserver
2026-08-25 15:24:05 +08:00