166 Commits

Author SHA1 Message Date
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
fb853ca350 security: security_check.py 挂进 build.sh + 新增 E 类检查
- build.sh 第 12 步跑 security_check.py --warn-only(不阻断部署,打印清单);
  CI 可直接调脚本本体做硬门禁(A/B/D/E 返回 1)
- 新增 [E] 类:白名单放行的定时任务端点必须自带 client_ip=localhost 校验,
  防止白名单本身变成漏洞
- 静态资源目录通配(/rag/imgs/ 等)与 token 鉴权代理加入白名单,消除永久噪音
2026-08-25 15:01:44 +08:00
71566bea56 refactor(todo_badge): 待办列表/详情改由 dspy 返回 bricks widget 渲染,JS 只负责角标与打开弹窗 2026-08-25 14:59:09 +08:00
5f18745ace security: 超管初始化改本地 CLI + 部署期安全检查脚本
- scripts/create_superuser.py: 替代已删的 /rbac/add_superuser.dspy 后门,
  部署期本地执行,强制强密码(>=10位/3类字符/拒弱口令),已存在同名用户则拒绝
- scripts/security_check.py: 部署期扫「any 授权 + 无鉴权 + 危险动作」组合防回归,
  另检 any 通配授权、指向已删文件的脏授权、终端端点匿名回退;A/B/D 类阻断部署
2026-08-25 14:47:25 +08:00
8a3eb50300 feat(assets): 注册 assets_ver() 全局函数(js/css 最大 mtime, 30s 缓存),根治改了前端 js 浏览器仍跑旧代码 2026-08-25 14:36:18 +08:00
16fd5a3530 feat(llm-proxy): 新增 pipeline_llm_tokens 表(短期 token + 用量) 2026-08-25 14:11:42 +08:00
89f670af88 fix(todo_badge): Button 无 set_click 方法,改用 bind('click', ...) 绑定点击 2026-08-25 13:56:20 +08:00
f80a586828 feat(todo): 待办列表加需求/设计确认按钮(确认通过/退回重做) 2026-08-25 13:19:49 +08:00
dc856a9775 feat(session): index_tab.js 新增 window._sid() 生成 per-tab session_id(sessionStorage) 2026-08-24 18:32:49 +08:00
65dacbd65d fix(todo_badge): 待办角标默认显示🔔待办+数量(不再空白白色方块),弹窗改百分比尺寸 72%x80% 2026-08-24 18:21:15 +08:00
74c4568157 feat(db): 新增 pipeline_session_settings 会话级项目设置表
多tab独立会话的项目上下文按 (user_id, session_id) 存储,UNIQUE(user_id,session_id)
2026-08-24 16:40:50 +08:00
8e6510b775 fix(load_path): 库名sage→pipeline + 注册todo_badge/index_tab静态JS权限 + 补role关联(修复/**漏关联) 2026-08-24 15:24:59 +08:00
50725d7e61 fix: 角标定时刷新改外部JS(todo_badge.js),移除on_parent binds避免循环结构JSON报错 2026-08-24 15:01:27 +08:00
8ec8131514 fix: 角标定时刷新 script 从 Html 控件(innerHTML不执行script)迁移到头部HBox binds(on_parent) 2026-08-24 14:51:23 +08:00
e30c10ff22 fix(build): pipeline_human_tasks 迁移补 title/description 字段 2026-08-24 13:01:38 +08:00
00506cef3f feat: 顶部待办角标 + 1分钟定时刷新 + 我的待办入口(点击做事) 2026-08-24 12:54:08 +08:00
25e9900193 feat(build): create_tables.py 幂等迁移 pipeline_human_tasks 项目/迭代/bug/QC 字段 2026-08-24 12:09:13 +08:00
cde7293d5e feat(build): 生成 get dspy 后注入会话当前项目过滤(迭代/Bug/测试用例 无项目报错) 2026-08-22 18:55:10 +08:00
b2d07ce247 feat(appbase): params 加 register_open 参数 + 默认值首次插入不覆盖(保留 superuser 运行时修改) 2026-08-21 19:19:17 +08:00
6ce55f6482 feat(accounting): accounting 模块加入产线平台 + 账务配置初始化
- build.sh: 业务模块/clone/pip install/CRUD/wwwroot链接 加 accounting + 汇率定时任务 cron
- create_tables.py: accounting 幂等建表(13张)
- import_init.py: accounting 加入 INIT_MODULES + 扩展支持 subject/account_config/accounting_config/currency/exchange_rate
- rp.json: accounting 权限(any: fetch_forex_rates, logined: /accounting/**)
2026-08-21 18:57:27 +08:00
9ead91d303 feat(dapi): 下位系统管理界面暴露 + RBAC 权限
- rp.json: owner.superuser 加 /dapi /dapi/**
- index.ui: 系统管理菜单加「下位系统」「下位系统API Key」两项(/dapi/downapp /dapi/downapikey)
- 附带 rp.json 里 univer-office 遗留的 /univer-office /office/** 权限(已部署)
2026-08-21 17:28:51 +08:00
b849eb3e92 feat(office): 补提交 univer-office 办公代理(已部署上线)
/office/* 反向代理到本机 univer-office Node 服务(9091),承接 markdown<->IDocumentData 转换 + docx/xlsx/ppt 导出。含 office_proxy.py + config.json 路由 + pipeline_app 注册 + restart-pipeline.sh
2026-08-21 17:28:47 +08:00
c973a20fd1 feat(rbac/dapi): rbac 生成 CRUD + dapi 加入产线平台 + seed user_status 字典
- build.sh: 基础模块列表/CRUD循环/wwwroot链接 加 rbac dapi
- create_tables.py: dapi 幂等建表(downapp/downapikey)
- import_init.py: rbac 加入 INIT_MODULES(seed user_status 字典)
修复系统管理「用户管理」500(invalid path) + 「扫描未授权文件」500(__file__)
2026-08-21 17:14:59 +08:00
6cc8afba82 fix(tabpanel): 菜单重新点击时刷新 tab 内容,修复只切 tab 不更新数据
open_tab 对已存在的 tab 用缓存 content_buffer 直接 switch_content(不重新加载),
当前 tab 重新点击则直接 return,导致菜单重新点击时 tab 高亮变了但内容陈旧。
修复:已存在 tab 默认刷新(delete 缓存后重新 widgetBuild 重新请求 url 构建),
desc.refresh === false 时保留「用缓存不刷新」的旧行为。
2026-08-20 17:51:28 +08:00
398075ac87 fix(sysmgr): appbase 系统管理菜单修复
- build.sh: xls2ui 生成 appbase CRUD 页面(svgicon/appcodes/params)
- create_tables.py: appbase 加入幂等建表模块(svgicon 表此前缺失)
- index.ui: 移除 jsonhttpapi 死菜单项
2026-08-20 17:43:32 +08:00
0477563637 fix(build.sh): pip install 列表补 pipeline-service(漏装导致部署不经过 pip install)
build.sh 第 5 步 clone 列表含 pipeline-service,但第 6 步 pip install 列表漏了它,
导致 pipeline-service 部署时不被自动 pip install,只能手动(此前 editable install 就是
手动 pip install -e 的产物)。补上后 pipeline-service 走普通 pip install(site-packages 有
真实目录),部署 git pull + pip install 两步都走 build.sh 固化流程。
2026-08-20 13:58:46 +08:00
fa3de8bf96 feat(iteration): create_tables.py 幂等迁移——sd_iterations 加 seq_no 列 + 存量回填 + active→in_progress 2026-08-19 17:06:43 +08:00
b3fc5f99b2 feat(build): 一键部署自动安装 office 技能运行时依赖(Node v22.23.2 预编译二进制 + pymupdf) 2026-08-19 13:59:51 +08:00
88d10b7999 feat: 任务最大重复数(task_max_retry)——超限暂停任务链+抛故障给人工,人工处理后reset_task_retry清零重执行 2026-08-19 07:29:09 +08:00
16ab9f73a0 feat: migrate_task_hierarchy.py 存量环境幂等迁移 parent_id/depends_on(避开 create_tables.py 全量 DROP 业务表) 2026-08-19 06:00:55 +08:00
3d55d590bf feat: PM任务分解与编排——父子关系(parent_id)+依赖串行(depends_on)+任务树分层 2026-08-19 05:53:28 +08:00
c4cc9b6030 feat(deploy): create_tables.py 加 pipeline_git_locks 锁表(跨主机 git 串行锁) 2026-08-18 18:13:51 +08:00
d1374bda82 feat(worker): start.sh 支持多 worker 实例(bash start.sh worker <id>,端口 9090+id,独立 pid) 2026-08-18 17:19:43 +08:00
2cb864940c feat(worker): start.sh 支持 web/worker/all 三种运行模式,多 pid 文件 + 条件加载 .smssend 2026-08-18 17:15:22 +08:00