Pine
b0ffd9940b
fix: 全方位身份权限审查与修复
...
1. PortSwitchGuard 修复:
- 移除对已废弃后端接口 /auth/select-identity 的调用
- 改为 authStore.selectIdentity 纯前端切换,不重新签发 JWT
- 符合'身份始终由一个JWT管理'的原则
2. Header/Sidebar 身份切换修复:
- 同样改为纯前端切换,不调用后端
- 移除 setSwitchingPort 状态(不再需要)
3. 登录流程修复:
- 移除多身份选择弹窗,JWT 始终包含所有身份的叠加能力
- 登录后直接进入系统,身份切换在应用内通过 IdentitySwitcher 完成
- 移除 handleSelectIdentity、identityCandidates 状态、PORT_LABEL_KEY 常量
4. 前端权限判断修复:
- hasPermission 添加平台管理员全权限判断(与后端 permission_granted 一致)
- role=operator 或 capabilities 包含 operator 时恒返回 true
5. 移除 authApi.selectIdentity 方法(后端接口已移除)
身份模型确认:
- 服务端: 叠加制能力模型(capabilities),JWT 包含所有身份的叠加能力
- IM端: is_member 根据 biz_type 调用 is_park_member/is_enterprise_member
- 桌面端: authStore 管理身份状态,selectIdentity 纯前端切换
2026-09-14 00:08:11 +08:00
Pine
1221fe67a0
feat: 政策详情页添加正文、点赞、评论功能
...
1. 修复正文渲染: 同时支持content_html和body字段
2. 新增点赞功能: 点击点赞/取消点赞,实时更新点赞数
3. 新增评论功能:
- 评论列表展示(支持嵌套回复)
- 发表评论
- 评论点赞
4. 新增API方法: likeOpcContent/getOpcContentComments/addOpcContentComment/likeOpcComment
5. 新增ContentComment类型定义
2026-09-13 23:43:33 +08:00
Pine
3b27bf3583
refactor: 身份切换改为纯前端状态,不重新签发JWT
...
1. authStore: selectIdentity不再调用后端,仅更新currentIdentityId和user中的身份字段
- JWT始终包含所有身份的叠加能力(capabilities)
- 权限判断基于所有能力,而非当前选中的身份
- currentIdentityId仅用于UI展示和应用内的身份视角切换
2. IdentitySwitcher: 移除后端调用和loading状态,纯前端切换
3. 新增currentIdentityId状态,init和login时从user.identityId恢复
2026-09-13 23:33:42 +08:00
Pine
fa61b15da8
feat: 多身份切换器组件 + 应用中心集成
...
1. 新增IdentitySwitcher组件
- 显示当前身份,点击展开所有可用身份列表
- 支持运营方/园区管理员/企业管理员/个人四种身份类型
- 每种身份有对应图标和颜色标识
- 切换时调用/auth/select-identity接口,重新签发JWT
2. authStore新增selectIdentity方法
- 切换身份后更新user对象(role/orgId/capabilities等)
- 切换过程中设置switchingPort=true,避免路由权限误判
- 切换后自动刷新权限详情
3. 应用中心页面集成身份选择器
- 在应用列表顶部显示IdentitySwitcher
- 用户同时具有多种身份时显示,单身份时隐藏
2026-09-13 23:28:44 +08:00
Pine
315980964d
fix: 活动卡片高度统一
...
- Col设置display:flex,Card设置height:100%撑满
- Card body使用flex布局,内容区域flex:1
- 封面图区域固定120px高度,无图时显示占位
- 标题固定2行高度(minHeight:40px)
- subtitle/地点/主办/发布字段固定minHeight,避免条件渲染导致高度跳动
2026-09-13 23:04:29 +08:00
Pine
03d79eaee6
fix: 桌面端补贴tab渲染失败
...
根因: SubsidyTabContent中使用了fmtYuan,但该函数定义在LineChart组件内部,
SubsidyTabContent作用域访问不到,导致ReferenceError渲染崩溃。
修复:
- SubsidyTabContent内新增fmtYuanLocal函数
- 所有引用改为fmtYuanLocal
- handlePassportUpload参数类型改为any(避免React命名空间引用)
- materials filter增加空值保护
2026-09-13 21:35:53 +08:00
Pine
f30c5094a2
feat: 桌面端认证表单支持外籍人士+护照上传
...
- employment类型证件类型切换
- 护照号/国籍字段
- 护照照片选择(base64)
2026-09-13 20:47:30 +08:00
Pine
05351babb6
feat: 桌面端补贴手动申请+资格认证
...
- authApi新增: getOpcEligibilityStatus/applyOpcEligibility/applyOpcSubsidy/getOpcSubsidyCalcPreview
- SubsidyTabContent重写: 认证状态卡片+认证弹窗+手动申请(周期+预览)+历史记录
2026-09-13 20:39:00 +08:00
Pine
2aeda5e411
refactor: 桌面端补贴tab改为申请+管理,去掉测算
...
- SubsidyTabContent重写:概览卡片(累计补贴/待审核/已发放)+申报说明+历史发放记录列表
- authApi新增getOpcSubsidyRecords调用/opc/compute/subsidy/records
- 补贴记录通过server-core转发→compute端PAT鉴权接口获取
2026-09-13 19:40:25 +08:00
Pine
1ddd86bee6
feat: 算力补贴体系 - 桌面端补贴tab
...
- 算力中心新增补贴tab:补贴说明+补贴测算(两套算法)+发放流程
- 补贴测算支持自定义模型组合/消费额/成本比例/算法/梯度系数,实时显示综合补贴率
2026-09-13 19:04:51 +08:00
Pine
58df004d02
fix(console): 清理桌面端控制台 React/antd 开发期警告
...
- mermaidComponents 增加安全 <a> 渲染器:解构掉 XMarkdown 注入的
domNode/streamStatus,避免透传到 DOM 触发 React warning,并改为
外链在系统浏览器/新标签打开(防止 Tauri WebView 内跳转丢失应用)
- 6 处独立 Spin+tip 改为嵌套模式(antd 要求 nest/fullscreen 才显示 tip),
消除 'tip only work in nest or fullscreen' 警告:MainLayout Suspense
fallback、DefaultRedirect、Network Chat、政策/服务详情页
说明:Chat 页正文的 domNode/streamStatus、Input key、flushSync、
findDOMNode 警告来自 @agentscope-ai/chat 三方库内部硬编码,开发期
显示、不影响功能,生产构建无。
2026-09-13 17:31:54 +08:00
Pine
05eedbca9d
fix(console): 企业管理-算力余额页个人余额口径统一为引擎可用额度
...
个人余额卡片与转账弹窗改取 userBalance.available(quota - used_quota),
与算力中心/我的余额的「可用余额」口径一致,不再因账本 personal_balance
(仅记充值/企业转入) 为 0 而显示 0;副标题改显总额度/已用/企业归集。
配套后端 from-personal 转账已改以引擎可用额度为权威。
2026-09-13 17:14:52 +08:00
Pine
cb7d07777d
测试:修正 git/agents 旧断言与实际调用不匹配(基线既有问题)
...
- git.test: 断言适配 request 第二参数(method/headers);对象断言改用 objectContaining
- agents.test: rebuildMemoryIndex 实际带 scope=all 参数
2026-09-13 16:13:37 +08:00
Pine
7e9969ec00
修复:登录后仍 401 / 身份状态不正确的根因链路
...
- auth_token_store: load 读取源统一为 session 文件优先(消除两文件不同步);
save 后自动失效 server_client 的 5 秒 token 缓存(invalidate_token_cache 此前零调用)
- auth.py: 微信/小程序扫码登录成功后补写完整 session(与主登录路径对齐)
- auth.ts: 受保护接口复用统一 request 封装(401 会话自愈,不再裸抛导致权限/身份静默缺失)
- authStore: init 检测 token 与旧 profile 的 sub 不一致时以 token 为准(防账号残留错配)
- request: 401 确认重新登录时同步清空内存 authStore 身份
- auth.test: 适配统一 request(headers.get)
2026-09-13 16:13:32 +08:00
Pine
e5a9366d94
修复:401 不再静默清空登录态强退,改为会话自愈 + 友好提示
...
- request.ts 401 处理重构:
1) 先自愈:从 /auth/session(桌面端后端持久化登录态)取回有效 token 写入
localStorage,重试原请求一次(业务接口有效,登录类 /auth/* 不参与)
2) 自愈失败:弹「登录状态已失效」确认框,用户确认后才清 token 跳登录,
不再任何 401 即静默 clearAuthToken + 强制跳转
- 覆盖进入「我的企业」等强鉴权页面时因 token 残留/失效被误判退出登录的场景
- 测试:request 22/22 通过(含自愈重试、自愈失败提示、auth 递归防护)
2026-09-13 15:44:13 +08:00
Pine
27f1b7ff24
设置-模型:PineAgents 模型卡片系列/图标改为读取算力中心真实数据
...
- 移除 seriesOf 前缀/版本剥离推断系列(数据库为准,被否决方案)
- 系列分组:useComputeModelMeta 匹配算力模型元数据 series,未匹配归入「未分组」且固定排最后
- 模型图标:icon_file || supplier_icon_file(真实图片),未匹配回退渐变首字母
- 系列头:显示数据库系列图标(series_icon_file || series_icon)
- 测试 5/5 通过,tsc 通过
2026-09-13 15:27:55 +08:00
Pine
f9230c07d1
fix(boot): 初始化页进度条严格单调递增 + 消除导航黑屏
...
- 进度逻辑重写:checking 阶段 1.5s 快速到 80-90% 随机值,随后每 1.5s +1% 缓慢爬升到 97%,
彻底移除原 85-92% 随机波动(会导致 90%→80% 回退)
- ready 阶段 0.4s 迅速到 100%,所有阶段用 Math.max 保证绝不回退
- CSS 移除 width transition(JS 已按帧驱动,transition 导致进度条与数字不同步抖动),
圆点 7px→5px 适配轨道高度
- Rust 端 webview 设置深色背景 #0f172a,与启动页一致,消除 window.location.replace
导航间隙的闪白/黑屏
2026-09-13 15:00:30 +08:00
Pine
6d042bc5c5
桌面端:模型元数据增强——聊天/设置模型项接入算力中心真实系列与图标
...
- 新增 utils/computeModelMeta.ts(useComputeModelMeta):从 /api/opc/compute/models
读取算力中心模型元数据(series/icon_file/supplier_icon_file),按 id/name 建立索引
- 新增 components/computeModel/ModelMetaBadges.tsx:模型图标+系列徽标(匹配不到回退原渲染)
- Chat/ModelSelector 模型项:显示模型图标(icon_file||supplier_icon_file)+系列徽标
- CandidateModelSection 候选模型:追加系列徽标
- Settings/Models(智能体设置):ModelsSection/RemoteModelManageModal 模型下拉带系列前缀
- 算力-模型(Compute.tsx):模型项图标补充供应商图标兜底 supplier_icon_file
2026-09-13 14:38:30 +08:00
Pine
a2f230d7f4
fix(compute-desktop): 系列分组排序——未分组固定排最后
2026-09-13 14:14:48 +08:00
Pine
1ace97b2eb
fix(compute-desktop): 系列渲染从数据库读取——去除按前缀推断
...
- auth.ts 新增 getOpcComputeSeries(公开系列接口)并补全模型类型字段
- 分组 key 用 m.series(DB),去掉 seriesOf 前缀推断(函数已删)
- 系列头图标优先取系列表 icon,其次模型级 series_icon_file
2026-09-13 13:37:17 +08:00
Pine
5c7e9a13c9
feat(desktop): 权限详情强制刷新、园区成员判定与通讯录/授权管理
...
- getPermissions 带 nocache=1,避免权限变更后读到旧 company_member_of
- jwt 新增 getUserParks/isParkMember 园区归属判定
- 通讯录与 AgentGrants 页面能力增强
2026-09-13 11:14:38 +08:00
Pine
edc4400fa4
feat(desktop): 算力中心 API 接入信息 4 端点展示(含 tsc 清理)
...
- API tab 扩为 Base URL / OpenAI Bearer / Anthropic x-api-key / Models 四行
- 清理 Sidebar parkAdmin、communicationStore、BackendLoadingPage 未使用代码,tsc 全绿
2026-09-13 11:14:37 +08:00
Pine
d790699b11
fix(enterprise): 算力页成员余额列名改为「可用算力」
...
后端已改为返回引擎实时真实余额(个人充值+企业分配),列名同步更准确。
2026-09-11 21:54:07 +08:00
Pine
123ba0d0fa
feat: 桌面端认证/通信/tauri 后端更新 + README
...
- auth/jwt/header 认证流程更新,会话与令牌处理增强
- 通信(ChatWindow/ConversationList/Network)更新
- tauri backend.rs/remote.rs、tauri.conf.json 更新
- pineagents app 路由(agent_gate/opc)与配置更新
2026-09-11 21:17:48 +08:00
Pine
bbae20107f
fix(router): lazyImportWithRetry 支持单文件页面的 .tsx/.ts 扩展名匹配
...
AgentGrants.tsx 是 Settings 下唯一的单文件页面(其余均为目录),
lazyImportWithRetry 的 glob key 解析只尝试了 /index.tsx、/index.ts,
未尝试 .tsx/.ts 后缀,导致 glob 未命中后回退到 @vite-ignore 运行时
动态 import,生产环境请求 404 → 返回 HTML → 'text/html' is not a
valid JavaScript MIME type → 页面渲染崩溃。
增加 .tsx/.ts 扩展名候选,与目录形式并列尝试。
2026-09-10 19:41:19 +08:00
Pine
d03e3e12eb
fix: 修复智能体互通页面TypeScript构建错误(PageHeader props/未使用变量/类型转换),完成前端构建
2026-09-10 15:02:05 +08:00
Pine
d9dcbf214c
fix(models): 移除 OpenCode 不可用的免费模型并增强错误提示
...
- OpenCode *-free 免费模型在第三方 API 直连时被上游硬性拒绝
(400 MissingSessionID: free tier can only be used in OpenCode),
选中后必然 MODEL_EXECUTION_ERROR;从内置列表与探测结果中移除
- 模型选择器过滤掉无可用模型的 provider(含仅剩非对话模型的情况)
- convert_model_exception 对服务商限制类错误(only be used in /
model is unavailable / missing session / upstream request failed)
给出明确中文提示,不再只显示「模型执行失败」
2026-09-10 14:04:40 +08:00
Pine
42ce8d3d83
feat: 智能体互通功能完整实现——新增Agent/Network互通列表页(在线智能体展示+搜索+过滤)、跨端调用聊天页(复用ChatWindow+agent_task发送)、路由/菜单配置、智能体管理页增加授权管理入口、AgentGrants页增加三级权限模型说明
2026-09-10 13:24:51 +08:00
Pine
8fd3bcc89d
fix(login): 验证码发送失败时同样进入60s倒计时并禁用按钮,配合服务端冷却避免触发阿里云流控
2026-09-10 12:19:28 +08:00
Pine
81e7e0f946
feat(agent-gate): 桌面端前端——IM 调用智能体入口(企业目录选择器+agent_task 发送)、agent_reply 状态卡片、智能体授权管理页(/agent-grants)+路由菜单
2026-09-10 10:33:59 +08:00
Pine
4cda138747
fix : #1 消息中心前端——侧边栏沟通未读角标 + 站内消息轮询与点击已读
...
- Sidebar '沟通'菜单显示会话未读总数角标(communicationStore 驱动)
- /opc/messages 页:30s 轮询刷新 + 点击单条调 POST /opc/messages/read 标记已读并即时更新
- authApi 补 getOpcMessagesUnread / markOpcMessagesRead(配套 server-core 新接口)
- OpcList 支持可选 onItemClick
2026-09-09 04:57:34 +08:00
Pine
28188f59dd
fix: 云超服待修复清单 #2-#21 批量修复
...
- #2 活动详情页返回按钮去重(移除 OpcPageHeader 假按钮)
- #4/#5 企业成员加入时间/提交时间 ISO 格式化(dayjs)
- #6 智能体列表名称列补启用/禁用 Tag(i18n 五语言)
- #7 编辑不存在的智能体返回可读中文提示
- #8 模型管理 Provider 图标 24→32
- #9 SKILL.md frontmatter YAML 错误中文友好提示(含行号)
- #10 补 PUT /skills/pool/{name}/automation 路由(auto_sync 持久化+即时同步),修复 405
- #11 技能池"浏览市场"死链改为 /skills?view=market
- #12 安全规则操作列 width 100→160 + fixed right
- #13 自定义规则增删改即时自动保存(updateToolGuard),切页不丢失
- #14 补 GET /agent-stats/llm-tool-trend 路由(复用 by_date),Token 页 404 修复
- #15-#21 插件安装异常统一友好化:URL 非 ASCII 规范化、HTTPError/URLError/BadZipFile/zip 结构分别映射中文提示、剥离命令行前缀
2026-09-09 04:49:55 +08:00
Pine
c0fa57c21c
fix(chat): 对话模型选择器过滤非文本模型并修复免费层 provider 误显示
...
- buildEligibleProviders 不再无条件放行 is_free_tier provider:
无 key 且未连接 OAuth 的免费层(openrouter/gemini/zhipu/github-models 等)
不再显示,避免选中后调用 401/403 报错
- 新增 isNonChatModelId 过滤 TTS/ASR/embedding/图像生成/视频生成等
非对话模型(qwen3-tts-flash/qwen3-asr-flash/qwen-image/kling 等),
与后端 _is_non_chat_model 规则保持一致
- 后端 _NON_CHAT_SUBSTRINGS 补充 video-generation(kling 系列)
2026-09-09 04:13:38 +08:00
Pine
dc65eeaec6
服务管理页审核体验:明确「审核通过后自动上架」
...
- 状态标签 pending 改「审核中」;列表内显示提示「审核通过后自动上架,
无需其他操作」
- 重新上架:个人提交后提示「已提交重新上架审核,审核通过后自动上架」
2026-09-09 03:16:28 +08:00
Pine
8a88a1d1f8
修复服务封面上传 422:桌面端 /service-market POST 透传 multipart
...
- 根因:hall.py service_market_post 用 forward()(JSON only)转发 multipart 上传,
body 被丢弃 → server-core 收到空请求 → 422 missing file
- service-market POST 增加 Content-Type 分流:multipart/form-data 走 forward_upload
透传文件(保留字段名与 Bearer JWT),JSON 仍走 forward
- 封面必填标识:label 显式加红星(antd5 裸 label 的 required 类不渲染星号),
与下一步强制校验保持一致
2026-09-09 02:56:52 +08:00
Pine
0f95f5e0e5
修复服务发布封面上传:antd Upload 改用 customRequest 上传真实 File
...
- 原 Upload 未设 customRequest/action,默认向当前页 URL(/console/opc/hall/services/publish)
发 POST → uvicorn 静态服务 405 Method Not Allowed
- onChange 手动 uploadMedia(file.originFileObj) 时机不稳导致后端收到空 file → 422
- 改为 customRequest 直接上传真实 File 到 /api/service-market/upload(一次上传,
OSS 直链回填 cover);onChange 仅处理移除清空
2026-09-09 02:46:58 +08:00
LinJie
a2e5e13bce
feat(pack): 统一 CLI 为 yunopc-hub、桌面品牌对齐,并补充 README 打包/增量更新文档
...
- Windows/macOS 打包脚本与 pineagents.spec:CLI 可执行名由 qwenpaw 改为 yunopc-hub
- NSIS 安装器:CLI 注册命令与多语言文案统一为 yunopc-hub / YunOPC-Hub / 云超服
- 桌面 OS(MenuBar/BootScreen/DesktopOS):品牌标识改用 BRAND 单一来源
- README:补充规范化版本号设置、macOS/Windows 一键构建、增量更新完整命令
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com >
2026-09-08 13:06:49 +08:00
Pine
dcdcb9d199
fix(about): 修正产品logo路径为绝对路径
2026-09-08 10:50:56 +08:00
Pine
172ea59649
feat(ui): 语言切换/循环模式/项目目录/设置页/插件市场/聊天组件等前端更新
2026-09-08 00:11:22 +08:00
Pine
7ff5c11c08
feat(plugins): pineagents 插件目录下载/加载与版本兼容;前端插件API更新
2026-09-08 00:11:14 +08:00
Pine
8b2e320974
feat(portal): 园区承运/企业/OPC财务与通知页面更新
2026-09-08 00:11:07 +08:00
Pine
0c59bc0c5c
feat(activities): OPC活动功能三页面+API+路由菜单
2026-09-08 00:11:01 +08:00
Pine
0341730668
feat(desktop): 深色科技风启动初始化页;Tauri v2 dmg配置修复;AppCenter createPortal解决覆盖;CORS白名单补8093
2026-09-08 00:10:41 +08:00
Pine
f7bcbfa170
ui: 算力中心平台中继令牌说明改为平台中继接口
...
避免在 UI 上出现'平台中继令牌'字样(该令牌由系统管理,不对外展示)。
后端已过滤该令牌的列表展示和删除操作。
2026-09-08 00:08:36 +08:00
Pine
d384bf256a
fix: 修复清理调试日志后残留的 console.log( 语法错误
2026-09-07 23:34:54 +08:00
Pine
114b5fa484
chore: 移除外链调试页 /ext-debug 及相关调试日志
...
- 删除 ExternalLinkDebugPage.tsx 调试页
- 移除 App.tsx / builtinRoutes.tsx 中的 /ext-debug 路由注册
- 移除 Sidebar.tsx 底部「外链调试」入口按钮
- 清理 osRouteStore/osWindowStore/WebPage/openExternalLink 中的
[ext-debug] 调试日志
2026-09-07 23:33:48 +08:00
Pine
f2871a2153
fix: 移除禁用系统浏览器后未使用的 invoke/常量 import
2026-09-07 23:30:13 +08:00
Pine
c8a704d65d
security: 桌面端绝对禁止调用系统浏览器
...
堵死所有系统浏览器调用路径:
1. Rust open_external_link 命令改为 no-op(不再调用 app.shell().open,只记录日志)
2. capabilities 移除 shell:allow-open 权限(前端无法直接调用 shell.open)
3. 前端 fallbackToSystem 改为 no-op(容器打开失败时仅日志,不做任何外部打开)
4. 前端 openExternalLinkInternal 的 tauri 分支不再 invoke 系统浏览器命令
5. WebPage 容器移除「系统浏览器打开」按钮(blocked 提示保留但无操作按钮)
配合原生层 on_new_window=Deny(已在上次提交)+ 前端 window.open 守卫 + <a> 点击拦截器,
形成完整的系统浏览器禁用策略:所有外部 HTTP(S) 链接统一由应用内容器 WebPage 沙箱接管。
2026-09-07 23:22:28 +08:00
Pine
0132cbfd04
fix: 前端 window.open 守卫从源头阻止 Tauri 新窗口/系统浏览器双开
...
- 新增 windowOpenGuard.ts:覆盖 window.open,外部 HTTP(S) 链接统一走
openExternalLink(应用内容器 WebPage 沙箱),同源/相对/mailto/tel 放行
- App 启动时 installWindowOpenGuard() + 预加载黑白名单规则
- 回退 Rust 端 unstable feature / on_new_window 方案(API 被 unstable 门控,
编译路径复杂;前端守卫更可靠且无需重新打包 Tauri)
- 配合 interceptBlankLinkClicks(<a> 点击 capture preventDefault)形成完整接管
2026-09-07 22:57:21 +08:00
Pine
fe0af6f964
fix: 网页容器三问题修复
...
1. 双重打开:tauri.conf webview.new_window=deny,阻止 target=_blank/window.open
被 Tauri 转给系统浏览器(需重新打包 Tauri 生效)
2. 黑名单未静默:openExternalLink/openInAppWebView 加同步缓存黑名单判定
(getCachedUrlRulesSync + classifyUrl),命中立即 return 无任何动作;
App 启动预加载 loadUrlRules,避免首次点击异步等待
3. 加载慢:iframe 不再 visibility:hidden,立即渲染;loading 改半透明覆盖层;
blockedTimer 6s→15s 减少误报系统浏览器打开
2026-09-07 22:38:58 +08:00