Pine
ae206a23d8
修复 CertCenter.tsx 图标导入错误:CodeFilled 不存在,替换为 CodeCircleFilled
2026-09-05 13:54:54 +08:00
Pine
b501829c50
全局隐藏所有滚动条+信用页面响应式优化:1)layout.css全局隐藏滚动条(WebKit/Firefox/IE+antd内部);2)OpcList.module.less所有容器overflow-x:hidden+max-width:100%禁止水平滚动;3)Credit.tsx:RadarChart响应式SVG(viewBox自动缩放)、统计数据响应式列数(小屏2列大屏3列)、信用分字号响应式(36/42/48px)
2026-09-05 13:01:07 +08:00
Pine
8c5b49b861
优化认证中心样式:增加真实图标映射(含 fallback)、去除价格显示、卡片居中布局+大图标+hover 效果;修复 certification API snake_case→camelCase 字段转换(credit_points/badge_icon/review_mode 等)
2026-09-05 12:52:20 +08:00
Pine
3499fd1954
修复信用页面渲染错误:server-core 返回 snake_case 字段,前端 creditApi 转换为 camelCase(total_score→totalScore、level_benefits→levelBenefits、credit_bonus→creditBonus、earned→obtained、granted_at→obtainedAt 等);修复 Talent 页面 useLocation 未导入导致的渲染错误
2026-09-05 12:45:47 +08:00
Pine
da5a4f73c7
Hall 页面改用 Segmented+条件渲染替代 antd Tabs,确保一级 tab 和子页面标题/筛选区全部固定,列表独立滚动;Community 子页面同步改造为 flex 布局
2026-09-05 12:19:56 +08:00
Pine
dbdb937141
修复 HallTasks.tsx JSX 闭合标签不匹配(</> → </div>)
2026-09-05 12:15:33 +08:00
Pine
a1eb1c9b3d
桌面端逐页面布局规范化:全局 .page 改为 flex column 全屏布局,新增 .pageHeader/.pageBody/.pageFooter;19 个 OPC 页面改造为标题/tab 固定、列表区独立滚动、分页固定底部
2026-09-05 12:13:47 +08:00
Pine
a66b0b76d6
投标页去除卡片嵌套:bid 模式去掉外层 Card,详情 tab 直接用 TaskInfoCard,表单 tab 用轻量容器
2026-09-05 11:43:39 +08:00
Pine
e875fdb3a4
修复:HallTasks 缺少 Checkbox 导入导致页面渲染崩溃
2026-09-05 11:39:09 +08:00
Pine
c5c158aeb3
发布表单加资格要求区块;详情页展示信用分/勋章/认证要求;投标页加任务详情/投标表单 tab 切换
2026-09-05 11:33:39 +08:00
Pine
2e751f8536
详情页 Steps 按模式生成阶段序列;新增签约/确认接受/婉拒操作;MyTasks 适配待确认/已签约状态
2026-09-05 11:18:20 +08:00
Pine
9f06573de3
任务详情页重构为三视图:招募申请(报名/投标/抢单表单) + 招募管理(报名列表/标书评审) + 服务流程(阶段/里程碑/交付/验收/结算/沟通);大厅抽屉改为引导详情页办理
2026-09-05 11:08:56 +08:00
Pine
5878100590
修复 notify.ts request 导入源(config → request.ts)
2026-09-05 10:55:39 +08:00
Pine
b4092f47f4
修复 notify.ts import 路径(./config → ../config),解决 vite 无法解析模块导致白屏
2026-09-05 10:51:44 +08:00
Pine
2c22e3d6c7
应用市场专区:/plugins/market/search 透传 region 过滤,条目透传 tags 标记
2026-09-05 10:50:19 +08:00
Pine
e5077dea60
实时通知体系桌面端:SSE 实时通道+12s轮询兜底,通知中心分类/分页/深链/单条已读,菜单角标与全局toast
2026-09-05 10:35:57 +08:00
Pine
5612a3d8e7
菜单收纳:特殊权限菜单(运营端/园区端)移至底部,OPC 基础菜单保持靠前
2026-09-05 09:44:52 +08:00
Pine
0611a2f3a3
去除桌面端子角色:移除 SubRole 类型/标签/翻译,用户管理收敛为三角色,Header 徽标不再显示子角色
2026-09-05 09:39:03 +08:00
Pine
0ce33b012f
任务完整详情页:阶段进度/流转时间线/里程碑/交付版本/验收/结算/沟通,路由接入
2026-09-05 09:25:05 +08:00
Pine
686fee9c69
任务系统前端 v2:发布表单 v2 字段、六段标书、接单/交付/退出、验收/返工按钮
2026-09-05 03:41:04 +08:00
Pine
0eb3bd8000
信用页切真实API:L1-L8等级/无上限总分/徽章墙/信用流水,移除全部MOCK数据
2026-09-05 03:06:04 +08:00
Pine
1e6930fd55
feat(个人主页): 开放来访者信息获取能力
...
- postMessage 桥新增 opc:page:get-visitor, 返回 opc:page:visitor
- 仅返回昵称/头像/简介, 不含用户ID/手机号等敏感信息
- 未登录返回 null
- init 数据中同时包含 visitor 字段, 页面可直接读取
- 开发提示词同步更新
2026-09-05 02:47:18 +08:00
Pine
037c25fa1f
feat(个人主页): 开发提示词+动作桥接+admin代理
...
- 前端桥接新增 opc:action:open-chat/share/copy-link 动作
- 编辑弹窗增加'复制开发提示词'按钮(从服务端获取)
- 修复 navigator.clipboard undefined fallback(textarea+execCommand)
- 代理新增 /pages/dev-prompt GET 和 /pages/admin/dev-prompt PUT
2026-09-05 00:46:59 +08:00
Pine
f633708928
fix(个人主页): 退出按钮直接返回来源页,绕过iframe污染的历史栈
...
根因: Blob URL+allow-same-origin使iframe与父页面同源, iframe内部导航加入
浏览器联合会话历史。navigate(-1)先回退iframe历史而非父页面路由, 表现为
'iframe内返回上一级'而非退出usershome。
修复:
- 所有入口(HallTalents/Talent/Profile)导航到usershome时传递
state: { from: 当前path+search }
- handleClose优先用location.state.from直接navigate(replace), 完全绕过历史栈
- 无from时fallback到navigate(-1), 再fallback到首页
2026-09-05 00:29:15 +08:00
Pine
96fb0482fd
feat(导航状态): Hall和Talent页面tab状态同步到URL
...
- Hall: Tabs的activeKey从?tab=读取, 切换时setSearchParams(replace), 刷新/返回后恢复原tab
- Talent: Segmented的tab从?tab=读取, 同样同步URL
- 打开个人主页/应用后返回, URL中保留了原tab参数, 能正确恢复
2026-09-05 00:24:00 +08:00
Pine
e8fd4ee913
fix(个人主页): 退出按钮改用React Router navigate替代history.back
...
用useNavigate().navigate(-1)替代window.history.back(),更可靠地
回到进入前页面;无历史时navigate('/', {replace:true})回首页。
2026-09-05 00:20:20 +08:00
Pine
b13d5998fe
fix(个人主页): 修复Blob URL的useEffect依赖数组TDZ错误
...
useEffect依赖数组用了page?.pageType,但const page声明在hook之后,
渲染时评估依赖数组触发Cannot access 'page' before initialization。
改为data?.page?.pageType,effect内部用data?.page取值。
2026-09-05 00:16:32 +08:00
Pine
1d0d0c6adb
fix(个人主页): 用Blob URL替代srcDoc彻底解决hash路由白屏
...
根因: srcDoc的about:srcdoc不是有效URL, 用户HTML内hash路由<a href=#/page>点击时
浏览器尝试导航到about:srcdoc#/page, 导航失败导致iframe变about:blank白屏,
后续点击无任何元素可响应。加allow-same-origin无法解决此问题。
修复: HTML模式用URL.createObjectURL(Blob)生成真正的URL作为iframe src,
hash导航/localStorage/所有Web API均正常工作。useEffect cleanup时revoke释放内存。
embed模式仍用原始URL。
2026-09-05 00:14:21 +08:00
Pine
78ef8a70e3
fix(个人主页): HTML模式沙箱加allow-same-origin修复白屏
...
根因: srcDoc模式缺少allow-same-origin, localStorage/sessionStorage/indexedDB被浏览器拦截。
用户的hash路由SPA切换到工作台/数据页时读写localStorage抛异常导致白屏。
修复: html模式沙箱加allow-same-origin。srcDoc的origin始终是唯一不透明origin,
与父页面不同源, 无法访问父页面DOM/数据, 安全无虞。
2026-09-05 00:10:11 +08:00
Pine
3ce364c29c
fix(个人主页): 退出按钮返回进入前页面而非首页
...
iframe沙箱隔离保证父页面history不被污染,history.back()可安全回到进入前页面;无历史时fallback到首页
2026-09-05 00:04:20 +08:00
Pine
fb4af3b304
style(个人主页): 页眉复用桌面标准样式+退出按钮直接退出
...
- 身份条复用桌面Header: 56px高/glass-bg-strong毛玻璃/blur(18px)/glass-ring底边
- 页面背景复用桌面应用: #f7f7f7 + 顶部四色径向渐变光晕
- 退出按钮忽略iframe内部任何历史状态,浏览器直接replace回首页
2026-09-05 00:02:59 +08:00
Pine
ff64113856
feat(个人主页): 前端审核流程+能力数据桥接+URL模式无能力
...
- pagesApi新增submit/reviewList/review接口,类型新增reviewStatus等字段
- UserHomePage postMessage桥注入capabilityData(订单/证书等公开数据)给HTML
- 编辑弹窗: URL模式隐藏能力选择并提示; HTML模式选能力后加虚假接入处罚警告
- 上架流程改为: 保存草稿→提交审核→审核通过→上架; 身份条显示状态和操作按钮
- 移除直接上架开关, 修改已上架内容自动下架
- 代理新增/pages/me/submit和/admin审核接口
2026-09-04 23:52:02 +08:00
Pine
06a29f9b0f
fix(个人主页): 回归纯sandbox隔离,移除注入脚本和父页面路由
...
- 移除沙箱拦截脚本注入、handleOpenUrl、opc:page:open-url postMessage
- 仅靠浏览器sandbox强制隔离:无allow-popups/allow-top-navigation
- 内部所有跳转仅限iframe内,window.open和target=_top被浏览器阻止
- 彻底消除父页面navigate导致的白屏
- srcDoc直接渲染用户HTML,不注入任何脚本
2026-09-04 23:37:52 +08:00
Pine
3cee99362e
fix(个人主页): 相对路径在iframe内导航,禁止影响父页面
...
- handleOpenUrl 对相对路径(/order?xxx等)改为iframe内部导航(contentWindow.location.href)
- 不再调用父页面navigate导致白屏
- 仅/usershome/xxx和外部http(s)才跳出沙箱处理
2026-09-04 23:33:32 +08:00
Pine
5373eb796b
fix(个人主页): 沙箱隔离修复—禁止内部跳转影响外部
...
- 移除 iframe sandbox 的 allow-popups,内部 window.open/target=_blank 不再开浏览器新标签
- 注入沙箱拦截脚本:捕获 window.open、_blank/_top/_parent 链接、表单提交,统一 postMessage 转发
- 父页面 handleOpenUrl 统一路由:/usershome/xxx 新开 usershome 页面,外部 http(s) 开新标签,相对路径站内导航
- embed 模式同样移除 allow-popups,第三方站内部导航仅限 iframe 内
- 彻底解决白屏和多级退出问题
2026-09-04 23:30:00 +08:00
Pine
dad97fe749
feat(个人主页): 应用式全屏渲染+毛玻璃顶栏+入口环境适配
...
- UserHomePage 改为 position:fixed 全屏覆盖层(与 AppCenter embedPage 一致)
- 顶部身份条改为毛玻璃(半透明白+backdrop-filter blur),与应用主背景一致
- 右上角胶囊按钮上移至顶栏,浅色玻璃质感+蓝紫点缀
- 三处入口(人才大厅/人才页/个人中心)区分环境:OS桌面开窗口,浏览器布局 navigate 到 /usershome/:userId
- 返回按钮区分环境:OS关窗口,浏览器 history.back
- 头像加白边阴影,编辑按钮蓝紫渐变,徽章/信用标签蓝紫系
2026-09-04 23:23:28 +08:00
Pine
68665df2cf
fix(pages): 个人主页改为标准路由 /usershome/:userId(复用应用式窗口启动),点击反馈+uid兜底;解决vite dev glob未扫描新文件导致窗口内容不渲染
2026-09-04 22:55:00 +08:00
Pine
7411ef404a
feat(talent): 人才页新增「个人主页」tab — 展示公开名片状态并提供创建/编辑入口
2026-09-04 22:33:32 +08:00
Pine
fde7d2f81a
fix(pages): 修复人才点击跳转 — WindowRouter不解析:uid改用location解析;个人中心新增「我的个人主页」入口
2026-09-04 22:15:43 +08:00
Pine
a493f71d2c
feat(pages): 人才市场去抽屉直接跳个人主页;未自定义主页渲染平台默认名片(基础资料+服务+发起沟通)
2026-09-04 22:05:24 +08:00
Pine
8258316479
feat(pages): 新增OPC个人主页窗口 — 身份条+沙箱HTML/第三方嵌入+能力接入说明+人才市场入口
2026-09-04 21:52:29 +08:00
Pine
512414401c
子智能体前端 UI 接入:会话 source 透传 + 会话列表 subagent 独立分组;create_chat 端点透传 source/group/parent/root
2026-09-04 21:00:03 +08:00
Pine
3151198ebd
迁移上游子智能体功能线:ChatGroup 分组体系 + subagent_model 配置 + spawn 会话归属
...
- chats/models.py: SessionSource.subagent + ChatGroupKind/ChatGroup/default_chat_groups + ChatSpec 扩展 group_id/parent_session_id/root_session_id/last_finished_at + ChatsFile.groups
- chats/manager.py: group CRUD 方法(list/create/update/reorder/delete) + get_or_create_chat/create_chat 的 group 归属与校验
- chats/api.py: /chats/groups 端点(GET/POST/PUT order/PUT/DELETE)
- config.py+agents.py: AgentConfig.subagent_model 配置
- agent_management.py: _build_subagent_request_context 补 subagent_model→model_slot_override
- console.py: _chat_registration_fields 识别 spawn_subagent 请求并注册 subagent 会话
- constant.py: DEFAULT_SPAWN_FOREGROUND_TIMEOUT_SECONDS
- 前端 chat.ts: groups API 请求函数
2026-09-04 20:40:19 +08:00
Pine
881de0d305
fix(ui): 移除各页面内容容器 max-width,宽屏下内容铺满内容区
...
问题:多个页面根容器带 max-width,屏幕放大后内容区最右侧大片空白。
逐个检查全部页面后确认并修复 11 处页面级宽度限制:
console 页面:
- Settings/Account:.page max-width 720px → 移除
- Settings/About:.aboutPage max-width 860px + 居中 → 移除
云超服门户(/opc/*)页面:
- Opc/Dashboard、Opc/OpcList、PortDashboard:.page max-width 1200px → 移除
- Opc/AgentChat、Opc/Profile:内联 maxWidth 720 → 移除
- Opc/Credit:内联 maxWidth 1100 + 居中 → 移除
- Opc/Talent:内联 maxWidth 640 → 移除
运营端/管理端:
- Operator/CSWorkbench:.page max-width 1200px → 移除
- Hub(hubMode 管理页):.content max-width 1480px + 居中 → 移除
保留不动:描述文字/表单卡片级行宽限制(Agent/Config、Agent/Skills、
kbAnswer 等,属可读性设计);模态框 max-width calc(100vw-32px)。
验证:布局层 .page-content 本就全宽 flex(无 max-width);浏览器实测
/account 根容器 720px 限制消失;tsc 0 错;portal/Operator/Account/About/
Hub 测试 23 全过。
2026-09-04 17:33:58 +08:00
Pine
932fe54c16
fix(chat): 助手身份显示当前智能体名称/头像,无则回退云超服
...
问题:聊天区助手名称/头像沿用上游硬编码 nick='QwenPaw'、
avatar='/qwenpaw.png'。前者把当前智能体(如'小园')显示成了'QwenPaw';
后者资源未随迁移携带,dev 下实际返回 SPA index.html(头像渲染破损)。
修复:
- 前端 Chat 页:welcome.nick/avatar 改为解析当前智能体——名称取
selectedAgent.name,头像取 selectedAgent.avatar;智能体无名称/头像时
回退云超服品牌 BRAND.name / BRAND.assistantAvatar(/pineagents-icon.svg)。
- 支持智能体头像字段(端到端):后端 AgentProfileConfig.avatar、
AgentSummary.avatar、agents list/create/update 透传、agent_sync
IDENTITY_FIELDS 加 avatar(云超服身份同步);前端 AgentSummary/
AgentProfileConfig/CreateAgentRequest 类型补 avatar。
- branding.ts 新增 assistantAvatar 品牌头像常量(替代缺失的 /qwenpaw.png)。
验证:后端重启后 /agents 返回 avatar 字段;/pineagents-icon.svg 200
image/svg+xml(原 /qwenpaw.png 实为 SPA fallback 破损);前端 tsc 0 错;
Chat/agents/constants 32 文件 322 测试全过。
2026-09-04 17:11:29 +08:00
Pine
29b1c7a3da
fix(files): 消除重复'文件'菜单,新 Files 页参考旧页补下载与路径
...
问题:上游合并后 /files(FilesWorkspace 新页)与 /workspace(旧版
核心文件页)同时存在于侧边栏,nav.files 与 nav.workspace 中文标签均为
'文件',导致'当前助理设置'分组下出现两个'文件'菜单;OS 桌面模式
OS_APPS 同样注册了两个'文件'应用。
修复:
- builtinMenu.ts / osApps.ts:移除 core.workspace 菜单项与应用注册,
侧边栏只保留一个'文件'入口(/files 新页)。/workspace 路由保留可深链。
- FilesNavigator 工具栏:参考旧页新增'下载'按钮(/workspace/download
打包下载工作区,复用旧页 message 流程,含 DownloadCancelledError 处理)。
- FilesPage 页头:参考旧页新增'工作区路径'副标题展示(经
/workspace/coding-project 获取 workspace_dir,长路径截断 hover 见全)。
验证:tsc 0 错;files-workspace/os/layouts 39 文件 227 测试全过;下载端点
经 8093 代理返回 200 有效 zip。
2026-09-04 16:54:59 +08:00
Pine
9b5a5b9629
fix(build): cssStubPlugin 仅限 Vitest 生效,修复 Monaco 无样式
...
本地 vite.config 把上游的 Vitest-only cssStubPlugin 无条件挂进了主 plugins,
导致 dev 与生产构建都会把 node_modules 下的所有 CSS import 替换为空桩
(export default {})。上游实现是 ,
本次合并回归让 monaco-editor/min/vs/editor/editor.main.css 在真实构建中被
剥离——Monaco 无样式渲染、字体度量错误,光标/选区与渲染位置错位,
即 Files 工作区'位置错乱、无法准确编辑'。
修复:与上游对齐——isVitest = command==='serve' && mode==='test',插件仅
在 Vitest 下挂载;dev/build 走真实 CSS。配合上一提交补回的
monacoSetup.ts CSS 导入,Monaco 样式完整加载。
验证:dev server 输出 309KB 真实 editor.main.css(此前为空桩);
生产构建 dist/assets/index-*.css 含 .monaco-editor 规则 + codicon 字体;
vitest 2 文件 28/28 仍通过(isVitest 判定正确)。
2026-09-04 16:27:44 +08:00
Pine
f8f2c20246
fix(files): 补回 Monaco editor.main.css,修复编辑器位置错乱
...
合并上游 Coding 迁移时丢失了 monacoSetup.ts 中的关键 CSS 导入:
(上游 v2.2.0 第 20 行,本地合并后缺失)。
由于 monacoSetup 用 loader.config({ monaco }) 指向本地 bundle(为离线而设),
@monaco-editor/react 不会像 CDN 模式那样自动注入 CSS。缺失样式表后 Monaco 以
错误字体度量渲染:光标/选区按 monospace 度量计算,而实际字形用默认字体绘制,
导致点击与光标位置错位——即位置错乱,无法准确编辑。
修复:按上游原样补回 CSS 导入(唯一与上游的差异,diff 已确认)。
验证:tsc 0 错;files-workspace + codingTabsStore vitest 12 文件 84/84;
dev server 已热更新,/node_modules/monaco-editor/min/vs/editor/editor.main.css
经 Vite 正常注入。
2026-09-04 15:27:33 +08:00
Pine
55f8d9f81f
feat(workspace): port session project-dirs, fix 404s, add Tauri dir picker
...
C-port the upstream /chats/{id}/project-dirs feature so the chat-scoped
project directory binding is fully functional on the cloud backend:
- services/project_directory.py (new): lean cloud adaptation of the
upstream module — normalize (dedupe/resolve/max 10), meta read for the
persisted override, effective resolution (session > agent > workspace),
nesting detection.
- chats/manager.py: set_session_project_dirs + get_session_project_dirs
persist the override in ChatSpec.meta[runtime_context] under the lock
(one-way migration: list supersedes legacy scalar).
- chats/api.py: GET/PUT/DELETE /{chat_id}/project-dirs + deprecated
/{chat_id}/project-dir views, with 422 on missing dirs and response
models matching the merged frontend (exists/nested_with/is_workspace).
- runtime/builder.py: session override feeds the per-turn coding project
dir (weakest source; fork/ACP still win), so bound directories actually
take effect for the chat's tools.
- Fix A: frontend projectDirectoryApi paths /workspace/project-directory*
-> /workspace/coding-project* (cloud backend already exposes these).
- Fix B: add POST /workspace/coding-project/browse-dirs/create for the
file-browser 'new folder' action (validated name, 409/403/500 mapping).
- Tauri system directory picker: 'Choose folder' button in the project
directory panel calls the @tauri-apps/plugin-dialog native directory
dialog (capability dialog:allow-open already granted), queueing the
pick as a session binding or the agent draft; hidden outside the Tauri
runtime; i18n across all 6 locales.
Verified: backend restart + curl (GET/PUT/DELETE project-dirs, deprecated
views, browse-dirs/create, 422/409/400 cases), dev-proxy end-to-end,
frontend tsc clean, vitest 25/25, production build 2m06s.
2026-09-04 14:30:32 +08:00
Pine
c41742e7ca
fix(agents): AgentTable 改造——修复 RO 自反馈循环/列挤压/pin 图标语义
...
路线 A(antd 现代表格重构):
- ResizeObserver 自反馈循环:rAF 合并回调 + >1px 变化阈值,避免 setBodyHeight→Table 重排→容器高度变化→RO 再触发的持续重排(实测页面 1.5s 高度稳定)
- scroll.x 1620 硬编码 → max-content:列随内容自适应,窄容器出现横向滚动(实测内容宽 4296px/视口 1030px,此前 scrollWidth=clientWidth=541 列被挤压)
- pin 图标语义修正:已固定显示实心 Pin(fill=currentColor),未固定显示空心 Pin 邀请固定动作(此前反转:未固定显示 PinOff、已固定显示 Pin 与工具提示矛盾)
- 拖拽手柄补齐 aria-label(agent.dragHandleTooltip)
- 测试:新增 onPin 回传 currentPinned 断言、pin 图标实心/空心断言、拖拽手柄可访问性断言(7/7 通过)
- 验证:tsc 0 错误、build 通过、/agents 页面浏览器实测正常
2026-09-04 13:45:52 +08:00