Skip to content

dsh-coding-sidebar 1.0.23

Choose a tag to compare

@kkutysllb kkutysllb released this 23 Sep 14:03
· 87 commits to main since this release

dsh-coding-sidebar 1.0.23

三处原生侧栏漏网点修复 + 浏览器 tab 按上游原生实现对齐(沙箱、导航状态机、
读取作用域)。

变更

一、点聊天里的 http(s) 链接弹原生侧栏空白区(现场 2026-09-19)

上游 ui-chat 的 openExternalLink 直接发
ctx.sidebarRight.openTab('browser', { params: { url } })——原生 browser 类型
总已注册,这条开法不经本插件的 openResource 门;且文档级链接接管只
preventDefault 不阻断传播,React 根监听照跑上游 handler(「我们开一个 + 原生开
一个空面板」)。三处修:

  • openpath-intercept.ts 新增 wrapNativeBrowserOpen:认领 kind=browser 且
    params.url 为 http(s) 的打开,改开自家 browser 页签;其余 kind 原样透传、
    dispose 还原;intercept.tsx 在既有 ctx.inject(['sidebarRight']) 里一并装配;
  • link-intercept.ts 补 stopPropagation + stopImmediatePropagation(capture
    阶段挂在 document 上,缺一即双开);
  • browserInterceptHttps 默认 false → true——当年关掉的理由「https 站点多拒绝
    嵌入」已有探测 + 说明面板兜底,而任何落回原生都是空白。

二、浏览器 tab 按上游原生实现升级

  • 沙箱对齐:常规站点一律带 allow-same-origin(此前只给白名单本机地址,真实
    站点因不透明源跑不起来——没有 Cookie / 存储 / 模块)。页面保持自己的
    origin、与界面跨源;代价是界面自身 origin 必须拒绝(帧同源即可读界面存储 /
    调 /api),normalizeBrowserUrl 新增 app-origin 拒绝,另补 credentials 拒绝
    与 16KB 长度上限,并统一 BrowserFailureReason 词表;
  • 新增 browser-nav.ts:上游 BrowserNavigation 的依赖无关移植(revision 制
    加载生命周期、empty / loading / known / unknown、同址提交 = 刷新、页面内跳转
    判 unknown → 地址栏「地址已变」+ 前后退门控关闭 + 限制说明);
  • BrowserView 接入状态机:新增加载失败横幅(iframe error)与逐因拒绝文案;
    live 实况、嵌入探测面板、沙箱临时解锁条等自有能力全部保留。

三、跨工作区 / 工作区外预览必失败(path "…" is outside workspace)

  • 上游契约(packages/api/workspace-files 的 read 文档)明确「files outside it
    are allowed」,我们的宿主桥多了一道上游没有的 containment 守卫,故 agent 写到
    /tmp 的产物、别仓绝对路径一律 403。修:新增 resolveReadPath(仍解析 symlink、
    仍要求绝对路径,只是不再强制 cwd 之内),fs.read / 媒体预览 / 缩略图三条读取
    路由改用它;写入、文件树、计划外开仍保留围栏(越界写是另一类风险);
  • 另修「另一个会话的相对路径」:openSidebarFile 把 { readSessionId, readCwd }
    写进页签 meta,新增 editor-read-scope.ts 的 readScopeOf 解析读取作用域
    (半截 / 畸形记录回落旧行为),EditorHost 全部读取路径(fsRead / viewer.load /
    mediaUrl / 文件树 / 路径输入 / 二进制下载)改用 readScope——页签仍落在当前会话
    (可见),读取用文件所属会话的 cwd。

兼容性说明

  • 链接接管与浏览器开法改为全面认领(落回原生即空白),故 browserInterceptHttps
    默认改为 true;
  • 读取围栏放宽仅限读取路径;写入、文件树与计划外开行为不变;
  • 已含 1.0.18 ~ 1.0.21 的 0.1.6-alpha.2 适配。

验证

typecheck 0;tests ALL PASS(新增 50 条:认领语义 8 / 链接接管独占性 7 / 地址策略
10 / 导航状态机 22 / 读取作用域 10);build + smoke 绿;活体基线(修前)复现
fs.read /tmp/… → 403 outside workspace,修后复验待宿主重启(提交信息原文)。
真源提交 39bfd06。补录说明:本文件于 v1.0.31 发版时按提交信息回溯补齐。