Commit Graph

35 Commits

Author SHA1 Message Date
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 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 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 8e6b3abac3 feat(channels/market): 阶段 4 渠道/市场层合并上游 v2.2.0
- PluginManager: 采用上游 useMarketPlugins(300行: 分页append/loadingMore/autoLoadBlocked/竞态AbortController/highlightFilter) + MarketPluginList(无限滚动LoadMoreSentinel+PluginViewToggle卡片/列表切换); OfficialPluginList.module.less 保留三处 var(--color-border) 定制+追加上游移动端@media; index.module.less 三向并合; 本地 index.tsx 保留(operator 权限 gate)
- Market: MarketPanel(新 install: MarketInstallController 接口)/useMarketInstall/useMarketSearch/SkillIcon/ResultCard 采用上游
- Channels: ChannelDrawer/channelConfig/constants 上游版; 定制点保留(channelIcons console=var(--color-primary)、PendingApprovalsDrawer var(--color-success))
- api/types/chat.ts 采用上游(ChatGroup/ChatSource/ChatGroupKind/group_id); pages/Agent/Skills/index.tsx 适配 useMarketInstall
- utils: chatGroups.ts + 14 个上游缺失工具测试补齐; CronJobs 测试补齐
- 测试修复: design-mock 补 Tabs 桩(上游 PluginViewToggle 依赖); MarketPluginList.test 采用上游版; skill.test 品牌映射云超服; lazyWithRetry.test 适配本地 dev-server 回退
- 验证: tsc 0 错误、build 通过、阶段 4 相关 45 测试文件 427 用例全过
2026-09-04 13:24:47 +08:00
Pine 60003796fc feat(settings): 阶段 3 统计/模型/记忆层合并上游 v2.2.0
- TokenUsage:全目录采用上游 lineChartChrome 重构(tokenUsageRows.ts+useDataAggregation+DataTables/SummaryCards),保留云超服配色 useTokenTypeConfig
- api/types/tokenUsage.ts:上游 cache_* 字段
- Settings/Models A 桶吸收增量:+apiKeyValidation、useProviders models_syncing 轮询、index.tsx manageModels URL、providerIcon +volcengine-cn-agentplan/mimo
- api/modules/agentStats.ts:+LlmToolDaily/getGlobalLlmToolTrend
- api/modules/agent.ts:updateAgentRunningConfig timeout 10min + test
- Chat 补漏:OAuthConfirmModal 上游防竞态重构、HarnessModelSelector.test explicit null effort
- tsc 0 错误,build 通过,阶段 3 相关测试全过
2026-09-04 12:23:34 +08:00
Pine 59973f65fd feat(chat): 阶段 2 收尾——B/C 桶剩余合并上游 v2.2.0
- Agent/Tools:+WebSearchConfigModal(web_search 配置),index.tsx 采用上游+主题色映射
- AgentStats:index.tsx 采用上游 agent 视角统计+主题色;SummaryCard formatValue;index.module.less 并合
- Agents:AgentModal 上游 Mail 配置+mailDomains;AgentTable 上游 ResizeObserver/fixed/Dnd + 保留 deletable 逻辑;index.module.less 并合
- SkillPool:useSkillPool 上游自动化状态;SkillPool/index+PoolSkillCard/Drawer/ListItem 采用上游
- TokenUsage:useTokenTypeConfig 上游 lineChartChrome+云超服配色
- CronJobs:上游 calendar.ts 模块化
- RemoteModelManageModal:上游统一提供商重构+ModelCapabilityTags/ModelConfigEditor
- Agent/Config ReMe:+ReMeStatusModal/EmbeddingModelCard/embeddingUtils/useEmbeddingVerification/memoryMaintenanceContext/useReMeRuntimeStatus;index+useAgentConfig 上游
- api/types:agentStats 上游 agent_* 字段;skill.ts 并合(本地扩展+上游自动化类型);agent.ts ReMe/Embedding 并合;provider.ts 补 status/discovered_count
- api/modules:agent.ts 补 testEmbedding;skill.ts 补 getPoolSkill/updatePoolSkillAutomation;tools.ts getToolConfig 补 params
- locales 全量补齐上游新增 key(zh/en +406,vi +226,my/th/lo 英文占位)
- tsc 0 错误,build 通过,阶段 2 相关 659 测试全过;全量 24 失败均预存在
2026-09-04 12:15:42 +08:00
Pine 26e305e805 feat(chat): 阶段 2 聊天体验移植上游 v2.2.0
- B 桶 Chat 系直接采用上游(含云超服主题色映射):HarnessModelSelector/ChatActionGroup/ChatHeaderTitle/LoopModeSelector/ApprovalLevelToggle/ChatSenderTabsPanel/BackgroundTaskPanel/ContextUsageIndicator/HarnessApprovalToggle/useToolCallControl/harness/provider api
- ToolCardShell 上游基底+补本地 inputProgress;merge_less.py 三向 LESS 并合 8 个 module.less
- ModelSelector 三 Tab 并合(上游重构基底+云超服 pineagents Tab,默认保留 pineagents)
- Chat/index.tsx 上游基底 + 10 依赖模块(InlineMarkdown 平铺版/RichFileReferenceInput/MediaDownload 等)
- 复制 upstream_only:turnUsage/turnUsageStore/sessionRoute/loopModeDescription/resolveLocalizedText
- api/types/provider.ts 双改并合(ProviderInfo 补 discovery 字段)
- 新增依赖 lexical@0.48.0+@lexical/react@0.48.0;vite.config 增加 DefaultCards/Audios 精确 alias
- locales 6 语言补齐 36 个上游 chat.* key(my/th/lo 英文占位)
- 测试采用上游版;ModelSelector.test 预设 pro tab 保留云超服默认 pineagents
- tsc 0 错误,build 通过,阶段 2 相关 344 测试全过
2026-09-04 11:55:51 +08:00
Pine ae3ab5feb5 阶段5: 完整引入上游 OS Shell + Hub + Mailbox
- os/ 67 文件(DesktopOS/Dock/Launcher/MenuBar/MissionControl/NotificationCenter/AppStore/Window 系统 + os*Store/hooks)
- pages/Hub + api/modules/hub.ts + ImportHubModal(已有)
- Inbox 采用上游 Mailbox(approvals/messages 双 Tab + MailAccessControlDrawer/useMailPendingCount/mailDetail),保留云超服 Harvest 组件
- App.tsx 引入 OS Shell 分支(isOsPath→DesktopOSPage, Router 外)+ /hub/admin 路由 + BackendModeRouter + RuntimeAvailabilityGuard,保留云超服 AuthGuard/chatSocket/OPC 主题/vi-th-my-lo
- 双改合并:usePluginLoader(loadPawApp)/pluginMarket(isMarketPluginApp)/registry store(removeBySource)/hostExternals(removePlugin)/LanguageSwitcher(persistRemotely+ja-ru-pt-id)/BackendLoadingPage(override props)/ApprovalCard(reasoning)/auth.ts(mode)/auth/gate.ts
- SidebarSettingsPanel 加 Desktop Mode 入口(OS Shell 切换)
- locales 合并 os/hub/projectDirectory/inbox/account(zh/en/vi 用上游,lo/my/th 用 en 占位)
- 验证:tsc 0 错误、build 通过(1m23s)、阶段5 新增 35 文件 271 测试全过;全量回归 30 失败均预存在(stash 验证)
2026-09-04 10:36:41 +08:00
Pine 8ecc37630a feat(pineagents): 跟随上游 v2.2.0 引入 Files 工作区并迁移 Coding 页(阶段 1)
- 引入 features/files-workspace + features/project-directory + pages/Files(上游 v2.2.0 纯增量)
- 新增依赖:three/3d-force-graph/three-spritetext/motion(MemoryGraph 3D 记忆图)
- 同步上游伴生模块(upstream_only):workspace.ts/git.ts/markdown.ts/codingTabsStore/useWorkspaceWatch/
  FilePreview/TabbedEditor/GitPanel/codingMode*/agents.ts/vite-env.d.ts/api/types/workspace
- api/types/agents.ts 按 A 桶裁决合并:保留云超服 deletable + 吸收上游 Mailbox/MemoryGraph 类型
- Coding 页迁入 Files:删除 pages/Coding/index.tsx + FileTree,/coding 路由移除,
  codingMode 模式导航重定向到 /files(Sidebar/Chat/builtinRoutes/CodingModeToggle)
- builtinMenu 增加 core.files 菜单入口(agent-group 下 order 5)
- locales 合并 files.* 键(zh/en/vi 用上游,lo/my/th 用 en 占位待翻译)
- 测试适配:ResponseArtifactList 深层 chat import 改为相对路径(本地 chat stub 配置所致)
- 验证:tsc 0 错误、vite build 通过、files-workspace/project-directory/stores/locales 测试通过
  (sidebarModeStore 失败为预存在、与本次无关)
2026-09-04 02:51:07 +08:00
Pine 84f34f8e21 feat(apps): 云超服市场商品封面图(cover_url)支持
- 后端 _pineagents_live_plugin 映射 cover_url(server-core 商品封面)
- MarketPluginEntry 类型新增 cover_url
- AppMarket 市场卡片三种情况渲染:
  有封面 → 16:9 封面主视觉(替代图标位)
  无封面有图标 → 图标
  都没有 → 默认 glyph 占位
  封面/图标加载失败均回退下一级占位
2026-09-03 21:37:13 +08:00
Pine 3be0c2f16c fix(apps): 修复云超服市场单段 slug 商品下载链路
- 前端 buildMarketDownloadUrl:id 拆分不到 owner/name 两段时,
  不再产生 owner/undefined,统一按 pineagents/<id> 处理
- 后端 _fetch_market_bundle_bytes:owner/name 精确匹配失败后,
  回退按 name 单段精确匹配,兼容历史未补 owner 前缀的商品
  (如 creator、公众号爆款封面生成)

配套:server-core 侧已把存量单段 slug 数据规范化为 pineagents/<slug>
2026-09-03 20:28:09 +08:00
Pine 158582bc1a fix(apps): 修复云超服市场应用安装后无法打开、无法卸载
打开问题:
- 根因:前端 loadAllPlugins() 仅在启动时加载插件 bundle,安装新应用后
  路由未注册,AppCenter 打开显示 not loaded
- usePluginLoader 新增 loadPluginById(),按需加载单个应用 bundle
- AppMarket 安装成功后立即调用 loadPluginById 注册路由
- AppCenter 打开应用时若路由缺失自动尝试加载并给出可读提示

卸载问题:
- 根因:scoped id(@kmu/incubator 含 '/')无法在 URL 中表达,
  后端 uninstall_pawapp 直接拒绝含 '/' 的 id
- 后端新增 POST /pawapps/uninstall(body 传 app_id),优先走插件
  加载器卸载,fallback 按目录删除,并做 scoped id 路径穿越防护
- 前端 pawappApi.uninstall 改用 POST body
- fallback 目录扫描支持 scoped 命名空间(@scope/name 子目录)
2026-09-03 18:13:03 +08:00
Pine 2039c2224d fix(build): 修复桌面端前端 TypeScript 编译错误,yarn build 通过
- toAuthUser 接受可选 username,处理 session.user 无 username 场景
- SubRole 类型补充 org_director/org_manager/personal
- AuthSessionResponse.mqtt 类型从 unknown 修正为 MqttCredentials
- 移除未使用导入/变量:useTheme/Popover/Tooltip/iconList/savingPwd/onSavePassword/conversation/setAuthToken
- setMode 未使用参数加下划线前缀
2026-09-03 16:33:04 +08:00
Pine e90491cf20 feat: MQTT 凭证链路+登录态后端持久化+通讯录+好友私聊完善+官方智能体同步 2026-09-03 12:40:05 +08:00
Pine cf9679185e feat: 补充 IM 系统核心文件(沟通页+客服工作台+IM路由)
1. communication.ts: IM API 模块(会话/消息/好友/客服/知识库)
2. communicationStore.ts: IM 状态管理(MQTT 连接+消息收发)
3. useStartChat.ts: 发起聊天 Hook
4. CSWorkbench.tsx: 客服工作台(运营权限)
5. im.py: 后端 IM 路由中转
2026-09-03 10:30:35 +08:00
Pine 761ee8be14 refactor: 角色组织账号模型重构 - 阶段一
1. 移除 enterprise/provider/government/investor/developer 角色
2. 重写 builtinRoutes/builtinMenu 只保留三角色
3. 删除 portal 下五个孤立页面目录
4. capabilities 写入 JWT,前端统一基于 capabilities 判断
5. AuthUser 增加 account_type/account_type_label
6. Header RoleBadge 优先使用 account_type_label
7. 修复 ChatWindow 自己消息右侧、客服消息区分
8. Operator/Users 增加在线状态
9. 修复多个预存 TS 错误
2026-09-03 00:35:58 +08:00
Pine 6a87496a4b fix: 统一桌面端登录与 token 管理逻辑,修复模型列表 401
- PineAgents provider base_url 改为动态使用 DEMO_API_BASE_URL(远程服务器)
- list_provider_info 支持从请求头透传 console 端 JWT,优先用于 /v1/models
- forward/forward_upload 未显式传 auth_header 时自动使用本地持久化 token
- auth_token_store 添加日志,便于排查 token 保存/加载问题
- fetch_models 超时增加到 15s,添加获取结果日志
2026-09-02 18:18:55 +08:00
Pine e3a81f6bf5 fix(api): getApiToken fallback reads JWT from user profile when qwenpaw_auth_token missing
桌面端部分构建路径将 OPC JWT 存于 pineagents_user_profile.token,
而 localStorage qwenpaw_auth_token 缺失导致 getApiToken() 返回空、
所有 API 请求无 Authorization -> 401。增加 fallback:仅当 profile.token
为三段式 JWT 时兜底,避免演示/占位 token 混入请求头。
2026-09-01 21:42:52 +08:00
Pine dcdcdeaad5 refactor(console): 工作分组菜单重构 + 五大工作页 + 工作台重做
菜单(工作):工作台/大厅/任务/服务/岗位/人才/财税(合并税务申报)/政策/政务/通知/信用;
移除 智能体助手、服务市场(旧)、消息中心、个人资料(路由保留兼容)

- 任务页:接单中/我的投标/被指派/我发布的 四 Tab(做单/交付/完成操作 + 发布者接单投标计数)
- 服务页:我下单的/我收到的/我发布的服务 三 Tab(订单全链路流转 + 服务下架)
- 岗位页:我发布的岗位 + 收到的投递(聚合展示)
- 人才页:我的档案编辑 + 我的沟通(站内会话列表 + 聊天抽屉 10s 轮询)
- 财税页:收支流水 + 税务申报 合并(Segmented 切换)
- 工作台重做:待办横幅(进行中任务/待接订单/待评标) + 六宫格入口 + 月度收入 + 政策速览
2026-09-01 21:35:54 +08:00
Pine 65fa9b3a11 feat(task): 载体端任务管理页面(平台级任务+本载体下架/上架,不可编辑)+pineagents 转发
- console: Carrier/Tasks.tsx 新增载体端任务管理页(列表+下架/上架 Popconfirm,无编辑入口)
- builtinRoutes/builtinMenu: core.car.tasks 路由与菜单(任务管理,order 25)
- api/modules/auth.ts: getCarrierTasks/hideCarrierTask/unhideCarrierTask + CarrierTaskItem 类型
- pineagents opc.py: /carrier/tasks、/carrier/tasks/{id}/hide|unhide 纯转发
- 清理上轮遗留 unused import(HallTasks authApi、Dashboard Progress)
2026-09-01 14:44:21 +08:00
Pine aa79f0a4d6 fix(market): 清除技能/插件/官方市场演示数据残留,全部改走 server-core 真实接口
- 删除 _DEMO_SKILLS、_PINEAGENTS_DEMO_PLUGINS、_PINEAGENTS_DEMO_OFFICIAL_PLUGINS
- Operator Dashboard/DataStats 删除硬编码统计,改真实接口聚合
- 修复下载代理 httpx 未 follow 302;端到端验证三市场返回真实商品、下载 sha256 一致
2026-09-01 11:22:34 +08:00
Pine c82d4a47a9 feat(task): 任务系统统一合并到大厅,删除独立任务/独立社区
- 删除旧任务广场 /opc/square(TaskSquare.tsx)与独立社区 /opc/community 路由;社区保留为大厅 tab(OpcCommunityView)
- HallTasks 抢单/投标改走 hallApi(/hall/tasks/grab|bid);hall.ts 新增 grab/grab-by-code/bid/doing/complete/deliver/recommend
- MyTasks 改真实聚合展示(承接/投标、交付走 /hall/tasks/deliver)
- Dashboard activeTasks 适配真实任务状态(移除无真实来源的进度圆环)
- auth.ts 删除旧 /opc/tasks API(getOpcTasks/grabOpcTask/bidOpcTask/deliverOpcTask),OpcTask 类型扩展真实字段
- pineagents 新增 hall.py 转发 /hall/* 与 /community/* 到 server-core;删除 /opc/tasks 失效代理
- 演示数据清除(上一轮):技能/插件/官方市场改真实接口、Operator Dashboard/DataStats 去硬编码
2026-09-01 11:22:28 +08:00
Pine 8faa207ccb feat(console): 桌面端多轮功能更新(认证/品牌/多语言/算力中心/大厅细节) 2026-08-31 23:43:00 +08:00
Pine 213eb1c806 feat(market): 桌面端市场适配(云超服实时源 + 定价购买/小程序码支付/状态轮询/已购校验 + 安装包下载代理) 2026-08-31 23:42:53 +08:00
Pine eb39352759 refactor(console): 大厅收敛为 Tab 容器 + 服务订单/发包方管理
- Hall.tsx 改为 antd Tabs 容器:任务/人才/岗位/服务/社区 五 Tab 页内切换;
  菜单收敛为单一「大厅」入口(/opc/tasks 等旧路由保留兼容)
- HallTasks:详情抽屉增加发包方管理面板(投标列表定标、报名选定、取消任务)
- HallServices:咨询升级为预约下单(预约时间+联系方式+需求);新增我的订单弹窗
  (买/卖双视角,接单/婉拒/开始/交付/确认完成/取消全链路)
- 五个厅页面拆分 View 组件供 Tab 容器复用(default 导出保留为独立页)
2026-08-31 23:22:23 +08:00
Pine a925e8f91f feat(console): OPC 大厅与社区(四厅 + 帖子流 + 实体载体)
- api/modules/hall.ts:/hall/* /community/* 全量请求封装
- Hall.tsx 大厅 Hub(四厅统计卡 + 社区入口)
- HallTasks.tsx 任务大厅:模式筛选/发布任务弹窗/详情抽屉(抢/投/报名,报名含名额与已报名态);旧 TaskSquare 保留为 /opc/square 兼容路由
- HallTalents(OPC/求职者 + 档案抽屉)、HallJobs(筛选 + 详情 + 投递)、HallServices(发布 + 详情 + 咨询)
- Community.tsx:线上社区(话题筛选 + 发帖 + 点赞)与实体社区(载体列表/详情/关注/申请入驻)
- 菜单新增 大厅/人才大厅/岗位大厅/服务大厅/社区,任务广场更名任务大厅
2026-08-31 22:58:58 +08:00
Pine a610c22f45 feat(compute): 算力中心充值(小程序码支付)与转发端点
- PineAgents 供应商按登录态注入 JWT(登出移除)
- 本地后端新增充值转发(packages/orders/pay-params/status/orders)与算力余额路由
- console 充值弹窗:套餐/自定义金额→小程序码→轮询到账;余额卡加充值入口;i18n 文案

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-30 22:32:04 +08:00
Pine b300c682a8 feat(profile): 桌面端账户管理「绑定小程序」—— 小程序码+扫码确认绑定
- 小程序行加「绑定」按钮 → Modal(bind-start小程序码, 轮询确认); auth.ts 加 bindMpStart
2026-08-26 12:48:17 +08:00
Pine f0ad772b92 feat(profile): 桌面端账户管理加登录绑定 —— 绑定/解绑 手机号·小程序·微信
- Account 页加「登录方式绑定」: 绑定手机号(验证码), 解绑 手机/小程序/微信; 展示绑定状态
- auth.ts 加 bindPhone(合并返新令牌)/unbind; UserProfile 加 phoneBound/wxBound/wxMiniBound
2026-08-26 12:37:19 +08:00
Pine 1f75cf6362 feat(auth): 登录页支持四种登录(账号/短信/微信扫码/小程序扫码)
- Login 页改 antd Tabs 四方式,PollingQr 用 antd QRCode 渲染+轮询 wx-qr/mp-qr
- auth.ts 加 sendCode/phoneLogin/wxQrStart/wxQrPoll/mpQrStart/mpQrPoll
2026-08-25 22:47:45 +08:00
Pine 0a5f4dd743 feat(models): PineAgents 模型卡市场风重构(含描述/价格/分类/免费徽标)
- ModelInfo 前端类型镜像后端新增字段 description/price/category/tags。
- PineAgentsModelCards:卡片改为市场风(品牌图标+名/id、描述 2 行、分类/能力/标签
  chips、免费徽标、价格行、启用开关+管理),网格自适应铺满整行(minmax 190px),
  勿套 providerCards(minmax 400px) 网格。
- index.module.less 新增 pineModel* 系列类,含 dark 与移动端覆盖。
- 新增 PineAgentsModelCards.test.tsx(描述/价格/分类/免费/降级/管理/开关),5 passed。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-25 18:03:30 +08:00
Pine 729c7d86dc feat(opc): 客户端标记 X-Client:desktop(来源零推断)
- 所有 API 请求带 X-Client:desktop, server-core /auth 据此识别 source=desktop
2026-08-25 16:32:25 +08:00
Pine 6b5cda6a73 feat(opc): 算力中心页加「我的用量」(余额+本月按模型 token/费用)
- Compute.tsx 新增用量卡片: 余额/已用(¥), 总token/费用, 按模型表(请求/token/费用, quota→¥)
- authApi 增 getOpcComputeBalance/Usage; i18n zh 补充
2026-08-25 14:41:07 +08:00
Pine bfd5face4c feat(opc): 用户端算力中心页面(令牌/基础API/可用模型/价目)
- 新增 pages/portal/Opc/Compute.tsx: 基础 API 地址(一键复制)+我的令牌(创建/复制/删除)+可用模型+模型价目
- 注册路由 core.opc.compute(/opc/compute) + 侧边菜单(算力中心) + i18n(nav.portal.compute + role.opc.compute*, zh/en)
- authApi 新增 getOpcComputeBase/Models/Prices/Tokens + create/deleteOpcComputeToken, 调 server-core /opc/compute/*
2026-08-25 12:21:43 +08:00
Pine 9b30f681c6 feat: 智能体控制台前端(console)
- React+antd+zustand,注册表驱动路由/菜单/权限
- Tauri 桌面壳、后端托管 SPA、跨标签页消息队列
2026-08-23 22:43:18 +08:00