// @dsh-local/workspace-scoped-picker — client half(档案 18 v3 收尾 · 2026-09-11) // // 目的:让用户在「选择工作区目录」对话框里**看不到"改路径"输入口**(官方对话框的 // crumbEditZone / crumbEditGlyph),从而无法通过手输 `/` 或 `..` 跳出自己的目录。 // 手段:纯 CSS 覆盖(不改官方包、不替换官方 UI)——dsh client bundle 以普通脚本执行并向 // window.__ModuleLoader__ 注册 factory,这里只导出 apply + inject(**绝不 exports.default**,红线 R3)。 // // 说明:越界本身已由 host 面(@dsh-local/workspace-scoped-picker 的 list/createDirectory) // 拒绝;本 CSS 只是**从界面上消除这个入口**,属 defense-in-depth + 体验收敛。 window.__ModuleLoader__.load({ id: "@dsh-local/workspace-scoped-picker", factory: (require) => { var module = { exports: {} }; var exports = module.exports; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); var STYLE_ID = "wsp-hide-path-edit"; /** 注入一次样式:隐藏路径编辑区/编辑图标(含 CSS-module 哈希类名的模糊匹配)。 */ function hidePathEditZone() { if (typeof document === "undefined") return; if (document.getElementById(STYLE_ID) !== null) return; var style = document.createElement("style"); style.id = STYLE_ID; style.textContent = [ /* 「选择工作区目录」对话框顶部的可编辑路径框与其铅笔图标 */ '[class*="crumbEditZone"]{display:none !important}', '[class*="crumbEditGlyph"]{display:none !important}', '[class*="crumbEditSource"]{display:none !important}', /* 兜底:任何以 crumbEdit 开头的类(防官方改名/加类) */ '[class^="crumbEdit"],[class*=" crumbEdit"]{display:none !important}', ].join("\n"); (document.head || document.documentElement).appendChild(style); } function apply() { hidePathEditZone(); // 对话框可能是懒挂载的:监听一次 DOM 变化,出现即注入(样式是幂等的)。 if (typeof MutationObserver !== "undefined" && typeof document !== "undefined") { var observer = new MutationObserver(function () { hidePathEditZone(); }); observer.observe(document.documentElement, { childList: true, subtree: true }); } } exports.apply = apply; exports.inject = []; // 不需要任何 slot,纯副作用 return module.exports; }, });