Pine
60596ecafa
feat(incubator): 孵化器入驻与叶子节点管理
2026-09-08 00:10:26 +08:00
Pine
ff234f7071
feat(sms): 迁移 PineSound 阿里云短信+Redis缓存+真实随机数;强制MySQL禁用SQLite;连接池取消请求shield修复
2026-09-08 00:10:16 +08:00
Pine
539282f18f
security: 平台中继令牌不对外展示、不允许删除
...
平台中继令牌由系统自动创建(name='平台中继令牌'),桌面端智能体
调用模型时使用此令牌。为防止用户复制外泄配额或误删导致桌面端
无法调用模型:
1. GET /opc/compute/tokens:过滤掉 name='平台中继令牌' 的令牌,
不返回给前端展示
2. DELETE /opc/compute/tokens/{id}:删除前校验,若目标令牌是
平台中继令牌,返回 403 拒绝删除
3. 定义常量 PLATFORM_RELAY_TOKEN_NAME 统一管理
2026-09-08 00:08:27 +08:00
Pine
dfeda0c784
feat: URL 名单支持通配 *.gov.cn 与正则 /pattern/ 形态(后端编译校验)
2026-09-07 22:25:23 +08:00
Pine
7cce5cd14a
feat: 站点 URL 白名单/黑名单管理 API
...
- GET/POST /admin/site/url-rules、DELETE /admin/site/url-rules?rule_type&host
- 存储于 site.url_whitelist / site.url_blacklist(SystemConfig,公共 /site/config 可读)
- 域名规范化校验;写审计
2026-09-07 22:19:26 +08:00
Pine
ff383c0811
feat(db): 企业身份链路四表迁移(认领/入驻/团队/成员)
2026-09-07 16:57:27 +08:00
Pine
3a1bb75417
fix: 运营方兜底审核园区级认领/入驻(admin 园区详情可用)
...
- claims/reviews、companies/applies/reviews:运营方可见全部待审园区级申请
- review_claim/review_apply:park_admin 级允许运营方兜底审核
2026-09-07 16:23:43 +08:00
Pine
1cd26e174e
feat: 企业认领/企业入驻申请/团队 身份链路
...
- company_claim_requests:认领园区入驻企业(仅搜索);admin 认领仅当企业无管理员;
审核人:admin→园区管理员,member→有企业管理员则企业管理员否则园区管理员;
证明资料(姓名/身份证/手机号)仅存证
- company_apply_requests:已有企业加入平台;park_entered 园区管理员审,
independent 运营方审;通过后建 ParkCompany 并设提交人为管理员
- teams/team_members:团队即建即用;支持升级为企业(复用企业入驻申请)
- 审核权限:园区管理员=ParkTenant.operator_user_id;企业管理员=is_admin;运营方=operator
- 新表由启动时 create_all 幂等创建
2026-09-07 16:15:35 +08:00
Pine
a97c09086a
fix: list_models 循环取全部分页,修复模型目录缺失早期 ASR 模型
...
引擎 /api/models 按 id 倒序分页(默认 100/页),原实现只取第一页,
导致 qwen3-asr-flash-2026-02-10 / qwen-audio-3.0-asr-flash / fun-asr 等
早期 ASR 模型不在 /v1/models 目录中,语音转写页只能选到 realtime 变体
(走流式通道,HTTP 转写 404)。现循环拉取直至 total 取完。
2026-09-07 15:24:26 +08:00
Pine
e831fdd34e
feat: 内容审核体系(0070)— 违规内容库/举报表/IP采集/统一审核服务/审核API
...
- 迁移0070:content_moderation_records(违规库,快照+发布者+IP+原因+处置人)、
content_reports(举报队列);各内容表加 ip 列,dm_messages 加 hidden,
community_comments/ratings 加 status,users 加 profile_hidden/original_nickname
- moderation_service:hide/restore/delete(物理删除留档)/list/archive/report/
handle_report/scan + 申诉通知;用户资料隐藏自动脱敏昵称
- rbac_moderation:/admin/moderation/{type} 列表、hide/restore/delete、
violations 违规库、reports 举报处理、scan 巡查;/content/report 用户举报入口
- IP 采集:任务/岗位/服务/社区帖子/评论/私信/评价/主页提交创建端点写入发布者 IP
- 前台可见性:社区评论/私信查询过滤 hidden
2026-09-07 15:07:43 +08:00
Pine
f6e66213bd
fix: 保存人才档案即上架;新增独立上架/下架接口
...
- hall_upsert_talent patch 补 published=True:保存即进入人才大厅(修复保存后仍显示已下架/上架后大厅不展示)
- 新增 PUT /talents/me/publish:published 单独上架/下架(下架后大厅不展示,本人仍可见)
2026-09-07 14:20:06 +08:00
Pine
edf87cbe5e
feat: 算力令牌名称自定义,留空自动编号
...
- POST /opc/compute/tokens 接受 name 字段
- name 为空时按该用户名下令牌数自动命名(令牌1/令牌2/…)
2026-09-07 14:08:02 +08:00
Pine
1462ad3c82
feat: 消耗账单加渠道字段(桌面端 / Key·令牌名)
...
token_name 为空或平台中继令牌 → 桌面端;自建令牌 → Key · 名称
2026-09-07 14:03:04 +08:00
Pine
cc5e30f985
fix: /opc/compute/usage/logs 时间戳兼容(毫秒转 ISO,双保险)
...
算力端 /api/log/self 已转 ISO;此处兼容数字毫秒时间戳避免前端显示异常
2026-09-07 13:32:51 +08:00
Pine
047d5d8028
feat: 我的主页互动数据补充访客昵称/头像(打招呼/点赞)
2026-09-07 12:42:10 +08:00
Pine
41c6686b81
db: 新增个人主页社交互动三表迁移(0069_user_page_social)
...
- user_page_views/user_page_likes/user_page_greets
- 生产 MySQL 走 alembic 迁移建表(initialize 运行时仅保活不建表)
2026-09-07 12:31:53 +08:00
Pine
cdcc50a1c6
feat: 个人主页流量/点赞/打招呼
...
- 新增 user_page_views/user_page_likes/user_page_greets 三表
- UserPageSocialRepository:访问去重计数/一人一赞可取消/打招呼/近7日趋势
- rbac_pages 新增 POST /pages/{uid}/view|like|greet 与 GET /pages/me/social/stats
- get_user_page 返回 social 互动数据(viewCount/likeCount/greetCount/likedByMe)
2026-09-07 12:28:35 +08:00
Pine
99612ff5ee
修复 relay 记账用户解析缺失 db 参数(否则记账永不触发)
2026-09-07 12:20:16 +08:00
Pine
c8870d5b3b
算力余额体系闭环:企业分配/个人充值分离记账+退出返还
...
- users 新增 compute_personal_balance(分):个人充值/企业转入个人账本,
与 company_members.compute_balance(企业分配)彻底分离
- relay 转发引擎后按实际用量记账(deduct_usage_post):
先扣企业分配余额(折扣低→高)、不足扣个人余额,写 compute_usage_records;
流式 SSE 透传时解析 usage chunk 记账,JWT 登录态调用生效、PAT 调用不重复记账
- 个人充值到账(pay/service)与 企业↔个人互转 同步更新个人账本
- 成员退出企业(leave)与管理员移出成员(remove_company_member):
仅返还企业分配剩余(member.compute_balance)至企业余额,同步扣减引擎 quota,
绝不触碰个人充值余额
- GET /compute/user/balance 个人余额改读独立账本(不再引擎倒推)
- 迁移 0067;存量个人充值/互转净额已回填
2026-09-07 12:19:50 +08:00
Pine
12f92e2453
feat: 桌面端安装包列(0066迁移)+算力定价增强+企业/支付相关更新
2026-09-07 10:14:23 +08:00
Pine
105510e170
关闭个人微信收款API,返回明确的暂不支持提示
...
修改内容:
1. POST /opc/pay/bindings/personal 接口返回403,明确提示个人微信收款暂时未开放
2. 引导用户先完成特约商户进件,进件通过并完成分账授权后即可收款
3. 保留接口路径,后续开放时只需恢复service.bind_personal调用
业务决策:
- 暂时关闭个人微信零钱收款(PERSONAL_OPENID分账)
- 当前阶段所有用户必须完成特约商户进件才能收款
- 后续版本有必要时再开放个人微信收款
2026-09-06 23:33:33 +08:00
Pine
534a8de023
修正:个人收款默认出资方应为服务商特约商户号,非直连商户号
...
业务逻辑澄清:
- 直连商户号(WECHATPAY_MCHID):用于平台业务(算力、应用包等支付)
- 服务商商户号(WECHATPAY_SP_MCHID):用于给用户商户开户、分账
- 特约商户号(sub_mchid):服务商下属的特约商户,是分账的出资方
修正内容:
1. WECHATPAY_DEFAULT_SUB_MCHID 默认为空,不再回退到直连商户号
2. 未配置默认特约商户号时,给出明确错误提示,引导完成特约商户进件
3. 需通过环境变量 PINEAGENTS_WX_DEFAULT_SUB_MCHID 配置服务商下属的特约商户号
2026-09-06 23:24:06 +08:00
Pine
7c110c4c09
修复:个人微信收款绑定报错sub_mchid is not assigned
...
问题:绑定个人微信收款时,服务商分账API需要出资特约商户号(sub_mchid),
但普通用户没有自有商户绑定时sub_mchid为空,导致微信SDK抛出
'sub_mchid is not assigned.'异常。
修复:
1. 配置中新增WECHATPAY_DEFAULT_SUB_MCHID,默认使用平台直连商户号
2. bind_personal函数中,用户无自有商户绑定时使用默认sub_mchid
3. 支持通过环境变量PINEAGENTS_WX_DEFAULT_SUB_MCHID覆盖默认值
2026-09-06 23:15:58 +08:00
Pine
7a8cf77775
修复:compute路由前缀错误导致404
...
问题:rbac_compute_pricing.py的路由前缀是/api/compute,
但dispatcher会去掉/api前缀后分发给core_app,
导致实际请求路径变成/compute/...,无法匹配/api/compute/...路由。
修复:将路由前缀从/api/compute改为/compute,
与其他路由(/admin、/hall等)保持一致。
2026-09-06 22:58:27 +08:00
Pine
eb7c5371c6
新增园区详情和成员列表API
...
新增API:
- GET /admin/park/tenants/{tid} - 园区详情(含统计:成员数/企业数/管理员信息)
- GET /admin/park/tenants/{tid}/members - 园区成员列表(含用户信息)
- GET /admin/companies/{cid}/members - 企业成员列表(含用户信息)
扩展_park_tenant_public函数,增加更多字段:
operator_user_id、city、address、contact、tags、area_m2、
default_company_discount、default_user_discount、created_at
2026-09-06 21:44:56 +08:00
Pine
2ce1626591
fix: 彻底修复删除用户外键约束问题;动态查询所有引用users的外键约束(任意列名);临时禁用外键检查避免表间依赖顺序问题
2026-09-06 21:28:07 +08:00
Pine
a8a62e5fcb
修复数据库配置:支持MySQL分字段配置
...
问题:config.py只处理了PINEAGENTS_DEMO_DATABASE_URL,没有处理
PINEAGENTS_MYSQL_HOST/PORT/USER/PASSWORD分字段配置,导致服务端
使用空的SQLite数据库,无法识别用户身份(园区/企业)。
修复:
- 支持MySQL分字段配置,自动构建DATABASE_URL
- 优先级:PINEAGENTS_DEMO_DATABASE_URL > MySQL分字段 > SQLite默认
- 与Redis配置方式保持一致
2026-09-06 21:13:57 +08:00
Pine
f4742ffbd1
fix: 改用information_schema查询有user_id列的表,彻底解决AsyncEngine/Session无法inspect的问题
2026-09-06 20:58:08 +08:00
Pine
3bd86b94ed
fix: AsyncEngine不支持直接inspect,改用session.run_sync获取表列信息
2026-09-06 20:55:45 +08:00
Pine
9b4875912e
fix: 删除用户时audit_logs外键约束失败;添加audit_logs到级联删除列表;改进删除逻辑先检查表是否有user_id列
2026-09-06 18:47:17 +08:00
Pine
e9c957808a
修复rbac_compute_pricing导入错误
...
- 修复rbac模块导入路径:从 ..rbac 改为 ...rbac
- 修复require_role不存在的问题:使用role_allowed函数创建check_role辅助函数
- 替换所有require_role调用为check_role
2026-09-06 18:26:27 +08:00
Pine
294ddf3c6a
fix: 0064迁移Text列移除server_default(MySQL不允许TEXT有DEFAULT),left_reason改为String(500)
2026-09-06 18:22:11 +08:00
Pine
2c2bdf0290
fix: 0064迁移改为幂等操作(列/表存在性检查),避免Duplicate column错误
2026-09-06 18:20:32 +08:00
Pine
e48d1b49ad
fix: 修复alembic迁移链断裂(0064/0065 down_revision不匹配)
2026-09-06 18:19:36 +08:00
Pine
9e2b2ad183
fix: 修复OpcCertApplyRequest前向引用未导入导致openapi 500; content_items.summary加长为Text
2026-09-06 18:18:22 +08:00
Pine
4dedb43d7f
算力多级折扣与企业余额体系 - 服务端核心改造
...
数据模型:
- 新增 tenant_discounts(运营端载体折扣)
- 新增 tenant_user_discounts(载体端账号折扣)
- 新增 compute_recharges(算力充值记录)
- 新增 compute_balance_allocations(余额分配记录)
- 新增 compute_usage_records(算力使用记录)
- 扩展 park_tenants(default_company_discount, default_user_discount)
- 扩展 park_companies(compute_balance, compute_balance_used)
- 扩展 company_members(role, compute_balance, compute_balance_used, left_at, left_reason)
核心服务:
- compute_pricing_service.py:四级折扣价格计算、余额扣费、企业余额管理
API接口(/api/compute):
- 运营端:载体折扣管理、标准价管理
- 载体端:企业折扣设置、账号折扣设置、默认折扣设置
- 企业端:余额充值、成员余额分配/回收、充值/分配记录
- 个人端:我的余额、使用记录、退出企业
- 内部:价格查询、算力扣费
数据库迁移:0064_compute_discount_balance.py
2026-09-06 17:59:56 +08:00
Pine
102c49654a
完善:删除用户接口增加完整级联删除逻辑
...
核心改动:
1. 删除用户前先级联删除所有相关数据(60+张表):
- 认证与信用:certifications、skill_tests、credit_scores、credit_ledger、credit_dimensions、user_badges
- IM/消息:messages、dm_messages、notifications
- 服务大厅:opc_services、service_inquiries、service_orders、community_posts、community_comments、community_likes、community_follows
- 培训:training_enrollments、training_course_enrollments、training_lesson_progress、training_certificates
- 招聘:jobs、job_applications
- 人才:talent_profiles
- 用户主页:user_pages、user_page_review_logs
- 邀请:invite_records(同时删除作为邀请人的记录)
- 财务:finance_records、escrows、contracts、invoices、disputes、ratings
- 任务:tasks、task_claims、task_deliveries、task_milestones、task_acceptances
- 园区/企业:park_members、company_members、park_admissions、park_transfers(同时删除作为负责人的企业)
- 内容互动:content_likes、content_comments、content_comment_likes
- 其他:sessions、agents、opc_profiles、investor_preferences、roadshow_registrations等
2. 安全防护:
- 防止删除当前登录账号
- 级联删除失败的表自动跳过,不影响主流程
- 返回级联删除的记录数量
3. 算力引擎同步删除:
- 删除用户后同步删除算力引擎中的账号
- 失败不阻断主流程
4. 审计日志:
- 记录删除操作和级联删除数量
2026-09-06 12:07:33 +08:00
Pine
e03f2c5fb8
重构:认证体系规范,新增prerequisite前置认证字段
...
- CertificationType 模型新增 prerequisite 字段
- Repository _to_dict 新增 prerequisite 字段
- 重写 init_cert_types.py 初始化脚本,规范认证体系
- 个人实名认证改为 L1→L2→L3 递进关系
- 高级认证增加更多认证信息(手持身份证、人脸识别、手机号、银行卡四要素等)
- 学历认证、职业资格认证、收款认证为独立认证类型
- 企业认证保持递进关系:基础→高级→信用
- 初始化脚本执行成功:新增4个,更新5个认证类型
2026-09-06 11:30:39 +08:00
Pine
6a526abf38
新增认证类型初始化脚本:完善个人认证和企业认证体系
...
- 新增 init_cert_types.py 初始化脚本(幂等执行)
- 个人认证体系(4项):
1. 基础实名认证:身份证+姓名,自动审核,+100分,永久有效
2. 高级实名认证:人脸识别+身份证,自动审核,+200分,永久有效
3. 学历认证:学历学位证书,人工审核,+30~200分(按学历等级),永久有效
4. 职业资格认证:职业资格证书,人工审核,+50~300分(按等级),永久有效
- 企业认证体系(3项):
1. 企业基础认证:营业执照+法人身份,人工审核,+200分,1年有效期
2. 企业高级认证:对公账户验证+实地认证,人工审核,+500分,1年有效期
3. 企业信用认证:企业信用报告,人工审核,+100~300分(按信用等级),半年有效期
- 每个认证类型包含完整的 materials_schema(表单字段定义)
- 支持图片、文件、文本、下拉选择等多种字段类型
- 区分自动审核(auto)和人工审核(manual)
- 支持等级配置(levels),不同等级对应不同信用分加成
- 已执行初始化:新增6个认证类型,更新1个
2026-09-06 10:30:24 +08:00
Pine
1e9c4343d3
算力中心新增消耗明细和趋势统计接口
...
- compute_client.py 新增 user_logs 方法,封装引擎日志接口(支持分页)
- rbac_opc.py 新增两个接口:
- GET /opc/compute/usage/logs - 消耗明细(分页,统一字段格式为前端期望的 snake_case)
- GET /opc/compute/usage/trend - 消耗趋势统计(近N天趋势、模型分布、时段分布)
- 趋势接口基于引擎日志数据聚合计算:
- 近N天消耗趋势(按日期聚合 cost 和 tokens)
- 模型分布(按模型名聚合调用次数,Top 5 + 其他)
- 时段分布(按24小时聚合消耗)
- 引擎对接失败时返回空数据,不报错(避免前端白屏)
- 模型分布自动分配颜色,便于前端饼图展示
2026-09-05 23:33:24 +08:00
Pine
2cb93b7751
修复:服务市场接口全线snake_case转camelCase,修复服务方信息加载
...
- 添加_to_camel通用转换函数,将所有snake_case字段转为camelCase
- 服务列表接口:添加LEFT JOIN talent_profiles,组装talent对象(userId/displayName/avatar/headline/bio)
- 服务详情接口:添加contentHtml字段转换,组装talent对象
- myServices接口:返回完整字段(category/description/contentHtml/paymentMethods等),支持编辑功能
- 修复前端无法正确读取opcName/publisherType/salesCount等camelCase字段的问题
2026-09-05 17:30:04 +08:00
Pine
7cfc0163e0
修复:服务详情接口浏览量自增异步任务导致SQLAlchemy会话状态冲突
...
- 根本原因:使用asyncio.create_task在后台执行db.commit(),主请求结束时调用db.close()导致会话状态冲突
- 错误:Method 'close()' can't be called here; method 'commit()' is already in progress
- 修复:改为同步执行浏览量自增和浏览历史记录,避免异步任务与会话生命周期冲突
2026-09-05 16:45:09 +08:00
Pine
9f1370dfe6
服务大厅电商化改造:数据库迁移+后端19个接口
...
- 迁移0062:opc_services扩展16列+service_orders扩展18列+新增3张表(评价/收藏/浏览)
- 新路由 rbac_service_market.py:服务CRUD/上下架/收藏/评价/订单全生命周期/支付,共19个接口
- 服务分类8个:技术开发/设计创意/营销推广/咨询服务/教育培训/生活服务/媒体内容/其他
- 双轨制支付:官方服务微信支付平台担保,个人服务支付方式徽章线下支付
- 订单状态机:待支付→待接单→服务中→待确认→已完成,含取消/退款分支
2026-09-05 15:46:46 +08:00
Pine
0fd1307d57
全线加入Redis缓存:1)统一Redis配置支持PINEAGENTS_REDIS_*前缀;2)增强cache.py:JSON序列化/缓存装饰器/批量删除/分布式锁/全局单例+连接池;3)大厅任务列表缓存8秒(key含用户ID+筛选条件);4)大厅总览缓存30秒;5)人才/服务/岗位列表缓存20秒;6)用户档案_actor_profile缓存30秒(can_accept核心依赖);7)认证类型列表缓存5分钟;8)应用启动时连接Redis,失败自动降级无缓存
2026-09-05 14:33:38 +08:00
Pine
166b0440c7
优化大厅任务列表性能:修复 N+1 查询问题。can_accept 支持传入预取的 actor_profile 参数;hall_tasks 预取一次用户档案后用 asyncio.gather 并发判断所有任务资格,避免每个任务都重复查询用户档案(23任务×4查询=92次串行查询→1次查询+并发判断)。tasks接口从4.5s降到0.8s
2026-09-05 14:14:22 +08:00
Pine
31d7aa80d2
修复 dispatcher 路由:/api/* 默认走 core_app(去掉 /api 前缀),仅 training 特有端点走 training_app;修复通知/信用/大厅等新端点 404 问题
2026-09-05 12:29:03 +08:00
Pine
9b1df88bf0
任务资格要求:最低信用分/要求勋章/要求认证(0061),can_accept 校验,发布端点接收
2026-09-05 11:33:37 +08:00
Pine
e131bba599
任务流程按模式适配:新增 assigned(指派/邀约待确认)/signed(签约托管) 状态 + accept-invite/sign 端点 + 按模式时间线 + 超时释放
2026-09-05 11:18:18 +08:00
Pine
6d0385ef88
task claim 表单承载:0058 迁移修复(TEXT 去 server_default) + register/grab 申请表单落库 + claims 返回 form
2026-09-05 11:08:55 +08:00
Pine
22674fbc63
市场目录支持 region 过滤(tags_json LIKE,如 yunnan-opc 专区标记)
2026-09-05 10:50:18 +08:00