Pine
6869f3f58a
fix: 桌面端Python后端补充opc/content系列路由,修复政策详情404
...
根因: 前端请求 /api/opc/content/{id},但桌面端Python后端 opc.py 中只有
/opc/policy 路由,缺少 /opc/content 系列路由,导致请求直接404。
修复: 添加以下转发路由到 server-core:
- GET /opc/content - 资讯列表
- GET /opc/content/{content_id} - 资讯详情(政策详情)
- POST /opc/content/{content_id}/like - 点赞
- POST /opc/content/{content_id}/share - 分享计数
- GET /opc/content/{content_id}/comments - 评论列表
- POST /opc/content/{content_id}/comments - 发表评论
- POST /opc/comments/{comment_id}/like - 评论点赞
2026-09-13 23:37:18 +08:00
Pine
280f672ee0
refactor(config): 服务端地址收敛为单一配置 server.config.json
...
三端统一从仓库根 server.config.json 的 opc_server_base_url 读取 OPC 服务端地址,
改一处即全局生效,消除散落硬编码:
- Python: constant.DEMO_API_BASE_URL 改为启动时读取该文件(缺失/损坏回退生产默认)
- Vite: console/vite.config.ts proxy 4 条 target 由 readOpcServerBaseUrl() 提供
- Rust: updates/remote.rs 编译期 include_str! 注入(打包前改配置即生效),
更新检查 fallback 由 127.0.0.1:8090 改为该配置
- 清理残留: tauri.conf.json updater endpoint → 生产(与 version.conf 一致);
im.py fallback 不再硬编码 8090;auth.py 修正过时文档(原声称支持 env 覆盖但未实现)
验证: Python 模块导入 + 配置联动切换测试 ✓;tsc -b ✓;cargo check ✓;8090 残留归零。
2026-09-13 17:01:44 +08:00
Pine
f3945b1639
优化:MCP 无密钥跳过改为友好单行日志(不再打印堆栈)
...
- 新增 DriverSkippedError(配置缺失、预期跳过,非构建失败)
- mcp.py: 无 API key 时抛 DriverSkippedError,消息给出中文配置指引
- manager.py: 启动扫描捕获 DriverSkippedError 只打一行 warning,
不再 exc_info 打印完整 Traceback 误导用户
- 新增单测覆盖 missing credential 跳过行为(4 例)
2026-09-13 16:31:50 +08:00
Pine
a5c3a8e6d8
修复:MCP 无 API key 时不再启动子进程(消除 EPIPE 崩溃刷屏)
...
根因:pine_agents_official_001 启用了 tavily_search 但未配置 TAVILY_API_KEY,
子进程以 keyless 模式启动;npx 慢启动导致 connect 超时 → transport 关闭 →
旧子进程残留写 stdout → Node EPIPE 崩溃,且子进程 stderr 未重定向直接刷终端。
- mcp.py: stdio MCP 的 env 绑定声明 credential 但解析为空(如 TAVILY_API_KEY)
时跳过启动,提示先配置 API Key;不 spawn 子进程即无 EPIPE
- mcp_stateful_client.py: stdio_client 传 errlog 包装器,子进程 stderr 统一
进应用日志,崩溃堆栈不再以原始 node 输出刷屏(防御其他 MCP)
2026-09-13 16:26:49 +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
19650ca69f
fix(desktop): opc.py 补导入 HTTPException,修复 permissions/me 转发 401 时 NameError→500
...
未登录时 /api/permissions/me 转发返回 401,forward() 抛 HTTPException,
但 except HTTPException 未导入导致 NameError,掩盖了真实的 401 并变成 500。
2026-09-13 15:22:04 +08:00
Pine
b09066c8fb
配置:DEMO_API_BASE_URL 切换为 https://opc.pinesound.cn(生产后端)
2026-09-13 15:14:36 +08:00
Pine
ef703ae4fa
fix(desktop): agent_gate 路由顺序修复 + 权限聚合缓存穿透
...
- /agents/directory 与 /agent-grants/* 提前注册,避免被 /agents/{agentId} 抢占
- /permissions/me 支持 nocache=1 绕过 60s 缓存,转发失败时回退缓存
2026-09-13 11:14:37 +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
0ff6f74fbf
设置版本为b3
2026-09-11 11:57:31 +08:00
Pine
cdd0002cbb
feat(agent-gate): 新增智能体授权管理 HTTP API
...
实现前端 AgentGrants 页面依赖的 4 个接口(此前全部 404):
- GET /api/agents/directory 企业智能体目录(当前用户+本地智能体)
- GET /api/agent-grants?direction= 我授权的(grantor)/我收到的(grantee)
- POST /api/agent-grants 创建临时授权(scope/max_calls/expires_at)
- DELETE /api/agent-grants/{id} 撤销授权(软删除 status=revoked)
授权记录持久化在 WORKING_DIR/agent_gate/grants.json;
user_id 从本地登录态 JWT claims.sub 解析;target_agent_addr
校验归属当前用户,防止越权授权他人智能体。
2026-09-10 19:46:49 +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
3ccfd78857
fix(agent-gate): 修正 link.py 相对导入越界(...constant → ..constant),agent_gate 可正常启动,MQTT 互通链路就绪
2026-09-10 12:27:14 +08:00
Pine
0438d1873b
fix(agent-gate): 修正 auth.py 相对导入路径(..agent_gate → ...agent_gate),修复登录/登出时 agent_gate 启动/停止 ModuleNotFoundError,MQTT 互通链路可正常启用
2026-09-10 11:34:51 +08:00
Pine
f8e81c3d3d
feat(agent-gate): 智能体互通被调用侧——MQTT 直连 EMQX 订阅 invoke、presence 心跳、复用本机 /console/chat 执行并回传 reply;登录后启动/登出停止
2026-09-10 01:40:43 +08:00
Pine
c3fad25ee5
fix: version-bump.sh 兼容动态版本格式(_DEFAULT_APP_VERSION),版本升至 0.0.1b2
...
- __version__.py 当前为动态加载实现(配置优先、_DEFAULT_APP_VERSION 兜底),脚本原先只认静态 __version__ 行导致报错
- 与 sync_tauri_version.mjs 的 readPythonVersion 兼容逻辑对齐:优先 __version__,回退 _DEFAULT_APP_VERSION
- 已执行 ./scripts/version-bump.sh 0.0.1b2 → Tauri 0.0.1-beta.2
2026-09-09 05:12:26 +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
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
d43c5641ab
fix(chat): 优化对话错误提示为中文友好信息,移除错误代码和dump路径显示
2026-09-08 15:36:15 +08:00
Pine
2727fc6285
feat(constants): 更新 DEMO_API_BASE_URL 为生产地址
2026-09-08 10:20:17 +08:00
Pine
7ff5c11c08
feat(plugins): pineagents 插件目录下载/加载与版本兼容;前端插件API更新
2026-09-08 00:11:14 +08:00
Pine
0341730668
feat(desktop): 深色科技风启动初始化页;Tauri v2 dmg配置修复;AppCenter createPortal解决覆盖;CORS白名单补8093
2026-09-08 00:10:41 +08:00
Pine
05d37ffd35
fix: 桌面端内置后端补算力接口转发(/compute/* 全量 + /opc/compute 缺漏)
...
- 新增 compute_forward 转发模块:覆盖 rbac_compute_pricing 全部接口(运营端
admin、载体端 tenant、企业端 enterprise 余额/充值/分配/订单/转账、个人端、
内部 price/deduct)
- opc.py 补齐 /opc/compute/usage/logs 与 /opc/compute/usage/trend 转发
2026-09-07 18:13:40 +08:00
Pine
ebffd957ed
fix: 桌面端内置后端补企业身份链路转发路由(/admin/ent/*、/ent/teams/*)
...
桌面应用 pineagents 后端对 hall/community 为纯转发,但企业认领/入驻/团队
接口未注册转发路由导致 404。新增 ent_onboard 转发模块,覆盖 rbac_enterprise/
rbac_ent_onboard/rbac_teams 全部 26 条接口,字面路径先于 {tid}/{cid} 注册。
2026-09-07 18:01:20 +08:00
Pine
942a58a045
fix: 语音模型分组将 realtime/streaming 模型归入实时对话组
...
qwen3-asr-flash-realtime 等实时模型只走 WebSocket/流式通道,
不支持 OpenAI 兼容 HTTP 转写(/audio/transcriptions),
之前因名字含 'asr' 被误分进转写组,用户选择后百炼返回 404。
现优先按 realtime/streaming/s2s/omni 判定归入 voice_chat,
ASR 组仅保留支持兼容转写的标准模型(qwen3-asr-flash 系列)。
2026-09-07 15:21:09 +08:00
Pine
233aae0929
fix: 语音转写客户端携带登录态(JWT)鉴权头
...
- 复用 provider._client()(含 PineAgents custom_headers 注入的 JWT),server-core 才能归户到用户算力令牌计量
- 非 OpenAIProvider 回退原 base_url+api_key 逻辑
2026-09-07 14:52:51 +08:00
Pine
e8991c4d27
feat: 语音转写页面支持 PineAgents 二级语音模型选择
...
- 后端:GET /transcription-provider-models 按 TTS/ASR/实时对话 分组返回 PineAgents(算力中心) 语音模型;PUT /transcription-provider 支持 model 字段
- 前端:ProviderSelectCard 选提供商后显示二级模型下拉(分组+搜索),保存供应商+模型到 config.json
2026-09-07 14:48:00 +08:00
Pine
eeb4c0f477
fix: 8088 转发层补充个人主页社交互动路由
...
- /pages/me/social/stats (GET) 本人互动数据
- /pages/{user_id}/view|like|greet (POST) 流量/点赞/打招呼
- 此前缺失导致桌面端 POST 405、主页数据弹窗提示加载数据失败
2026-09-07 12:37:08 +08:00
Pine
3df32e09bc
重构园区管理为多页面导航
...
- 从单页Tabs重构为14个独立页面,通过菜单导航进入
- 增加二级分组:园区运营(8个)、园区数据(3个)、园区审核(3个)
- 创建ParkPageWrapper统一布局组件,包含租户信息加载和统计卡片
- 所有页面严格从admin端载体方功能迁移,确保功能完整
- 毛玻璃材质卡片、苹果风格按钮、主内容区无整体包裹卡片
- 删除旧的ParkWorkbench单页文件
- TypeScript类型检查通过
2026-09-06 17:19:02 +08:00
Pine
de90906895
feat: admin端载体方功能迁移到桌面端园区管理
...
- 新增桌面端园区API模块 park.ts(完整的园区管理接口)
- 新增统一园区管理工作台页面 ParkWorkbench.tsx(13个功能模块Tabs)
- 企业管理(增删改查、算力折扣/配额管理)
- 用户管理(园区用户列表)
- 入园申请审核(通过/驳回)
- 转园申请审核(同意转入/拒绝)
- 任务管理(发布/状态更新)
- 资讯管理(发布园区资讯)
- 知识库(文档增删改查、重建索引)
- 智能体配置(系统提示词、欢迎语、启用开关)
- 屏幕管理(大屏绑定/解绑)
- 大屏控制台(刷新/重启/截屏/音量控制)
- 大屏数据配置(园区名称/简介/锚点)
- 视频识别配置(API地址配置)
- 载体资料(提交后需运营端审核)
- 更新路由配置 /carrier/park
- 更新菜单配置(园区管理菜单项)
- yarn build 构建成功
2026-09-06 15:29:19 +08:00
Pine
2503f1dddd
fix: 全面清除英文系统标识,信用徽章/维度/市场分类/技能分类全部中文映射兜底
2026-09-06 14:04:05 +08:00
Pine
08723b12d1
修复:培训中心我的证书Not Found错误
...
- pineagents缺少/me/certificates转发规则,只有/me/certs(认证)
- 前端调用/me/certificates(培训证书)时返回404
- 在opc.py中添加/me/certificates转发规则
2026-09-05 17:52:38 +08:00
Pine
36c8db81ea
修复:pineagents 添加 /service-market/* 通配符转发路由
...
- 根因:新后端接口前缀 /service-market 未在 pineagents 注册转发,前端通过8088代理访问返回404
- 修复:在 hall.py 添加 /service-market/{path:path} 通配符路由,支持GET/POST/PUT/DELETE
- 验证:分类接口返回8个分类,服务列表返回3条已发布服务
2026-09-05 15:53:13 +08:00
Pine
c4a2f2f9c6
增强JWT/token缓存:verify_token加入内存缓存(30秒TTL,最多1000条,自动清理过期),避免每次请求都重复HMAC验证和磁盘I/O;配合server-core的Redis缓存,全线性能优化
2026-09-05 14:35:42 +08:00
Pine
dc5cf7087a
优化HTTP转发性能:server_client使用全局单例httpx.AsyncClient+连接池复用(max_connections=100, keepalive=20),避免每次请求新建TCP连接;auth token带5秒缓存避免磁盘I/O;连接异常时自动重置client。配合server-core的N+1修复,大厅tasks接口从4.5s降到0.8s
2026-09-05 14:14:28 +08:00
Pine
994e59d8bf
pineagents app 添加通知/信用路由转发到 server-core:/notifications/*、/notify/events(SSE)、/credit/*、/me/credit;修复通知中心和信用页面 404 问题
2026-09-05 12:37:48 +08:00
Pine
2c22e3d6c7
应用市场专区:/plugins/market/search 透传 region 过滤,条目透传 tags 标记
2026-09-05 10:50:19 +08:00
Pine
686fee9c69
任务系统前端 v2:发布表单 v2 字段、六段标书、接单/交付/退出、验收/返工按钮
2026-09-05 03:41:04 +08:00
Pine
511e6dbcfb
feat(代理): 新增/pages/admin/{user_id}/logs审核日志代理
2026-09-05 01:42:13 +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
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
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
9e273713a6
fix(agents): 删除降级仅限自建智能体,官方智能体受保护且 deletable=false
...
- 服务端删除 404(身份已不存在)时降级仅清理本地,但 pine_agents_official_ 前缀的官方智能体不降级,避免误删运营端维护的预置身份
- list 的 deletable 离线回退:官方预置智能体默认不可删(此前 fallback 为 True,前端会误显示删除按钮)
2026-09-04 17:49:00 +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
70627c0484
fix(memory): 恢复 section 区分日记/知识库,修复合并回归
...
本地 workspace.py 的 /memory 端点在上游合并时丢失了 section 参数
(上游为 Literal[daily,digest]|None Query),AgentMdManager.list_memory_mds
也丢了 section 过滤与 _nested_root_to_exclude/_memory_root 助手。导致前端
Files 页'日记'(section=daily) 与'知识库'(section=digest) 两个 tab 都拿到
同一份 memory+digest 混合列表,日记里混入知识库文件,反之亦然。
修复:从上游完整恢复 section 语义——
- AgentMdManager:list_memory_mds(section) 按 section 限定 memory/ 或
digest/ 根目录并排除嵌套目录;read/write_memory_md 增加可选 section 走
明确的根目录;_memory_path_for_read_write 支持 section 优先路由;
补回 _memory_root/_nested_root_to_exclude。
- workspace.py:GET/PUT /memory 与 /memory/{path} 增加
section: Literal[daily,digest]|None = Query(None),透传给 manager。
验证:seed memory/daily-test.md + digest/wiki-test.md 后——
section=daily 仅返回 memory 文件;section=digest 仅返回 digest 文件;
无 section 返回合并列表(digest/ 前缀);section 读写落盘正确;测试文件已
清理;前端 tsc 0 错 + files-workspace 11 文件 61/61 通过;经 8093 代理
四个 tab 端到端返回真实数据。
2026-09-04 16:42:24 +08:00
Pine
44d78105a9
feat(files): 完整移植上游 Files 工作区文件操作 API(修正迁移偏差)
...
重新审查迁移逻辑后的修正:本地文件操作应以「上游 QwenPaw 为准」,
此前把本地后端误当云端、曾计划把前端重映射到云端 /code-files 是错误方向。
本提交:
- 新增 src/pineagents/services/workspace_files.py(上游 workspace_files 完整移植,
唯一本地改动:跳过 macOS 自定义文件夹图标资源 Icon\r)
- workspace.py 移植 7 个上游端点:GET /tree、GET /file-metadata、
GET/PUT /file-content(乐观并发 ETag)、GET /file-download、
GET /html-file-uri、POST /file-upload(保留冲突策略 overwrite/skip/rename)
- agent_context.py 移植请求级项目目录解析:get_project_dir_for_request /
get_project_dirs_for_request,按 X-Chat-Id / X-Session-Project-Dir 头解析
会话级绑定目录;_resolve_files_root 支持 root=workspace|project|project:<path>,
project:<path> 走目录身份成员校验(os.path.samefile),越权返回 403
- /workspace/watch 改为按 root+会话头解析监视目录(此前固定 agent coding dir)
- coding_project.py 追加上游命名别名 router /workspace/project-directory
(与 /workspace/coding-project 同一批 handler),API 面与上游对齐,
后续上游合并不会因命名差异 404
验证:curl 全链路通过——tree/metadata/content 读写/乐观并发 409/下载/HTML URI/
上传/workspace 根/越权 403/无效会话目录 400/未知 chat 404;后端重启干净。
2026-09-04 15:08:19 +08:00
Pine
feb1192a5f
fix(tools): skip macOS Icon\r resource + escape control chars in list_directory
...
- Skip the per-folder custom-icon resource "Icon\r" (Icon + CR) which
macOS stores in every folder that ever had a custom icon. It does not
start with a dot, so it slipped past the dotfile filter and showed up
as a phantom "Icon" entry; agents trying to ls/stat it got
'No such file or directory' and misreported healthy dirs as broken
(observed on /Volumes/Pine/opt).
- Escape control chars (\x0d etc.) in displayed entry names so the model
can see the real name instead of an invisible CR.
2026-09-04 14:49:57 +08:00