dsh-code-server-app 0.2.8 → 0.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.en.md CHANGED
@@ -31,8 +31,19 @@ A static profile plugin (npm package with host + client bundle) that ships the *
31
31
  - reports `/api/code-server/ui-mode { sidebar:false }` to the host (after the 10 s grace above); the host then **recycles an instance it auto-prestarted** and stops prestarting (a user-started/adopted instance is never touched), and `{sidebar:true}` reverses that if the services show up later;
32
32
  - upgrading DSH needs **no reinstall** — refresh the page and the card turns back into the full settings card.
33
33
  - The sidebar tab hosts the code-server page (iframe) and follows the current session workspace; the panel can be collapsed/split/floated/fullscreened by DSH's right sidebar.
34
+ - **Fullscreen on open (0.2.9, on by default)**: opening the Code Server tab (including clicking a produced-file chip / delivered-file preview / inline file name) switches the right sidebar from "side by side with the conversation" to **fullscreen** (fills the window) — an IDE is cramped in a narrow column.
35
+ It only affects that moment of opening: clicking the sidebar's own "Exit fullscreen" is never fought back; switching away and back, or opening another file tab, goes fullscreen again.
36
+ Turn it off in the settings card (`fullscreenOnOpen=false`) to stay side by side.
37
+ - How it is done: DSH does **not** expose the mode to plugins — `ctx.sidebarRight` only has `isExpanded`/`toggleExpanded`
38
+ (expand/collapse), while push ⟷ fullscreen is recorded in `ui-sidebar-right`'s own store (`actions.setMode`, handed only to
39
+ its own seat components). `ctx.layout.openRightbar(track, fullscreen)` is not a control either: it is the channel the seat
40
+ **reports** its presentation through (upstream comment: *the occupant reports it; nothing else writes it*).
41
+ So the plugin performs the user's own gesture: it locates its own panel with `closest('[data-sidebar-right-panel]')` and
42
+ clicks the panel chrome's `[data-sidebar-right-mode="fullscreen"]` button (the exact same path as a manual click, including
43
+ the narrow-viewport handling). When the button is missing it keeps the current mode and logs one `console.warn` — panel
44
+ rendering is never affected.
34
45
  - **Resident IDE (0.2.2, on by default)**: switching to another tab or collapsing the sidebar and coming back **no longer reloads** code-server — unsaved editor buffers, terminals and debug sessions all stay put (see "Why switching tabs no longer reloads" below).
35
- - The settings card has exactly **two settings**: "**Claim scope**" and "Resident in background" — no other rows (0.2.7 removed the "Entry", "dependency install" and "environment check" rows).
46
+ - The settings card has exactly **three settings**: "**Claim scope**", "**Fullscreen on open**" and "Resident in background" — no other rows (0.2.7 removed the "Entry", "dependency install" and "environment check" rows).
36
47
  Open the IDE from the **Code Server box** on the sidebar's guide page, or by clicking DSH's own produced-file chips / delivered-file previews / inline file names;
37
48
  diagnostics stay out of the UI — the `[code-server]` lines in the DSH host log are the place to look (`/api/code-server/status` still returns `env` for scripts).
38
49
  The old `windowedOpen` (open in a window) and `reserveComposer` were **removed in 0.2.6**: leftover keys in an old settings document neither fail nor apply (they are no longer part of the schema).
@@ -373,14 +384,15 @@ persisted via the official settings domain (`settingsScope`, namespace `code-ser
373
384
  | Key | Default | Description |
374
385
  |---|---|---|
375
386
  | `fileOpenScope` | `session` | **Claim scope** (0.2.5): `session` claims only session-scoped file addresses (`dsh-resource://file/session/…` — DSH's produced files, declared deliveries, prose mentions); `all` also claims session-less `…/file/absolute/…`. Unclaimed addresses fall back to DSH's built-in preview |
387
+ | `fullscreenOnOpen` | `true` | **Fullscreen on open** (0.2.9): opening the Code Server tab (including clicking a file) switches the right sidebar to fullscreen (fills the window); off keeps DSH's default push mode (side by side with the conversation). Only the moment of opening is affected — a manual "Exit fullscreen" is never fought back |
376
388
  | `keepResident` | `true` | **Resident in background**: on, the host preloads the IDE into a parked surface right after start — switching tabs or collapsing the sidebar never reloads it and the first open needs no cold start; off loads it only when the panel is opened (saves memory) |
377
389
 
378
- (Since 0.2.6 the card keeps only those two settings; `windowedOpen` and `reserveComposer` are gone — leftover keys in an old
390
+ (Since 0.2.9 the card keeps only those three settings; `windowedOpen` and `reserveComposer` are gone — leftover keys in an old
379
391
  settings document neither fail nor apply. `serve` remains a key in the settings namespace (usable from a settings document) but
380
392
  has **no card row** — see "Serving mode".)
381
393
 
382
- > Card changes take effect immediately via `scope.watch` (the host status API returns `keepResident` and
383
- > `fileOpenScope`; the client applies them at once); no dsh restart needed. **After adding new setting keys, restart dsh web before first use**,
394
+ > Card changes take effect immediately via `scope.watch` (the host status API returns `keepResident`, `fileOpenScope` and
395
+ > `fullscreenOnOpen`; the client applies them at once); no dsh restart needed. **After adding new setting keys, restart dsh web before first use**,
384
396
  > so the host re-registers the settings namespace (schema includes the new key); otherwise save/validation of the new key won't work.
385
397
 
386
398
  Since 0.2.7 the card has **no** "Entry", "dependency install" or "environment check" rows: the entry lives in the sidebar's
package/README.md CHANGED
@@ -44,9 +44,20 @@
44
44
  并停止预启动(用户手动启动的实例不受影响);服务随后才出现时会再上报 `{sidebar:true}` 撤销;
45
45
  - 升级 DSH 后**无需重装插件**,刷新页面即可,本页会恢复为完整设置卡片。
46
46
  - 侧栏标签内即 code-server 页面(iframe),跟随当前会话工作区;面板可折叠/分屏/浮动/全屏(由 DSH 右侧栏提供)。
47
+ - **打开即全屏(0.2.9 起,默认开)**:打开 Code Server 标签(含点开产物 chip / 交付卡片 / 正文文件名)时,
48
+ 自动把右侧栏从"与对话并排"切到**全屏**(铺满窗口)——IDE 在窄栏里太挤。
49
+ 只影响"打开那一刻":随时点右侧栏的「退出全屏」不会被抢回去;切走再切回、再次打开文件 tab 会重新切全屏。
50
+ 不想要就在设置卡片里关掉(`fullscreenOnOpen=false`)。
51
+ - 实现说明:DSH **没有**把"模式"开放给插件 —— `ctx.sidebarRight` 只有 `isExpanded`/`toggleExpanded`(展开/收起),
52
+ push ⟷ fullscreen 记在 `ui-sidebar-right` 自己的 store 里(`actions.setMode`,只发给它的 seat 内部组件);
53
+ `ctx.layout.openRightbar(track, fullscreen)` 也不是控制面,而是 seat 用来**汇报** presentation 的通道
54
+ (上游源码注释:*the occupant reports it; nothing else writes it*)。
55
+ 所以本插件做的是"用户那个动作本身":`closest('[data-sidebar-right-panel]')` 定位自己所在面板,
56
+ 再点面板 chrome 上的 `[data-sidebar-right-mode="fullscreen"]` 按钮(与手点完全同一条路径,
57
+ 含窄视口下的连带处理)。按钮找不到时保持原模式并 `console.warn` 一条,绝不影响面板渲染。
47
58
  - **IDE 常驻(0.2.2 起,默认开)**:切到别的标签/收起侧栏再回来**不再重载** code-server——
48
59
  未保存的编辑缓冲区、终端、调试会话都留在原处(见下方「为什么切标签不再重载」)。
49
- - 设置卡片只有**两个设置**:「**认领范围**」与「**后台常驻(切标签不重载)**」——没有其它行(0.2.7 起移除「入口」「依赖安装」「环境检测」)。
60
+ - 设置卡片只有**三个设置**:「**认领范围**」「**打开即全屏**」与「**后台常驻(切标签不重载)**」——没有其它行(0.2.7 起移除「入口」「依赖安装」「环境检测」)。
50
61
  打开 IDE 用右侧栏「开始」页的 **Code Server 入口框**,或直接点官方的产物 chip / 交付卡片 / 正文文件名;
51
62
  诊断看 DSH host 日志里的 `[code-server]` 输出(`/api/code-server/status` 仍返回 `env` 供脚本排查)。
52
63
  旧版的 `windowedOpen`(窗口化打开)、`reserveComposer` 已在 0.2.6 移除:旧设置文档里残留的这两个键不会报错,只是被忽略(不再出现在 schema 里)。
@@ -129,7 +140,7 @@ DSH 用**资源地址**命名文件,`openFile` 只负责把地址交给右侧栏
129
140
  | **`loopback`(默认)** | 插件自己起一个回环端口(`host:port`),右侧栏 iframe 跨源直连;进程可被 adopt(DSH host 重启后接管) | 无 |
130
141
  | **`dsh`** | IDE 挂到 **DSH 自己的 HTTP 端口**上的 `/code-server/*`(HTTP prefix 路由)+ `/code-server/<quality>-<commit>`(WS 精确路由),转发到 launcher 的**命名管道**;**没有额外端口**;每条请求(含 WS 握手)先过 `ctx.connection.requestRejection()` —— 与 `/api` 同一套 Host/Origin fence + 浏览器 cookie 认证 | DSH 提供 `webServer` 服务(web profile);desktop 无此服务 → 自动回退 loopback |
131
142
 
132
- - 在 `cordis.patch.yml` 的 `config.serve`(或设置文档里的 `code-server.serve`)切换,下次启动生效 —— **设置卡片不提供这一行**(卡片只有认领范围/后台常驻两个设置)。
143
+ - 在 `cordis.patch.yml` 的 `config.serve`(或设置文档里的 `code-server.serve`)切换,下次启动生效 —— **设置卡片不提供这一行**(卡片只有认领范围/打开即全屏/后台常驻三个设置)。
133
144
  - `dsh` 模式的实际收益:单一 URL/单一端口(远程访问 DSH 即可用 IDE)、不再暴露额外回环端口、认证与 DSH 同级。
134
145
  - `dsh` 模式的两点**已知取舍**:
135
146
  1. iframe 与 DSH **同源** → 该模式下不再挂 `sandbox`(同源 + `allow-same-origin` 可被 frame 自行摘除,属"看起来有防护");
@@ -383,17 +394,18 @@ host 探测顺序:`@jinsiyu/dshcs-vscode-server/vscode`(**0.2.0+ 正式布局**)
383
394
  | 键 | 默认 | 说明 |
384
395
  |---|---|---|
385
396
  | `fileOpenScope` | `session` | **认领范围**(0.2.5):`session` = 只认领会话作用域的文件地址(`dsh-resource://file/session/…`,即官方产物/交付/正文提及);`all` = 连无会话的绝对路径(`…/file/absolute/…`)也认领。未认领的地址由 DSH 自带预览兜底 |
397
+ | `fullscreenOnOpen` | `true` | **打开即全屏**(0.2.9):打开 Code Server 标签(含点开文件)时自动把右侧栏切到全屏(铺满窗口);关闭则保持 DSH 默认的 push(与对话并排)。只影响打开那一刻,用户点「退出全屏」不会被抢回去 |
386
398
  | `keepResident` | `true` | **后台常驻**:开启后宿主启动即把 IDE 预加载到"停放区",切标签/收起侧栏不重载、首次打开免等待;关闭则只在打开面板时加载(省内存) |
387
399
 
388
- (0.2.6 起卡片只留上面两个设置;`windowedOpen` 与 `reserveComposer` 已移除 —— 旧设置文档里残留的键既不报错也不生效。
400
+ (0.2.9 起卡片只留上面三个设置;`windowedOpen` 与 `reserveComposer` 已移除 —— 旧设置文档里残留的键既不报错也不生效。
389
401
  `serve` 仍是设置命名空间里的键(便于用设置文档切换),但**没有卡片行**,见「服务方式」。)
390
402
 
391
403
  0.2.7 起卡片**没有**「入口」「依赖安装」「环境检测」三行:入口在右侧栏「开始」页的 Code Server 入口框(或官方的文件点击),
392
404
  诊断信息不再进 UI —— `/api/code-server/status` 的 `env` 字段仍返回
393
405
  树版本 / `productPath` / server 入口、VS Code 内部依赖、**预编译原生包**(平台聚合包名 + 已解析模块数),需要时用脚本查或看 host 日志。
394
406
 
395
- > 卡片改动经 `scope.watch` 实时生效(host 端 status API 同步返回 `keepResident` 与
396
- > `fileOpenScope`,客户端立即生效);无需重启 dsh。**新增设置键后首次使用前需重启 dsh web**,
407
+ > 卡片改动经 `scope.watch` 实时生效(host 端 status API 同步返回 `keepResident`、`fileOpenScope` 与
408
+ > `fullscreenOnOpen`,客户端立即生效);无需重启 dsh。**新增设置键后首次使用前需重启 dsh web**,
397
409
  > 让 host 重新注册设置命名空间(schema 含新键),否则新键的保存与校验不生效。
398
410
 
399
411
  ## 配置(cordis.patch.yml 的 `config`,均有默认值)
package/lib/client.js CHANGED
@@ -1,5 +1,5 @@
1
1
  window.__ModuleLoader__.load({id:'dsh-code-server-app',factory:function(require){var module={exports:{}};var exports=module.exports;
2
- var T=Object.defineProperty;var fe=Object.getOwnPropertyDescriptor;var pe=Object.getOwnPropertyNames;var ve=Object.prototype.hasOwnProperty;var he=(e,r)=>{for(var t in r)T(e,t,{get:r[t],enumerable:!0})},be=(e,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of pe(r))!ve.call(e,a)&&a!==t&&T(e,a,{get:()=>r[a],enumerable:!(i=fe(r,a))||i.enumerable});return e};var ge=e=>be(T({},"__esModule",{value:!0}),e);var tr={};he(tr,{apply:()=>qe,inject:()=>er,name:()=>rr});module.exports=ge(tr);var Q="dsh-resource://file/",me="sidebar://",Y="session";function I(e){return typeof e=="string"&&e.startsWith(me)}function M(e){if(typeof e!="string"||!e.startsWith(Q))return null;for(var r=e.length,t=0;t<e.length;t+=1){var i=e.charAt(t);if(i==="?"||i==="#"){r=t;break}}var a=e.slice(Q.length,r).split("/"),s=a.shift();try{if(s==="session"){var d=a.shift();return d===void 0||d===""||a.length===0?null:{scope:"session",sessionId:decodeURIComponent(d),path:W(a)}}if(s==="absolute"){var f=a[0]===""&&a.length>1,p=f?a.slice(1):a,o=W(p);return(o===""||o.charAt(0)==="/")&&!f?null:f?{scope:"absolute",path:"//"+o}:o===""?null:{scope:"absolute",path:Z(o)?o:"/"+o}}}catch(c){return null}return null}function W(e){for(var r=[],t=0;t<e.length;t+=1)r.push(decodeURIComponent(e[t]));return r.join("/")}function Z(e){return/^[A-Za-z]:($|\/)/.test(e)}function ye(e){return typeof e!="string"||e===""?!1:e.charAt(0)==="/"?!0:Z(e)}function J(e){var r=M(e);if(r===null)return"";var t=r.path.replace(/[/\\]+$/,""),i=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\")),a=i===-1?t:t.slice(i+1);return a}function V(e,r){if(e===null||e==null)return null;var t=typeof e.path=="string"?e.path:"";if(t==="")return null;if(ye(t))return t;if(typeof r!="string"||r==="")return null;var i=r.indexOf("\\")!==-1?"\\":"/",a=r.replace(/[\\/]+$/,"");return a+i+(i==="\\"?t.replace(/\//g,"\\"):t)}function X(e,r){return e===null||e==null?!1:e.scope==="session"?!0:r==="all"}var N=typeof Element!="undefined"&&typeof Element.prototype.moveBefore=="function",we=-2e4,n={park:null,frame:null,currentSrc:null,sameOrigin:null,owner:null,lastRect:null,parkStrategy:"offscreen",degraded:!1,preloaded:!1,nudgeCount:0,nudgeEnabled:!0,lastNudgeAt:0,listeners:new Set};function D(){return{ready:n.frame!==null,docked:n.owner!==null,owner:n.owner,src:n.currentSrc,sameOrigin:n.sameOrigin,parkStrategy:n.parkStrategy,degraded:n.degraded,preloaded:n.preloaded,supportsMoveBefore:N,nudgeCount:n.nudgeCount,lastNudgeAt:n.lastNudgeAt}}function O(){var e=D();n.listeners.forEach(function(r){try{r(e)}catch(t){}})}function K(e){return n.listeners.add(e),function(){n.listeners.delete(e)}}function q(){return D()}function xe(e){e!=="offscreen"&&e!=="behind"||n.parkStrategy!==e&&(n.parkStrategy=e,n.frame!==null&&n.owner===null&&z(),O())}function Se(){return n.parkStrategy}function ke(){var e=n.lastRect;e!==null&&(n.park.style.width=Math.max(1,Math.round(e.width))+"px",n.park.style.height=Math.max(1,Math.round(e.height))+"px")}function z(){if(n.park!==null){if(ke(),n.parkStrategy==="behind"&&n.lastRect!==null){n.park.style.left=Math.round(n.lastRect.left)+"px",n.park.style.top=Math.round(n.lastRect.top)+"px",n.park.style.visibility="visible",n.park.style.zIndex="0";return}n.park.style.left=we+"px",n.park.style.top="0px",n.park.style.visibility="hidden",n.park.style.zIndex="0"}}function $(){n.frame!==null&&(n.frame.setAttribute("inert",""),n.frame.setAttribute("aria-hidden","true"))}function Ee(){n.frame!==null&&(n.frame.removeAttribute("inert"),n.frame.removeAttribute("aria-hidden"))}function Ce(){var e=document.createElement("div");e.className="dshcs-park",e.setAttribute("data-dshcs-park",""),e.setAttribute("aria-hidden","true");var r=document.createElement("iframe");return r.className="dshcs-frame",r.setAttribute("title","code-server"),r.setAttribute("allow","clipboard-read; clipboard-write"),r.setAttribute("data-dshcs-resident",""),r.src="about:blank",e.appendChild(r),document.body.appendChild(e),n.park=e,n.frame=r,n.currentSrc="about:blank",n.owner=null,z(),$(),r}function Ne(e){var r=n.frame;if(r!==null){var t=n.sameOrigin!==e;!t&&r.hasAttribute("data-dshcs-attrs")||(e===!0?r.removeAttribute("sandbox"):e===!1&&r.setAttribute("sandbox","allow-scripts allow-same-origin allow-forms allow-modals allow-popups allow-pointer-lock allow-clipboard-read allow-clipboard-write"),r.setAttribute("data-dshcs-attrs",e===!0?"same-origin":"cross-origin"),n.sameOrigin=e)}}function j(e){var r=e||{};return n.frame===null&&Ce(),typeof r.sameOrigin=="boolean"&&Ne(r.sameOrigin),typeof r.src=="string"&&r.src!==""&&r.src!==n.currentSrc&&Oe(r.src),n.frame}function Oe(e){n.frame===null||typeof e!="string"||e===""||e===n.currentSrc||(n.currentSrc=e,n.frame.src=e,O())}function ee(){var e=n.frame;if(n.nudgeEnabled!==!0||e===null||e.isConnected!==!0)return!1;var r=e.style.display;return e.style.display="none",e.offsetHeight,e.style.display=r,n.nudgeCount+=1,n.lastNudgeAt=Date.now(),!0}function Ae(e){return n.nudgeEnabled=e!==!1,n.nudgeEnabled}function re(e){if(n.frame!==null){if(N)try{e.moveBefore(n.frame,null);return}catch(r){n.degraded=!0,n.lastMoveError=(r&&r.name?r.name+": ":"")+(r&&r.message?r.message:String(r))}else n.degraded=!0;e.appendChild(n.frame)}}function P(e,r){if(!(n.frame===null||e==null)){var t=n.owner===null,i=e.getBoundingClientRect();i.width>=1&&i.height>=1&&(n.lastRect={left:i.left,top:i.top,width:i.width,height:i.height}),n.owner=r===void 0?null:r,Ee(),n.park.setAttribute("aria-hidden","true"),re(e),t&&ee(),O()}}function A(e){n.frame!==null&&(e!==void 0&&n.owner!==e||(n.owner=null,z(),$(),n.park.setAttribute("aria-hidden","true"),re(n.park),O()))}function U(e){var r=e||{};return j(r),n.owner===null&&(typeof r.src=="string"&&r.src!==""&&(n.preloaded=!0),A()),n.frame}function Le(){n.park!==null&&n.park.parentNode!==null&&n.park.parentNode.removeChild(n.park),n.park=null,n.frame=null,n.currentSrc=null,n.sameOrigin=null,n.owner=null,n.lastRect=null,n.degraded=!1,n.preloaded=!1,n.nudgeCount=0,n.lastNudgeAt=0,O()}typeof window!="undefined"&&(window.__dshcsSurface={snapshot:D,setParkStrategy:xe,getParkStrategy:Se,preload:U,dock:P,park:A,nudge:ee,setNudgeEnabled:Ae,destroy:Le});var l=require("react"),_=new Set,L={status:null,busy:!1,sidebarUi:"unknown",sidebarRegisterFailed:!1};function C(e){L=Object.assign({},L,e),_.forEach(function(r){r()})}function Me(e){return _.add(e),function(){_.delete(e)}}function Re(){return L}function B(){return l.useSyncExternalStore(Me,Re)}var Te="/api",Ie="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2aWV3Qm94PSIwIDAgMTQ3IDE0NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8c3R5bGU+QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgeyogeyBmaWxsOiB3aGl0ZTsgfX08L3N0eWxlPgogIDxwYXRoIGQ9Im00Mi40MjE0LDM5LjY1NWMtMjQuNDA1NywwIC00Mi4xNTU0LDEzLjE3MjEgLTQyLjE1NTQsMzMuODQ1YzAsMjAuNTgxNCAxOC40ODkyLDMzLjg0NSA0Mi4xNTU0LDMzLjg0NWMyMy42NjYyLDAgMzguMTgwMywtMTEuNjE3MSAzOC43MzQ5LC0yOC43MjI1bC0yMS4wNzc3LC0wLjQ1NzRjLTAuOTI0NCw5LjMzMDMgLTkuMTA1OSwxNS4xODQ1IC0xNy42NTcyLDE1LjE4NDVjLTExLjc0MDYsMCAtMjAuNDMwNiwtNy41OTIyIC0yMC40MzA2LC0xOS44NDk2YzAsLTEyLjI1NzQgOC42OSwtMTkuOTg2OCAyMC40MzA2LC0yMC4yMTU1YzguNTUxMywtMC4xODMgMTYuOTE3Nyw1Ljk0NTcgMTcuNDcyMywxNS4yNzZsMjEuMDc3NywtMC42NDAzYy0wLjQ2MjIsLTE2LjgzMTEgLTE0LjE0NDIsLTI4LjI2NTIgLTM4LjU1LC0yOC4yNjUyem00OC44NDQ2LDJsNTUuNDY4LDBsMCw2NC4wMzExbC01NS40NjgsMGwwLC02NC4wMzExeiIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz4KPC9zdmc+Cg==";async function E(e,r){var t={method:r===void 0?"GET":"POST",headers:{}};r!==void 0&&(t.headers["content-type"]="application/json",t.body=JSON.stringify(r));var i=await fetch(Te+e,t),a=await i.text(),s=null;try{s=a===""?null:JSON.parse(a)}catch(d){s=null}return i.ok?s!==null?s:{ok:!1,error:"invalid JSON response"}:{ok:!1,error:"HTTP "+i.status+(s!==null&&s.error!==void 0?": "+s.error:"")}}function de(e,r){try{var t=e(function(v){return v}),i=r===null?null:typeof r=="function"?r(function(v){return v}):null,a=t!=null?t.current:void 0;if(a!==void 0&&t!=null&&t.byId!=null){var s=t.byId[a];if(s!=null&&typeof s.cwd=="string"&&s.cwd!=="")return s.cwd}var d=i!=null&&Array.isArray(i.items)?i.items:[];if(a!==void 0)for(var f=0;f<d.length;f++){var p=d[f];if(p.sessionIds!=null&&p.sessionIds.indexOf(a)!==-1&&typeof p.path=="string"&&p.path!=="")return p.path}var o=i!=null?i.recentWorkspaceId:void 0;if(o!==void 0){for(var c=0;c<d.length;c++)if(d[c].workspaceId===o&&typeof d[c].path=="string"&&d[c].path!=="")return d[c].path}if(d.length>0&&typeof d[0].path=="string"&&d[0].path!=="")return d[0].path}catch(v){}}function oe(e,r){if(e==null||typeof e.url!="string"||e.url==="")return null;var t=e.pid!=null?String(e.pid):e.startedAt!=null?String(e.startedAt):"0",i=e.url+"?s="+encodeURIComponent(t),a=typeof r=="string"&&r!==""?r:e!=null&&e.cwd!=null?e.cwd:null;if(a==null||a==="")return i;var s=a.replace(/\\/g,"/"),d=s;return(/^[A-Za-z]:\//.test(s)||s.charCodeAt(0)!==47)&&(d="/"+s),i+"&folder="+encodeURIComponent(d)}function De(e){var r=e.status,t=e.pageUrl,i=e.reloadTick,a=e.owner,s=l.useRef(null),d=r!=null&&r.ok===!0&&r.running===!0,f=r!=null&&r.status==="starting",p=r!=null&&r.ok===!1,o=r!=null&&r.serve==="dsh";if(l.useLayoutEffect(function(){if(!d||t===null){A(a);return}j({src:t,sameOrigin:o}),s.current!==null&&P(s.current,a)},[d,t,o,i,a]),l.useLayoutEffect(function(){return function(){A(a)}},[a]),d&&t!==null)return l.createElement("div",{ref:s,className:"dshcs-slot","data-code-server-slot":a!=null?a:"code-server"});if(f)return l.createElement("div",{className:"dshcs-loading"},"\u6B63\u5728\u542F\u52A8 code-server\u2026");var c=p&&r!=null&&r.error?r.error:"code-server \u672A\u8FD0\u884C",v=o?"\u5F53\u524D\u4EE5 DSH \u540C\u6E90\u8DEF\u5F84 "+(r!=null&&r.url||"/code-server/")+" \u63D0\u4F9B(\u65E0\u72EC\u7ACB\u7AEF\u53E3)\u3002":"\u5F53\u524D\u4EE5\u72EC\u7ACB\u56DE\u73AF\u7AEF\u53E3\u63D0\u4F9B(\u7AEF\u53E3 "+(r!=null&&r.port!=null?r.port:"8090")+" \u88AB\u5360\u7528\u65F6\u8BF7\u91CA\u653E\u6216\u4FEE\u6539 port \u914D\u7F6E)\u3002",y=N?"\u5E38\u9A7B\u9762:\u53EF\u7528(\u5207\u6807\u7B7E/\u6536\u8D77\u4FA7\u680F\u4E0D\u91CD\u8F7D)\u3002":"\u5E38\u9A7B\u9762:\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 Element.moveBefore \u2014\u2014 \u5207\u6807\u7B7E\u4F1A\u6574\u9875\u91CD\u8F7D(\u5347\u7EA7\u6D4F\u89C8\u5668\u540E\u81EA\u52A8\u53EF\u7528)\u3002";return l.createElement("div",{className:"dshcs-empty"},l.createElement("div",{className:"dshcs-emptybox"},l.createElement("div",null,p?"code-server \u542F\u52A8\u5931\u8D25":"code-server \u672A\u8FD0\u884C"),l.createElement("pre",{className:"dshcs-error"},c),l.createElement("p",{className:"dshcs-hint"},"VS Code \u6811\u968F\u63D2\u4EF6\u5305\u5185\u7F6E\u3001\u5C31\u5730\u8FD0\u884C(\u65E0\u9700\u5168\u5C40\u5B89\u88C5\u3001\u65E0\u9700\u8054\u7F51\u5B89\u88C5\u3001\u65E0\u300C\u5B89\u88C5\u73AF\u5883\u300D\u6B65\u9AA4);\u5185\u90E8\u4F9D\u8D56\u4E0E\u9884\u7F16\u8BD1\u539F\u751F\u6A21\u5757\u7531\u5305\u7BA1\u7406\u5668\u5728\u5B89\u88C5\u63D2\u4EF6\u65F6\u4E00\u5E76\u88C5\u597D(\u65E0\u9700 C++ \u5DE5\u5177\u94FE)\u3002\u82E5\u6B64\u5904\u957F\u671F\u672A\u8FD0\u884C,\u8BF7\u67E5\u770B DSH host \u65E5\u5FD7\u91CC\u7684 [code-server] \u8F93\u51FA(\u6216\u5728\u8BBE\u7F6E\u5361\u7247\u91CC\u5207\u6362\u300C\u540E\u53F0\u5E38\u9A7B\u300D\u89E6\u53D1\u4E00\u6B21\u542F\u52A8)\u3002"+v+y)))}function ze(e){var r=B(),t=r.status,i=t!=null&&t.ok===!0&&t.running===!0,a=t!=null&&t.keepResident===!0,s=de(e&&e.useSessions,e&&e.useWorkspaces),d=i?oe(t,s):null;return l.useEffect(function(){!a||!i||d===null||U({src:d,sameOrigin:t!=null&&t.serve==="dsh"})},[a,i,d,t!=null?t.serve:null]),null}var je=".dshcs-frame{display:block;position:absolute;inset:0;z-index:1;width:100%;height:100%;border:0;background:var(--dsw-alias-bg-base,#fff)}.dshcs-tabroot{position:relative;display:flex;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;background:var(--dsw-alias-bg-base,#fff)}.dshcs-slot{position:relative;display:block;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden;background:var(--dsw-alias-bg-base,#fff)}.dshcs-park{position:fixed;left:-20000px;top:0;width:320px;height:200px;overflow:hidden;pointer-events:none;z-index:0;visibility:hidden;contain:strict}.dshcs-loading{position:absolute;inset:0;z-index:2;display:grid;place-items:center;background:var(--dsw-alias-bg-base,#fff);color:var(--dsw-alias-label-tertiary,#7d8798);font-size:13px}.dshcs-empty{position:relative;z-index:2;flex:1;display:flex;align-items:center;justify-content:center;padding:44px 24px 24px}.dshcs-emptybox{max-width:560px;text-align:left;background:var(--dsw-alias-bg-layer-2,#f7f8fb);border:1px solid var(--dsw-alias-border-l2,#dfe3eb);border-radius:12px;padding:16px 18px}.dshcs-error{color:var(--dsw-alias-label-error,#d92d20);white-space:pre-wrap;word-break:break-all;font-family:ui-monospace,Consolas,monospace;font-size:12px;margin:8px 0 0}.dshcs-hint{color:var(--dsw-alias-label-tertiary,#7d8798);font-size:12px;margin:6px 0 0}.dshcs-legacy{color:var(--dsw-alias-label-warning,#b54708);font-size:12px;font-weight:600;margin:0 0 6px}",te="dsh-code-server/styles";typeof document!="undefined"&&document.querySelector("style[data-dshcs="+JSON.stringify(te)+"]")===null&&(R=document.createElement("style"),R.setAttribute("data-dshcs",te),R.textContent=je,document.head.appendChild(R));var R,ne="code-server",ae="dsh-code-server-app",Pe=2500,Ue=1e4,He=1500;function _e(e){var r=e!=null&&typeof e.size=="number"?e.size:16;return l.createElement("img",{src:Ie,alt:"","aria-hidden":!0,draggable:!1,className:e!=null?e.className:void 0,style:{width:r,height:r,display:"block",objectFit:"contain",WebkitUserDrag:"none",userSelect:"none"}})}function Be(){var e=L.status;return e!=null&&e.fileOpenScope==="all"?"all":Y}function Fe(e,r){try{var t=e(function(a){return a});if(t!=null&&r!=null&&t.byId!=null){var i=t.byId[r];if(i!=null&&typeof i.cwd=="string"&&i.cwd!=="")return i.cwd}}catch(a){}}function Ge(e){var r=e.useTabInfo(),t=r.tab,i=B(),a=i.status,s=t.navigation,d=s!=null&&typeof s.revision=="number"?s.revision:0,f=s!=null&&typeof s.address=="string"?s.address:"",p=I(f)?null:M(f),o=Fe(e.useSessions,p!=null?p.sessionId:void 0),c=o!==void 0?o:de(e.useSessions,null),v=V(p,c),y=s!=null&&s.params!=null&&typeof s.params.line=="number"?s.params.line:null,u=l.useRef(void 0),[m,b]=l.useState(0);return l.useEffect(function(){if(!(typeof c!="string"||c==="")&&u.current!==c){var g=u.current!==void 0;u.current=c;var w=!1;return E("/code-server/start",{cwd:c}).then(function(S){w||(C({status:S}),g&&S!=null&&S.ok===!0&&S.running===!0&&b(function(F){return F+1}))}).catch(function(){}),function(){w=!0}}},[c]),l.useEffect(function(){E("/code-server/status").then(function(w){w!=null&&C({status:w})}).catch(function(){});var g=window.setInterval(function(){E("/code-server/status").then(function(w){C({status:w})}).catch(function(){})},3e3);return function(){window.clearInterval(g)}},[]),l.useEffect(function(){v!==null&&E("/code-server/open-file",y===null?{file:v}:{file:v,line:y}).catch(function(){})},[d,v,y]),l.createElement("div",{className:"dshcs-tabroot","data-code-server-tab":"body"},l.createElement(De,{status:a,pageUrl:oe(a,c),reloadTick:m,owner:"tab:"+t.id}))}function H(e,r){if(e==null)return null;var t=e[r];if(t!=null)return t;if(typeof e.get=="function"){var i=e.get(r);if(i!=null)return i}return null}function Qe(e){var r=H(e,"sidebarRightTabs"),t=H(e,"sidebarRight");if(r==null||t==null)return console.error("[code-server] \u53F3\u4FA7\u680F\u670D\u52A1\u4E0A\u4E0B\u6587\u4E0D\u53EF\u89C1(sidebarRightTabs="+(r!=null)+", sidebarRight="+(t!=null)+"):\u8DF3\u8FC7\u4FA7\u680F\u6CE8\u518C"),!1;var i=H(e,"slots");if(e.effect(function(){return r.register({id:ae,kind:ne,priority:"extension",patterns:["dsh-resource://file/**"],canOpen:function(a){return X(M(a),Be())},title:function(a){if(I(a)||a===void 0||a===null||a==="")return"Code Server";var s=J(a);return s===""?"Code Server":s},guide:[{order:20,title:function(){return"Code Server"},description:function(){return"\u5728\u53F3\u4FA7\u680F\u6807\u7B7E\u91CC\u8FD0\u884C VS Code \u7F51\u9875\u7248,\u8DDF\u968F\u5F53\u524D\u4F1A\u8BDD\u5DE5\u4F5C\u533A;\u4EA7\u7269/\u4EA4\u4ED8\u6587\u4EF6\u70B9\u51FB\u540E\u5728\u6B64\u6253\u5F00\u3002"},icon:_e}]})},"code-server: sidebar tab type"),i!=null)e.effect(function(){return i.inject("sidebar.right.pane.tab",function(){return i.register({name:"sidebar.right.pane.tab",key:ae},Ge)})},"code-server: sidebar tab body");else return console.error("[code-server] slots \u670D\u52A1\u4E0D\u53EF\u89C1:\u4FA7\u680F\u6807\u7B7E body \u672A\u6CE8\u518C"),!1;return e.effect(function(){return function(){C({sidebarUi:"unknown"})}},"code-server: sidebar mode reset"),console.log("[code-server] right-sidebar tab registered (kind="+ne+")"),!0}var We=".dshcs-card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;list-style:none;transition:border-color .16s,background .16s}.dshcs-card:hover{border-color:var(--dsw-alias-label-dimmed,var(--dsw-alias-border-l2))}.dshcs-cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed,var(--dsw-alias-border-l2))}.dshcs-cardHeader{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.dshcs-cardHeader:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.dshcs-cardHeadText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.dshcs-cardName{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.dshcs-cardDescription{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary));font-size:13px;line-height:1.5}.dshcs-cardChevron{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary));flex:none;transition:transform .16s;display:inline-flex}.dshcs-cardChevronOpen{transform:rotate(180deg)}.dshcs-cardBody{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding-bottom:8px}.dshcs-cardReadOnly{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary));margin:12px 0 0;font-size:12px;line-height:1.5}.dshcs-pending{white-space:nowrap;background:var(--dsw-alias-bg-module-platform,var(--dsw-alias-bg-layer-2));color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.dshcs-cardFooter{border-top:1px solid var(--dsw-alias-border-l2);justify-content:flex-end;align-items:center;gap:8px;padding:12px 0 4px;display:flex}.dshcs-cardFailed{min-width:0;color:var(--dsw-alias-label-error,var(--dsw-alias-state-error-primary));flex:1;margin:0;font-size:12px;line-height:1.5}.dshcs-cbtn{appearance:none;font:inherit;cursor:pointer;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5;border:1px solid transparent;transition:color .12s ease,background .12s ease}.dshcs-cbtn:disabled{opacity:.4;cursor:default}.dshcs-cbtn:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.dshcs-cbtnOutline{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}.dshcs-cbtnOutline:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover,transparent)}.dshcs-cbtnPrimary{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3);border-color:var(--dsw-alias-label-primary);font-weight:600}.dshcs-cbtnPrimary:hover:not(:disabled){filter:brightness(.95)}.dshcs-cbtnPrimary:active:not(:disabled){filter:brightness(.9)}.dshcs-field{flex-direction:column;gap:6px;padding:12px 0;display:flex}.dshcs-field+.dshcs-field{border-top:1px solid var(--dsw-alias-border-l2)}.dshcs-fieldHead{align-items:center;gap:8px;display:flex}.dshcs-fieldLabel{min-width:0;color:var(--dsw-alias-label-primary);flex:1;font-size:13px;font-weight:500;line-height:1.5}.dshcs-card .dshcs-hint{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary));margin:0;font-size:12px;line-height:1.5}.dshcs-check{display:flex;align-items:center;gap:8px;cursor:pointer}.dshcs-check input{accent-color:var(--dsw-alias-brand-primary);width:15px;height:15px;margin:0;flex:none}.dshcs-check input:disabled{cursor:default}.dshcs-select{display:inline-flex;align-items:center}.dshcs-select select{font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3,transparent);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:4px 8px;min-width:220px;cursor:pointer}.dshcs-select select:disabled{opacity:.5;cursor:default}.dshcs-badges{align-items:center;gap:8px;display:inline-flex}.dshcs-badge{white-space:nowrap;background:var(--dsw-alias-bg-module-platform,var(--dsw-alias-bg-layer-2));color:var(--dsw-alias-label-secondary);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.dshcs-reset{font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;line-height:1.5}.dshcs-reset:hover:not(:disabled){color:var(--dsw-alias-label-primary)}.dshcs-reset:disabled{cursor:default}",Ye="dsh-code-server/Card.module.css";function Ze(e,r){if(typeof document!="undefined"&&document.querySelector("style[data-plugin-css="+JSON.stringify(e)+"]")===null){var t=document.createElement("style");t.dataset.plugin="dsh-code-server",t.dataset.pluginCss=e,t.textContent=r,document.head.appendChild(t)}}Ze(Ye,We);function Je(e){return l.createElement("svg",{width:14,height:14,viewBox:"0 0 14 14",fill:"none","aria-hidden":!0,className:e.className},l.createElement("path",{d:"M3.5 5.25L7 8.75L10.5 5.25",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"}))}function le(e){return l.createElement("button",{type:"button",className:"dshcs-cbtn "+(e.variant==="primary"?"dshcs-cbtnPrimary":"dshcs-cbtnOutline"),disabled:e.disabled===!0,onClick:e.onClick},e.children)}function Ve(e){return l.createElement("label",{className:"dshcs-check"},l.createElement("input",{type:"checkbox",checked:e.checked===!0,disabled:e.disabled===!0,onChange:function(r){e.onChange(r.target.checked)}}),l.createElement("span",{className:"dshcs-hint"},e.children))}function Xe(e){var r=Array.isArray(e.options)?e.options:[];return l.createElement("label",{className:"dshcs-select"},l.createElement("select",{value:e.value,disabled:e.disabled===!0,onChange:function(t){e.onChange(t.target.value)}},r.map(function(t){return l.createElement("option",{key:t.value,value:t.value},t.label)})))}function ie(e){var r=[];return e.overridden===!0&&(r.push(l.createElement("span",{className:"dshcs-badge"},e.overriddenLabel)),r.push(l.createElement("button",{type:"button",className:"dshcs-reset",disabled:e.disabled===!0,onClick:e.onReset},e.resetLabel))),r.length===0?null:l.createElement("span",{className:"dshcs-badges"},...r)}function se(e){var[r,t]=l.useState(e.defaultOpen===!0),i=e.state;if(i==null||i.available!==!0)return null;var a=e.title,s=e.noticeOnly===!0,d=i.dirty!==!0||i.invalid===!0||i.saving===!0;return l.createElement("li",{className:"dshcs-card"+(r?" dshcs-cardOpen":"")},l.createElement("button",{type:"button",className:"dshcs-cardHeader","aria-expanded":r,onClick:function(){t(!r)}},l.createElement("span",{className:"dshcs-cardHeadText"},l.createElement("span",{className:"dshcs-cardName"},a),l.createElement("span",{className:"dshcs-cardDescription"},e.description)),i.dirty===!0?l.createElement("span",{className:"dshcs-pending"},e.unsavedLabel):null,l.createElement(Je,{className:"dshcs-cardChevron"+(r?" dshcs-cardChevronOpen":"")})),r===!0?l.createElement("div",{className:"dshcs-cardBody"},s===!0?null:i.writable!==!0?l.createElement("p",{className:"dshcs-cardReadOnly",role:"status"},e.readOnlyLabel):null,e.children,s===!0?null:l.createElement("div",{className:"dshcs-cardFooter"},i.failed===!0?l.createElement("p",{className:"dshcs-cardFailed",role:"status"},e.saveFailedLabel):null,l.createElement(le,{disabled:i.dirty!==!0||i.saving===!0,onClick:e.onDiscard},e.discardLabel),l.createElement(le,{variant:"primary",disabled:d,onClick:e.onSave},i.saving===!0?e.savingLabel:e.saveLabel))):null)}function Ke(e){try{let k=function(){E("/code-server/status").then(function(h){h!=null&&typeof h=="object"&&C({status:h})}).catch(function(){})};var r=e.scope,[t,i]=l.useState(function(){return r!==void 0?r.getSnapshot():null}),[a,s]=l.useState(null),[d,f]=l.useState(!1),[p,o]=l.useState(!1),c=B(),[v,y]=l.useState(q());if(l.useEffect(function(){return K(function(h){y(h)})},[]),l.useEffect(function(){if(r===void 0||typeof r.subscribe!="function")return;function h(){try{i(r.getSnapshot())}catch(nr){}}var x=r.subscribe(h);return function(){typeof x=="function"&&x()}},[r]),r===void 0)return console.error("[code-server] card scope missing"),null;if(t==null||t.status!=="ready")return t!=null&&t.status==="unavailable"&&console.warn("[code-server] settings scope unavailable:",t.status),null;var u=t.value!==void 0&&t.value!==null?t.value:{},m=t.user,b={keepResident:u.keepResident!==!1,fileOpenScope:u.fileOpenScope==="all"?"all":"session"};if(c!=null&&c.sidebarUi==="legacy")return l.createElement(se,{title:"Code Server",description:"\u5F53\u524D DSH \u7248\u672C\u4E0D\u53D7\u652F\u6301(\u7F3A\u5C11\u53F3\u4FA7\u680F\u670D\u52A1)",defaultOpen:!0,noticeOnly:!0,state:{available:!0,writable:!1,dirty:!1,invalid:!1,saving:!1,failed:!1}},l.createElement("div",{className:"dshcs-field"},l.createElement("div",{className:"dshcs-legacy"},"\u672C\u63D2\u4EF6\u81EA 0.2.3 \u8D77\u4E0D\u518D\u517C\u5BB9\u65E7\u7248 DSH\u3002"),l.createElement("div",{className:"dshcs-hint",style:{marginTop:0}},`\u672A\u68C0\u6D4B\u5230\u53F3\u4FA7\u680F\u63D2\u4EF6\u670D\u52A1 sidebarRightTabs / sidebarRight,\u56E0\u6B64\u63D2\u4EF6\u4E0D\u63D0\u4F9B\u4EFB\u4F55\u5165\u53E3(\u65E7\u7248\u7684\u60AC\u6D6E\u7403\u4E0E\u6D6E\u52A8\u7A97\u53E3\u5DF2\u79FB\u9664),\u4E5F\u4E0D\u4F1A\u540E\u53F0\u542F\u52A8 IDE\u3002
3
- \u5347\u7EA7 DSH \u5230\u5E26\u53F3\u4FA7\u680F\u7684\u7248\u672C(\u2265 0.1.5-alpha.1)\u540E,Code Server \u4F1A\u51FA\u73B0\u5728\u53F3\u4FA7\u680F\u6807\u7B7E\u91CC,\u672C\u9875\u540C\u65F6\u663E\u793A\u5B8C\u6574\u8BBE\u7F6E\u9879;\u5347\u7EA7\u540E\u65E0\u9700\u91CD\u88C5\u672C\u63D2\u4EF6,\u5237\u65B0\u9875\u9762\u5373\u53EF\u3002`)));var g=m!=null&&Object.prototype.hasOwnProperty.call(m,"keepResident"),w=m!=null&&Object.prototype.hasOwnProperty.call(m,"fileOpenScope"),S=a!==null&&(a.keepResident!==b.keepResident||a.fileOpenScope!==b.fileOpenScope),F=!S||d,ce={available:!0,writable:t.writable,dirty:S,invalid:!1,saving:d,failed:p};async function ue(){if(S&&!d){f(!0),o(!1);try{var h=a!==null?a:b;await e.scope.set("keepResident",h.keepResident===!0),await e.scope.set("fileOpenScope",h.fileOpenScope==="all"?"all":"session"),s(null),k()}catch(x){o(!0)}f(!1)}}async function G(){if(!(d||t.writable!==!0)){f(!0),o(!1);try{typeof e.scope.unset=="function"?(await e.scope.unset("keepResident"),await e.scope.unset("fileOpenScope")):(await e.scope.set("keepResident",u.keepResident===void 0||u.keepResident===null?!0:u.keepResident),await e.scope.set("fileOpenScope",u.fileOpenScope==="all"?"all":"session")),s(null),k()}catch(h){o(!0)}f(!1)}}return l.createElement(se,{title:"Code Server",description:"\u5165\u53E3:\u53F3\u4FA7\u680F\u6807\u7B7E(DSH \u2265 0.1.5-alpha.1);\u8BA4\u9886\u8303\u56F4\u51B3\u5B9A\u54EA\u4E9B\u6587\u4EF6\u4EA4\u7ED9 Code Server \u6253\u5F00",state:ce,unsavedLabel:"\u672A\u4FDD\u5B58",readOnlyLabel:"\u672C\u90E8\u7F72\u7684\u8BBE\u7F6E\u4E3A\u53EA\u8BFB\u3002",saveFailedLabel:"\u672C\u90E8\u7F72\u6CA1\u6709\u63A5\u53D7\u8FD9\u4E9B\u503C\uFF0C\u5DF2\u4FDD\u7559\u4F9B\u4F60\u4FEE\u6539\u3002",discardLabel:"\u653E\u5F03\u4FEE\u6539",saveLabel:"\u4FDD\u5B58",savingLabel:"\u4FDD\u5B58\u4E2D\u2026",onSave:ue,onDiscard:function(){s(null),o(!1)}},l.createElement("div",{className:"dshcs-field"},l.createElement("div",{className:"dshcs-fieldHead"},l.createElement("span",{className:"dshcs-fieldLabel"},"\u8BA4\u9886\u8303\u56F4(\u54EA\u4E9B\u6587\u4EF6\u4EA4\u7ED9 Code Server)"),w===!0?l.createElement(ie,{overridden:!0,disabled:t.writable!==!0,overriddenLabel:"\u5DF2\u8986\u76D6",resetLabel:"\u6062\u590D\u9ED8\u8BA4",onReset:function(){G()}}):null),l.createElement(Xe,{value:a!==null?a.fileOpenScope:b.fileOpenScope,disabled:t.writable!==!0,options:[{value:"session",label:"\u4EC5\u4F1A\u8BDD\u5185\u6587\u4EF6(\u63A8\u8350)"},{value:"all",label:"\u6240\u6709\u6587\u4EF6(\u542B\u5DE5\u4F5C\u533A\u5916\u7684\u7EDD\u5BF9\u8DEF\u5F84)"}],onChange:function(h){s(function(x){return Object.assign({},x!==null?x:b,{fileOpenScope:h==="all"?"all":"session"})}),o(!1)}}),l.createElement("div",{className:"dshcs-hint",style:{marginTop:4}},"\u4F1A\u8BDD\u5185\u6587\u4EF6 = DSH \u7528 `dsh-resource://file/session/\u2026` \u547D\u540D\u7684\u6587\u4EF6(\u4EA7\u7269\u3001\u4EA4\u4ED8\u3001\u6B63\u6587\u63D0\u53CA\u3001\u5DE5\u5177\u89C6\u56FE);\u201C\u6240\u6709\u6587\u4EF6\u201D\u8FD8\u4F1A\u8BA4\u9886\u4E0D\u5E26\u4F1A\u8BDD\u7684\u7EDD\u5BF9\u8DEF\u5F84 `dsh-resource://file/absolute/\u2026`\u3002\u672A\u88AB\u8BA4\u9886\u7684\u5730\u5740\u7531 DSH \u81EA\u5E26\u9884\u89C8\u515C\u5E95\u3002")),l.createElement("div",{className:"dshcs-field"},l.createElement("div",{className:"dshcs-fieldHead"},l.createElement("span",{className:"dshcs-fieldLabel"},"\u540E\u53F0\u5E38\u9A7B(\u5207\u6807\u7B7E\u4E0D\u91CD\u8F7D)"),g===!0?l.createElement(ie,{overridden:!0,disabled:t.writable!==!0,overriddenLabel:"\u5DF2\u8986\u76D6",resetLabel:"\u6062\u590D\u9ED8\u8BA4",onReset:function(){G()}}):null),l.createElement(Ve,{checked:a!==null?a.keepResident:b.keepResident,disabled:t.writable!==!0,onChange:function(h){s(function(x){return Object.assign({},x!==null?x:b,{keepResident:h===!0})}),o(!1)}},'\u5F00\u542F\u540E\u5BBF\u4E3B\u542F\u52A8\u5373\u628A IDE \u52A0\u8F7D\u5230\u540E\u53F0"\u505C\u653E\u533A":\u5207\u6362\u53F3\u4FA7\u680F\u6807\u7B7E\u3001\u6536\u8D77/\u5C55\u5F00\u4FA7\u680F\u3001\u62D6\u6210\u6D6E\u52A8\u7A97\u53E3\u90FD\u4E0D\u518D\u91CD\u8F7D,\u9996\u6B21\u6253\u5F00\u514D\u7B49\u5F85;\u5173\u95ED\u5219\u53EA\u5728\u6253\u5F00\u9762\u677F\u65F6\u52A0\u8F7D(\u7701\u5185\u5B58)'),l.createElement("div",{className:"dshcs-hint",style:{marginTop:4}},N?"\u5E38\u9A7B\u9762:"+(v.docked?"\u5DF2\u505C\u9760":v.ready?"\u5DF2\u505C\u653E(\u540E\u53F0\u8FD0\u884C\u4E2D)":"\u672A\u542F\u52A8")+(v.degraded?" \xB7 \u672C\u6B21\u53D1\u751F\u8FC7\u964D\u7EA7\u91CD\u8F7D":""):"\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 Element.moveBefore(Chromium <133)\u2192 \u5E38\u9A7B\u4E0D\u53EF\u7528,\u5207\u6807\u7B7E\u4ECD\u4F1A\u6574\u9875\u91CD\u8F7D(\u5347\u7EA7\u6D4F\u89C8\u5668\u540E\u81EA\u52A8\u751F\u6548)")))}catch(k){return console.error("[code-server] card render error:",k!=null&&k.message!==void 0?k.message:String(k)),null}}function qe(e){try{$e(e)}catch(r){console.error("[code-server] apply failed:",r&&r.stack?r.stack:String(r));try{document.title="CS-ERR "+(r&&r.message||String(r))}catch(t){}}}function $e(e){var r=e.get("slots");if(r===void 0){console.error("[code-server] slots service unavailable");return}var t=e.settingsScope,i=null;if(t!==void 0&&typeof t.bind=="function")i=t.bind({namespace:"code-server"});else{console.error("[code-server] settingsScope unavailable (inject missing?); settings card disabled");return}E("/code-server/status").then(function(u){C({status:u})}).catch(function(){}),r.inject("settings.plugin.item",()=>r.register({name:"settings.plugin.item",key:"code-server",label:"Code Server",inject:function(){return{scope:i}}},Ke));var a=!1;function s(u,m){if(!a){a=!0,c();var b=!1;try{b=Qe(u)}catch(g){console.error("[code-server] sidebar tab registration failed:",g!=null&&g.message!=null?g.message:String(g))}L.sidebarUi==="legacy"&&(console.log("[code-server] \u53F3\u4FA7\u680F\u670D\u52A1\u665A\u5230(\u7ECF "+m+"):\u64A4\u9500\u65E7\u7248 DSH \u5224\u5B9A"),E("/code-server/ui-mode",{sidebar:!0}).catch(function(){})),C({sidebarUi:"modern",sidebarRegisterFailed:b!==!0}),r.inject("shell.overlay",()=>r.register({name:"shell.overlay",id:"code-server",order:70,label:"Code Server"},g=>l.createElement(ze,g))),console.log("[code-server] client registered via "+m+": sidebar tab="+b+"(claims dsh-resource://file/**) + resident preload + settings card")}}function d(u){C({sidebarUi:"legacy"}),console.warn("[code-server] \u672A\u63A2\u6D4B\u5230\u53F3\u4FA7\u680F\u670D\u52A1(sidebarRightTabs/sidebarRight): \u672C\u63D2\u4EF6\u81EA 0.2.3 \u8D77\u4E0D\u518D\u517C\u5BB9\u65E7\u7248 DSH \u2014\u2014 \u9664\u300C\u8BBE\u7F6E \u2192 \u63D2\u4EF6 \u2192 Code Server\u300D\u7684\u63D0\u793A\u5916\u4E0D\u63D0\u4F9B\u4EFB\u4F55\u5165\u53E3,\u4E5F\u4E0D\u9884\u70ED IDE\u3002\u8BF7\u5347\u7EA7 DSH\u3002"),u===!0&&E("/code-server/ui-mode",{sidebar:!1}).catch(function(){})}var f=null,p=null,o=null;function c(){f!==null&&(clearTimeout(f),f=null),p!==null&&(clearTimeout(p),p=null),o!==null&&(clearTimeout(o),o=null)}var v=!1;try{typeof e.inject=="function"&&(v=!0,e.inject(["sidebarRightTabs","sidebarRight"],function(u){s(u,"inject")}))}catch(u){console.warn("[code-server] sidebar inject failed:",u!=null&&u.message!=null?u.message:String(u))}var y=typeof e.get=="function"&&e.get("sidebarRightTabs")!==void 0&&e.get("sidebarRight")!==void 0;if(y){o=setTimeout(function(){a||(console.warn("[code-server] ctx.inject \u672A\u5728 1.5s \u5185\u56DE\u8C03,\u6539\u7528\u540C\u6B65\u670D\u52A1\u6CE8\u518C\u4FA7\u680F"),s(e,"sync-fallback"))},He);return}if(v!==!0){d(!0);return}f=setTimeout(function(){a||d(!1)},Pe),p=setTimeout(function(){a||d(!0)},Ue)}var er=["slots","settingsScope"],rr="code-server";
2
+ var P=Object.defineProperty;var be=Object.getOwnPropertyDescriptor;var he=Object.getOwnPropertyNames;var ge=Object.prototype.hasOwnProperty;var me=(e,r)=>{for(var n in r)P(e,n,{get:r[n],enumerable:!0})},ye=(e,r,n,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let l of he(r))!ge.call(e,l)&&l!==n&&P(e,l,{get:()=>r[l],enumerable:!(s=be(r,l))||s.enumerable});return e};var we=e=>ye(P({},"__esModule",{value:!0}),e);var sr={};me(sr,{apply:()=>nr,inject:()=>ar,name:()=>lr});module.exports=we(sr);var J="dsh-resource://file/",Se="sidebar://",X="session";function H(e){return typeof e=="string"&&e.startsWith(Se)}function D(e){if(typeof e!="string"||!e.startsWith(J))return null;for(var r=e.length,n=0;n<e.length;n+=1){var s=e.charAt(n);if(s==="?"||s==="#"){r=n;break}}var l=e.slice(J.length,r).split("/"),i=l.shift();try{if(i==="session"){var d=l.shift();return d===void 0||d===""||l.length===0?null:{scope:"session",sessionId:decodeURIComponent(d),path:V(l)}}if(i==="absolute"){var f=l[0]===""&&l.length>1,p=f?l.slice(1):l,c=V(p);return(c===""||c.charAt(0)==="/")&&!f?null:f?{scope:"absolute",path:"//"+c}:c===""?null:{scope:"absolute",path:q(c)?c:"/"+c}}}catch(u){return null}return null}function V(e){for(var r=[],n=0;n<e.length;n+=1)r.push(decodeURIComponent(e[n]));return r.join("/")}function q(e){return/^[A-Za-z]:($|\/)/.test(e)}function xe(e){return typeof e!="string"||e===""?!1:e.charAt(0)==="/"?!0:q(e)}function K(e){var r=D(e);if(r===null)return"";var n=r.path.replace(/[/\\]+$/,""),s=Math.max(n.lastIndexOf("/"),n.lastIndexOf("\\")),l=s===-1?n:n.slice(s+1);return l}function $(e,r){if(e===null||e==null)return null;var n=typeof e.path=="string"?e.path:"";if(n==="")return null;if(xe(n))return n;if(typeof r!="string"||r==="")return null;var s=r.indexOf("\\")!==-1?"\\":"/",l=r.replace(/[\\/]+$/,"");return l+s+(s==="\\"?n.replace(/\//g,"\\"):n)}function ee(e,r){return e===null||e==null?!1:e.scope==="session"?!0:r==="all"}var ke="[data-sidebar-right-panel]",Ee='[data-sidebar-right-mode="fullscreen"]';function re(e){if(e==null||typeof e.closest!="function")return"no-root";var r,n;try{if(r=e.closest(ke),r==null||typeof r.querySelector!="function")return"no-panel";n=r.querySelector(Ee)}catch(s){return"lookup-failed"}if(n==null||typeof n.click!="function")return"no-control";try{n.click()}catch(s){return"click-failed"}return"clicked"}var A=typeof Element!="undefined"&&typeof Element.prototype.moveBefore=="function",Oe=-2e4,t={park:null,frame:null,currentSrc:null,sameOrigin:null,owner:null,lastRect:null,parkStrategy:"offscreen",degraded:!1,preloaded:!1,nudgeCount:0,nudgeEnabled:!0,lastNudgeAt:0,listeners:new Set};function U(){return{ready:t.frame!==null,docked:t.owner!==null,owner:t.owner,src:t.currentSrc,sameOrigin:t.sameOrigin,parkStrategy:t.parkStrategy,degraded:t.degraded,preloaded:t.preloaded,supportsMoveBefore:A,nudgeCount:t.nudgeCount,lastNudgeAt:t.lastNudgeAt}}function R(){var e=U();t.listeners.forEach(function(r){try{r(e)}catch(n){}})}function ne(e){return t.listeners.add(e),function(){t.listeners.delete(e)}}function te(){return U()}function Ce(e){e!=="offscreen"&&e!=="behind"||t.parkStrategy!==e&&(t.parkStrategy=e,t.frame!==null&&t.owner===null&&_(),R())}function Ne(){return t.parkStrategy}function Le(){var e=t.lastRect;e!==null&&(t.park.style.width=Math.max(1,Math.round(e.width))+"px",t.park.style.height=Math.max(1,Math.round(e.height))+"px")}function _(){if(t.park!==null){if(Le(),t.parkStrategy==="behind"&&t.lastRect!==null){t.park.style.left=Math.round(t.lastRect.left)+"px",t.park.style.top=Math.round(t.lastRect.top)+"px",t.park.style.visibility="visible",t.park.style.zIndex="0";return}t.park.style.left=Oe+"px",t.park.style.top="0px",t.park.style.visibility="hidden",t.park.style.zIndex="0"}}function ae(){t.frame!==null&&(t.frame.setAttribute("inert",""),t.frame.setAttribute("aria-hidden","true"))}function Ae(){t.frame!==null&&(t.frame.removeAttribute("inert"),t.frame.removeAttribute("aria-hidden"))}function Re(){var e=document.createElement("div");e.className="dshcs-park",e.setAttribute("data-dshcs-park",""),e.setAttribute("aria-hidden","true");var r=document.createElement("iframe");return r.className="dshcs-frame",r.setAttribute("title","code-server"),r.setAttribute("allow","clipboard-read; clipboard-write"),r.setAttribute("data-dshcs-resident",""),r.src="about:blank",e.appendChild(r),document.body.appendChild(e),t.park=e,t.frame=r,t.currentSrc="about:blank",t.owner=null,_(),ae(),r}function Me(e){var r=t.frame;if(r!==null){var n=t.sameOrigin!==e;!n&&r.hasAttribute("data-dshcs-attrs")||(e===!0?r.removeAttribute("sandbox"):e===!1&&r.setAttribute("sandbox","allow-scripts allow-same-origin allow-forms allow-modals allow-popups allow-pointer-lock allow-clipboard-read allow-clipboard-write"),r.setAttribute("data-dshcs-attrs",e===!0?"same-origin":"cross-origin"),t.sameOrigin=e)}}function F(e){var r=e||{};return t.frame===null&&Re(),typeof r.sameOrigin=="boolean"&&Me(r.sameOrigin),typeof r.src=="string"&&r.src!==""&&r.src!==t.currentSrc&&Te(r.src),t.frame}function Te(e){t.frame===null||typeof e!="string"||e===""||e===t.currentSrc||(t.currentSrc=e,t.frame.src=e,R())}function le(){var e=t.frame;if(t.nudgeEnabled!==!0||e===null||e.isConnected!==!0)return!1;var r=e.style.display;return e.style.display="none",e.offsetHeight,e.style.display=r,t.nudgeCount+=1,t.lastNudgeAt=Date.now(),!0}function Ie(e){return t.nudgeEnabled=e!==!1,t.nudgeEnabled}function se(e){if(t.frame!==null){if(A)try{e.moveBefore(t.frame,null);return}catch(r){t.degraded=!0,t.lastMoveError=(r&&r.name?r.name+": ":"")+(r&&r.message?r.message:String(r))}else t.degraded=!0;e.appendChild(t.frame)}}function B(e,r){if(!(t.frame===null||e==null)){var n=t.owner===null,s=e.getBoundingClientRect();s.width>=1&&s.height>=1&&(t.lastRect={left:s.left,top:s.top,width:s.width,height:s.height}),t.owner=r===void 0?null:r,Ae(),t.park.setAttribute("aria-hidden","true"),se(e),n&&le(),R()}}function M(e){t.frame!==null&&(e!==void 0&&t.owner!==e||(t.owner=null,_(),ae(),t.park.setAttribute("aria-hidden","true"),se(t.park),R()))}function G(e){var r=e||{};return F(r),t.owner===null&&(typeof r.src=="string"&&r.src!==""&&(t.preloaded=!0),M()),t.frame}function De(){t.park!==null&&t.park.parentNode!==null&&t.park.parentNode.removeChild(t.park),t.park=null,t.frame=null,t.currentSrc=null,t.sameOrigin=null,t.owner=null,t.lastRect=null,t.degraded=!1,t.preloaded=!1,t.nudgeCount=0,t.lastNudgeAt=0,R()}typeof window!="undefined"&&(window.__dshcsSurface={snapshot:U,setParkStrategy:Ce,getParkStrategy:Ne,preload:G,dock:B,park:M,nudge:le,setNudgeEnabled:Ie,destroy:De});var a=require("react"),Y=new Set,T={status:null,busy:!1,sidebarUi:"unknown",sidebarRegisterFailed:!1};function E(e){T=Object.assign({},T,e),Y.forEach(function(r){r()})}function je(e){return Y.add(e),function(){Y.delete(e)}}function ze(){return T}function Z(){return a.useSyncExternalStore(je,ze)}var Pe="/api",He="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2aWV3Qm94PSIwIDAgMTQ3IDE0NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8c3R5bGU+QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgeyogeyBmaWxsOiB3aGl0ZTsgfX08L3N0eWxlPgogIDxwYXRoIGQ9Im00Mi40MjE0LDM5LjY1NWMtMjQuNDA1NywwIC00Mi4xNTU0LDEzLjE3MjEgLTQyLjE1NTQsMzMuODQ1YzAsMjAuNTgxNCAxOC40ODkyLDMzLjg0NSA0Mi4xNTU0LDMzLjg0NWMyMy42NjYyLDAgMzguMTgwMywtMTEuNjE3MSAzOC43MzQ5LC0yOC43MjI1bC0yMS4wNzc3LC0wLjQ1NzRjLTAuOTI0NCw5LjMzMDMgLTkuMTA1OSwxNS4xODQ1IC0xNy42NTcyLDE1LjE4NDVjLTExLjc0MDYsMCAtMjAuNDMwNiwtNy41OTIyIC0yMC40MzA2LC0xOS44NDk2YzAsLTEyLjI1NzQgOC42OSwtMTkuOTg2OCAyMC40MzA2LC0yMC4yMTU1YzguNTUxMywtMC4xODMgMTYuOTE3Nyw1Ljk0NTcgMTcuNDcyMywxNS4yNzZsMjEuMDc3NywtMC42NDAzYy0wLjQ2MjIsLTE2LjgzMTEgLTE0LjE0NDIsLTI4LjI2NTIgLTM4LjU1LC0yOC4yNjUyem00OC44NDQ2LDJsNTUuNDY4LDBsMCw2NC4wMzExbC01NS40NjgsMGwwLC02NC4wMzExeiIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz4KPC9zdmc+Cg==";async function k(e,r){var n={method:r===void 0?"GET":"POST",headers:{}};r!==void 0&&(n.headers["content-type"]="application/json",n.body=JSON.stringify(r));var s=await fetch(Pe+e,n),l=await s.text(),i=null;try{i=l===""?null:JSON.parse(l)}catch(d){i=null}return s.ok?i!==null?i:{ok:!1,error:"invalid JSON response"}:{ok:!1,error:"HTTP "+s.status+(i!==null&&i.error!==void 0?": "+i.error:"")}}function pe(e,r){try{var n=e(function(v){return v}),s=r===null?null:typeof r=="function"?r(function(v){return v}):null,l=n!=null?n.current:void 0;if(l!==void 0&&n!=null&&n.byId!=null){var i=n.byId[l];if(i!=null&&typeof i.cwd=="string"&&i.cwd!=="")return i.cwd}var d=s!=null&&Array.isArray(s.items)?s.items:[];if(l!==void 0)for(var f=0;f<d.length;f++){var p=d[f];if(p.sessionIds!=null&&p.sessionIds.indexOf(l)!==-1&&typeof p.path=="string"&&p.path!=="")return p.path}var c=s!=null?s.recentWorkspaceId:void 0;if(c!==void 0){for(var u=0;u<d.length;u++)if(d[u].workspaceId===c&&typeof d[u].path=="string"&&d[u].path!=="")return d[u].path}if(d.length>0&&typeof d[0].path=="string"&&d[0].path!=="")return d[0].path}catch(v){}}function ve(e,r){if(e==null||typeof e.url!="string"||e.url==="")return null;var n=e.pid!=null?String(e.pid):e.startedAt!=null?String(e.startedAt):"0",s=e.url+"?s="+encodeURIComponent(n),l=typeof r=="string"&&r!==""?r:e!=null&&e.cwd!=null?e.cwd:null;if(l==null||l==="")return s;var i=l.replace(/\\/g,"/"),d=i;return(/^[A-Za-z]:\//.test(i)||i.charCodeAt(0)!==47)&&(d="/"+i),s+"&folder="+encodeURIComponent(d)}function Ue(e){var r=e.status,n=e.pageUrl,s=e.reloadTick,l=e.owner,i=a.useRef(null),d=r!=null&&r.ok===!0&&r.running===!0,f=r!=null&&r.status==="starting",p=r!=null&&r.ok===!1,c=r!=null&&r.serve==="dsh";if(a.useLayoutEffect(function(){if(!d||n===null){M(l);return}F({src:n,sameOrigin:c}),i.current!==null&&B(i.current,l)},[d,n,c,s,l]),a.useLayoutEffect(function(){return function(){M(l)}},[l]),d&&n!==null)return a.createElement("div",{ref:i,className:"dshcs-slot","data-code-server-slot":l!=null?l:"code-server"});if(f)return a.createElement("div",{className:"dshcs-loading"},"\u6B63\u5728\u542F\u52A8 code-server\u2026");var u=p&&r!=null&&r.error?r.error:"code-server \u672A\u8FD0\u884C",v=c?"\u5F53\u524D\u4EE5 DSH \u540C\u6E90\u8DEF\u5F84 "+(r!=null&&r.url||"/code-server/")+" \u63D0\u4F9B(\u65E0\u72EC\u7ACB\u7AEF\u53E3)\u3002":"\u5F53\u524D\u4EE5\u72EC\u7ACB\u56DE\u73AF\u7AEF\u53E3\u63D0\u4F9B(\u7AEF\u53E3 "+(r!=null&&r.port!=null?r.port:"8090")+" \u88AB\u5360\u7528\u65F6\u8BF7\u91CA\u653E\u6216\u4FEE\u6539 port \u914D\u7F6E)\u3002",S=A?"\u5E38\u9A7B\u9762:\u53EF\u7528(\u5207\u6807\u7B7E/\u6536\u8D77\u4FA7\u680F\u4E0D\u91CD\u8F7D)\u3002":"\u5E38\u9A7B\u9762:\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 Element.moveBefore \u2014\u2014 \u5207\u6807\u7B7E\u4F1A\u6574\u9875\u91CD\u8F7D(\u5347\u7EA7\u6D4F\u89C8\u5668\u540E\u81EA\u52A8\u53EF\u7528)\u3002";return a.createElement("div",{className:"dshcs-empty"},a.createElement("div",{className:"dshcs-emptybox"},a.createElement("div",null,p?"code-server \u542F\u52A8\u5931\u8D25":"code-server \u672A\u8FD0\u884C"),a.createElement("pre",{className:"dshcs-error"},u),a.createElement("p",{className:"dshcs-hint"},"VS Code \u6811\u968F\u63D2\u4EF6\u5305\u5185\u7F6E\u3001\u5C31\u5730\u8FD0\u884C(\u65E0\u9700\u5168\u5C40\u5B89\u88C5\u3001\u65E0\u9700\u8054\u7F51\u5B89\u88C5\u3001\u65E0\u300C\u5B89\u88C5\u73AF\u5883\u300D\u6B65\u9AA4);\u5185\u90E8\u4F9D\u8D56\u4E0E\u9884\u7F16\u8BD1\u539F\u751F\u6A21\u5757\u7531\u5305\u7BA1\u7406\u5668\u5728\u5B89\u88C5\u63D2\u4EF6\u65F6\u4E00\u5E76\u88C5\u597D(\u65E0\u9700 C++ \u5DE5\u5177\u94FE)\u3002\u82E5\u6B64\u5904\u957F\u671F\u672A\u8FD0\u884C,\u8BF7\u67E5\u770B DSH host \u65E5\u5FD7\u91CC\u7684 [code-server] \u8F93\u51FA(\u6216\u5728\u8BBE\u7F6E\u5361\u7247\u91CC\u5207\u6362\u300C\u540E\u53F0\u5E38\u9A7B\u300D\u89E6\u53D1\u4E00\u6B21\u542F\u52A8)\u3002"+v+S)))}function _e(e){var r=Z(),n=r.status,s=n!=null&&n.ok===!0&&n.running===!0,l=n!=null&&n.keepResident===!0,i=pe(e&&e.useSessions,e&&e.useWorkspaces),d=s?ve(n,i):null;return a.useEffect(function(){!l||!s||d===null||G({src:d,sameOrigin:n!=null&&n.serve==="dsh"})},[l,s,d,n!=null?n.serve:null]),null}var Fe=".dshcs-frame{display:block;position:absolute;inset:0;z-index:1;width:100%;height:100%;border:0;background:var(--dsw-alias-bg-base,#fff)}.dshcs-tabroot{position:relative;display:flex;flex-direction:column;width:100%;height:100%;min-width:0;min-height:0;background:var(--dsw-alias-bg-base,#fff)}.dshcs-slot{position:relative;display:block;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden;background:var(--dsw-alias-bg-base,#fff)}.dshcs-park{position:fixed;left:-20000px;top:0;width:320px;height:200px;overflow:hidden;pointer-events:none;z-index:0;visibility:hidden;contain:strict}.dshcs-loading{position:absolute;inset:0;z-index:2;display:grid;place-items:center;background:var(--dsw-alias-bg-base,#fff);color:var(--dsw-alias-label-tertiary,#7d8798);font-size:13px}.dshcs-empty{position:relative;z-index:2;flex:1;display:flex;align-items:center;justify-content:center;padding:44px 24px 24px}.dshcs-emptybox{max-width:560px;text-align:left;background:var(--dsw-alias-bg-layer-2,#f7f8fb);border:1px solid var(--dsw-alias-border-l2,#dfe3eb);border-radius:12px;padding:16px 18px}.dshcs-error{color:var(--dsw-alias-label-error,#d92d20);white-space:pre-wrap;word-break:break-all;font-family:ui-monospace,Consolas,monospace;font-size:12px;margin:8px 0 0}.dshcs-hint{color:var(--dsw-alias-label-tertiary,#7d8798);font-size:12px;margin:6px 0 0}.dshcs-legacy{color:var(--dsw-alias-label-warning,#b54708);font-size:12px;font-weight:600;margin:0 0 6px}",ie="dsh-code-server/styles";typeof document!="undefined"&&document.querySelector("style[data-dshcs="+JSON.stringify(ie)+"]")===null&&(j=document.createElement("style"),j.setAttribute("data-dshcs",ie),j.textContent=Fe,document.head.appendChild(j));var j,de="code-server",ce="dsh-code-server-app",Be=2500,Ge=1e4,Qe=1500;function We(e){var r=e!=null&&typeof e.size=="number"?e.size:16;return a.createElement("img",{src:He,alt:"","aria-hidden":!0,draggable:!1,className:e!=null?e.className:void 0,style:{width:r,height:r,display:"block",objectFit:"contain",WebkitUserDrag:"none",userSelect:"none"}})}function Ye(){var e=T.status;return e!=null&&e.fileOpenScope==="all"?"all":X}function Ze(e,r){try{var n=e(function(l){return l});if(n!=null&&r!=null&&n.byId!=null){var s=n.byId[r];if(s!=null&&typeof s.cwd=="string"&&s.cwd!=="")return s.cwd}}catch(l){}}function Je(e){var r=e.useTabInfo(),n=r.tab,s=Z(),l=s.status,i=n.navigation,d=i!=null&&typeof i.revision=="number"?i.revision:0,f=i!=null&&typeof i.address=="string"?i.address:"",p=H(f)?null:D(f),c=Ze(e.useSessions,p!=null?p.sessionId:void 0),u=c!==void 0?c:pe(e.useSessions,null),v=$(p,u),S=i!=null&&i.params!=null&&typeof i.params.line=="number"?i.params.line:null,o=a.useRef(void 0),[m,h]=a.useState(0),w=a.useRef(null),N=a.useRef(!1),I=r.tab!=null&&r.tab.visible===!0,O=r.sidebar!=null&&r.sidebar.fullscreen===!0,z=l!=null&&l.fullscreenOnOpen!==!1;return a.useLayoutEffect(function(){if(!I){N.current=!1;return}if(!(!z||O||N.current)){N.current=!0;var x=re(w.current);x!=="clicked"&&console.warn("[code-server] \u672A\u80FD\u81EA\u52A8\u5207\u5230\u5168\u5C4F\u53F3\u4FA7\u680F("+x+");\u672C\u6B21\u6253\u5F00\u4FDD\u6301\u539F\u6A21\u5F0F")}},[I,O,z]),a.useEffect(function(){if(!(typeof u!="string"||u==="")&&o.current!==u){var x=o.current!==void 0;o.current=u;var g=!1;return k("/code-server/start",{cwd:u}).then(function(C){g||(E({status:C}),x&&C!=null&&C.ok===!0&&C.running===!0&&h(function(L){return L+1}))}).catch(function(){}),function(){g=!0}}},[u]),a.useEffect(function(){k("/code-server/status").then(function(g){g!=null&&E({status:g})}).catch(function(){});var x=window.setInterval(function(){k("/code-server/status").then(function(g){E({status:g})}).catch(function(){})},3e3);return function(){window.clearInterval(x)}},[]),a.useEffect(function(){v!==null&&k("/code-server/open-file",S===null?{file:v}:{file:v,line:S}).catch(function(){})},[d,v,S]),a.createElement("div",{className:"dshcs-tabroot","data-code-server-tab":"body",ref:w},a.createElement(Ue,{status:l,pageUrl:ve(l,u),reloadTick:m,owner:"tab:"+n.id}))}function Q(e,r){if(e==null)return null;var n=e[r];if(n!=null)return n;if(typeof e.get=="function"){var s=e.get(r);if(s!=null)return s}return null}function Ve(e){var r=Q(e,"sidebarRightTabs"),n=Q(e,"sidebarRight");if(r==null||n==null)return console.error("[code-server] \u53F3\u4FA7\u680F\u670D\u52A1\u4E0A\u4E0B\u6587\u4E0D\u53EF\u89C1(sidebarRightTabs="+(r!=null)+", sidebarRight="+(n!=null)+"):\u8DF3\u8FC7\u4FA7\u680F\u6CE8\u518C"),!1;var s=Q(e,"slots");if(e.effect(function(){return r.register({id:ce,kind:de,priority:"extension",patterns:["dsh-resource://file/**"],canOpen:function(l){return ee(D(l),Ye())},title:function(l){if(H(l)||l===void 0||l===null||l==="")return"Code Server";var i=K(l);return i===""?"Code Server":i},guide:[{order:20,title:function(){return"Code Server"},description:function(){return"\u5728\u53F3\u4FA7\u680F\u6807\u7B7E\u91CC\u8FD0\u884C VS Code \u7F51\u9875\u7248,\u8DDF\u968F\u5F53\u524D\u4F1A\u8BDD\u5DE5\u4F5C\u533A;\u4EA7\u7269/\u4EA4\u4ED8\u6587\u4EF6\u70B9\u51FB\u540E\u5728\u6B64\u6253\u5F00\u3002"},icon:We}]})},"code-server: sidebar tab type"),s!=null)e.effect(function(){return s.inject("sidebar.right.pane.tab",function(){return s.register({name:"sidebar.right.pane.tab",key:ce},Je)})},"code-server: sidebar tab body");else return console.error("[code-server] slots \u670D\u52A1\u4E0D\u53EF\u89C1:\u4FA7\u680F\u6807\u7B7E body \u672A\u6CE8\u518C"),!1;return e.effect(function(){return function(){E({sidebarUi:"unknown"})}},"code-server: sidebar mode reset"),console.log("[code-server] right-sidebar tab registered (kind="+de+")"),!0}var Xe=".dshcs-card{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;list-style:none;transition:border-color .16s,background .16s}.dshcs-card:hover{border-color:var(--dsw-alias-label-dimmed,var(--dsw-alias-border-l2))}.dshcs-cardOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed,var(--dsw-alias-border-l2))}.dshcs-cardHeader{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:14px 16px;display:flex}.dshcs-cardHeader:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.dshcs-cardHeadText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.dshcs-cardName{color:var(--dsw-alias-label-primary);font-size:15px;font-weight:600;line-height:1.4}.dshcs-cardDescription{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary));font-size:13px;line-height:1.5}.dshcs-cardChevron{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary));flex:none;transition:transform .16s;display:inline-flex}.dshcs-cardChevronOpen{transform:rotate(180deg)}.dshcs-cardBody{border-top:1px solid var(--dsw-alias-border-l2);margin:0 16px;padding-bottom:8px}.dshcs-cardReadOnly{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary));margin:12px 0 0;font-size:12px;line-height:1.5}.dshcs-pending{white-space:nowrap;background:var(--dsw-alias-bg-module-platform,var(--dsw-alias-bg-layer-2));color:var(--dsw-alias-label-secondary);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.dshcs-cardFooter{border-top:1px solid var(--dsw-alias-border-l2);justify-content:flex-end;align-items:center;gap:8px;padding:12px 0 4px;display:flex}.dshcs-cardFailed{min-width:0;color:var(--dsw-alias-label-error,var(--dsw-alias-state-error-primary));flex:1;margin:0;font-size:12px;line-height:1.5}.dshcs-cbtn{appearance:none;font:inherit;cursor:pointer;border-radius:8px;padding:5px 14px;font-size:13px;line-height:1.5;border:1px solid transparent;transition:color .12s ease,background .12s ease}.dshcs-cbtn:disabled{opacity:.4;cursor:default}.dshcs-cbtn:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}.dshcs-cbtnOutline{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}.dshcs-cbtnOutline:hover:not(:disabled){color:var(--dsw-alias-label-primary);background:var(--dsw-alias-interactive-bg-hover,transparent)}.dshcs-cbtnPrimary{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3);border-color:var(--dsw-alias-label-primary);font-weight:600}.dshcs-cbtnPrimary:hover:not(:disabled){filter:brightness(.95)}.dshcs-cbtnPrimary:active:not(:disabled){filter:brightness(.9)}.dshcs-field{flex-direction:column;gap:6px;padding:12px 0;display:flex}.dshcs-field+.dshcs-field{border-top:1px solid var(--dsw-alias-border-l2)}.dshcs-fieldHead{align-items:center;gap:8px;display:flex}.dshcs-fieldLabel{min-width:0;color:var(--dsw-alias-label-primary);flex:1;font-size:13px;font-weight:500;line-height:1.5}.dshcs-card .dshcs-hint{color:var(--dsw-alias-label-tertiary,var(--dsw-alias-label-secondary));margin:0;font-size:12px;line-height:1.5}.dshcs-check{display:flex;align-items:center;gap:8px;cursor:pointer}.dshcs-check input{accent-color:var(--dsw-alias-brand-primary);width:15px;height:15px;margin:0;flex:none}.dshcs-check input:disabled{cursor:default}.dshcs-select{display:inline-flex;align-items:center}.dshcs-select select{font:inherit;color:var(--dsw-alias-label-primary);background:var(--dsw-alias-bg-layer-3,transparent);border:1px solid var(--dsw-alias-border-l2);border-radius:8px;padding:4px 8px;min-width:220px;cursor:pointer}.dshcs-select select:disabled{opacity:.5;cursor:default}.dshcs-badges{align-items:center;gap:8px;display:inline-flex}.dshcs-badge{white-space:nowrap;background:var(--dsw-alias-bg-module-platform,var(--dsw-alias-bg-layer-2));color:var(--dsw-alias-label-secondary);border-radius:999px;padding:1px 8px;font-size:11px;font-weight:500;line-height:17px}.dshcs-reset{font:inherit;color:var(--dsw-alias-label-secondary);cursor:pointer;background:0 0;border:none;padding:0;font-size:12px;line-height:1.5}.dshcs-reset:hover:not(:disabled){color:var(--dsw-alias-label-primary)}.dshcs-reset:disabled{cursor:default}",qe="dsh-code-server/Card.module.css";function Ke(e,r){if(typeof document!="undefined"&&document.querySelector("style[data-plugin-css="+JSON.stringify(e)+"]")===null){var n=document.createElement("style");n.dataset.plugin="dsh-code-server",n.dataset.pluginCss=e,n.textContent=r,document.head.appendChild(n)}}Ke(qe,Xe);function $e(e){return a.createElement("svg",{width:14,height:14,viewBox:"0 0 14 14",fill:"none","aria-hidden":!0,className:e.className},a.createElement("path",{d:"M3.5 5.25L7 8.75L10.5 5.25",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"}))}function oe(e){return a.createElement("button",{type:"button",className:"dshcs-cbtn "+(e.variant==="primary"?"dshcs-cbtnPrimary":"dshcs-cbtnOutline"),disabled:e.disabled===!0,onClick:e.onClick},e.children)}function ue(e){return a.createElement("label",{className:"dshcs-check"},a.createElement("input",{type:"checkbox",checked:e.checked===!0,disabled:e.disabled===!0,onChange:function(r){e.onChange(r.target.checked)}}),a.createElement("span",{className:"dshcs-hint"},e.children))}function er(e){var r=Array.isArray(e.options)?e.options:[];return a.createElement("label",{className:"dshcs-select"},a.createElement("select",{value:e.value,disabled:e.disabled===!0,onChange:function(n){e.onChange(n.target.value)}},r.map(function(n){return a.createElement("option",{key:n.value,value:n.value},n.label)})))}function W(e){var r=[];return e.overridden===!0&&(r.push(a.createElement("span",{className:"dshcs-badge"},e.overriddenLabel)),r.push(a.createElement("button",{type:"button",className:"dshcs-reset",disabled:e.disabled===!0,onClick:e.onReset},e.resetLabel))),r.length===0?null:a.createElement("span",{className:"dshcs-badges"},...r)}function fe(e){var[r,n]=a.useState(e.defaultOpen===!0),s=e.state;if(s==null||s.available!==!0)return null;var l=e.title,i=e.noticeOnly===!0,d=s.dirty!==!0||s.invalid===!0||s.saving===!0;return a.createElement("li",{className:"dshcs-card"+(r?" dshcs-cardOpen":"")},a.createElement("button",{type:"button",className:"dshcs-cardHeader","aria-expanded":r,onClick:function(){n(!r)}},a.createElement("span",{className:"dshcs-cardHeadText"},a.createElement("span",{className:"dshcs-cardName"},l),a.createElement("span",{className:"dshcs-cardDescription"},e.description)),s.dirty===!0?a.createElement("span",{className:"dshcs-pending"},e.unsavedLabel):null,a.createElement($e,{className:"dshcs-cardChevron"+(r?" dshcs-cardChevronOpen":"")})),r===!0?a.createElement("div",{className:"dshcs-cardBody"},i===!0?null:s.writable!==!0?a.createElement("p",{className:"dshcs-cardReadOnly",role:"status"},e.readOnlyLabel):null,e.children,i===!0?null:a.createElement("div",{className:"dshcs-cardFooter"},s.failed===!0?a.createElement("p",{className:"dshcs-cardFailed",role:"status"},e.saveFailedLabel):null,a.createElement(oe,{disabled:s.dirty!==!0||s.saving===!0,onClick:e.onDiscard},e.discardLabel),a.createElement(oe,{variant:"primary",disabled:d,onClick:e.onSave},s.saving===!0?e.savingLabel:e.saveLabel))):null)}function rr(e){try{let g=function(){k("/code-server/status").then(function(b){b!=null&&typeof b=="object"&&E({status:b})}).catch(function(){})};var r=e.scope,[n,s]=a.useState(function(){return r!==void 0?r.getSnapshot():null}),[l,i]=a.useState(null),[d,f]=a.useState(!1),[p,c]=a.useState(!1),u=Z(),[v,S]=a.useState(te());if(a.useEffect(function(){return ne(function(b){S(b)})},[]),a.useEffect(function(){if(r===void 0||typeof r.subscribe!="function")return;function b(){try{s(r.getSnapshot())}catch(ir){}}var y=r.subscribe(b);return function(){typeof y=="function"&&y()}},[r]),r===void 0)return console.error("[code-server] card scope missing"),null;if(n==null||n.status!=="ready")return n!=null&&n.status==="unavailable"&&console.warn("[code-server] settings scope unavailable:",n.status),null;var o=n.value!==void 0&&n.value!==null?n.value:{},m=n.user,h={keepResident:o.keepResident!==!1,fileOpenScope:o.fileOpenScope==="all"?"all":"session",fullscreenOnOpen:o.fullscreenOnOpen!==!1};if(u!=null&&u.sidebarUi==="legacy")return a.createElement(fe,{title:"Code Server",description:"\u5F53\u524D DSH \u7248\u672C\u4E0D\u53D7\u652F\u6301(\u7F3A\u5C11\u53F3\u4FA7\u680F\u670D\u52A1)",defaultOpen:!0,noticeOnly:!0,state:{available:!0,writable:!1,dirty:!1,invalid:!1,saving:!1,failed:!1}},a.createElement("div",{className:"dshcs-field"},a.createElement("div",{className:"dshcs-legacy"},"\u672C\u63D2\u4EF6\u81EA 0.2.3 \u8D77\u4E0D\u518D\u517C\u5BB9\u65E7\u7248 DSH\u3002"),a.createElement("div",{className:"dshcs-hint",style:{marginTop:0}},`\u672A\u68C0\u6D4B\u5230\u53F3\u4FA7\u680F\u63D2\u4EF6\u670D\u52A1 sidebarRightTabs / sidebarRight,\u56E0\u6B64\u63D2\u4EF6\u4E0D\u63D0\u4F9B\u4EFB\u4F55\u5165\u53E3(\u65E7\u7248\u7684\u60AC\u6D6E\u7403\u4E0E\u6D6E\u52A8\u7A97\u53E3\u5DF2\u79FB\u9664),\u4E5F\u4E0D\u4F1A\u540E\u53F0\u542F\u52A8 IDE\u3002
3
+ \u5347\u7EA7 DSH \u5230\u5E26\u53F3\u4FA7\u680F\u7684\u7248\u672C(\u2265 0.1.5-alpha.1)\u540E,Code Server \u4F1A\u51FA\u73B0\u5728\u53F3\u4FA7\u680F\u6807\u7B7E\u91CC,\u672C\u9875\u540C\u65F6\u663E\u793A\u5B8C\u6574\u8BBE\u7F6E\u9879;\u5347\u7EA7\u540E\u65E0\u9700\u91CD\u88C5\u672C\u63D2\u4EF6,\u5237\u65B0\u9875\u9762\u5373\u53EF\u3002`)));var w=m!=null&&Object.prototype.hasOwnProperty.call(m,"keepResident"),N=m!=null&&Object.prototype.hasOwnProperty.call(m,"fileOpenScope"),I=m!=null&&Object.prototype.hasOwnProperty.call(m,"fullscreenOnOpen"),O=l!==null&&(l.keepResident!==h.keepResident||l.fileOpenScope!==h.fileOpenScope||l.fullscreenOnOpen!==h.fullscreenOnOpen),z=!O||d,x={available:!0,writable:n.writable,dirty:O,invalid:!1,saving:d,failed:p};async function C(){if(O&&!d){f(!0),c(!1);try{var b=l!==null?l:h;await e.scope.set("keepResident",b.keepResident===!0),await e.scope.set("fileOpenScope",b.fileOpenScope==="all"?"all":"session"),await e.scope.set("fullscreenOnOpen",b.fullscreenOnOpen===!0),i(null),g()}catch(y){c(!0)}f(!1)}}async function L(){if(!(d||n.writable!==!0)){f(!0),c(!1);try{typeof e.scope.unset=="function"?(await e.scope.unset("keepResident"),await e.scope.unset("fileOpenScope"),await e.scope.unset("fullscreenOnOpen")):(await e.scope.set("keepResident",o.keepResident===void 0||o.keepResident===null?!0:o.keepResident),await e.scope.set("fileOpenScope",o.fileOpenScope==="all"?"all":"session"),await e.scope.set("fullscreenOnOpen",o.fullscreenOnOpen===void 0||o.fullscreenOnOpen===null?!0:o.fullscreenOnOpen)),i(null),g()}catch(b){c(!0)}f(!1)}}return a.createElement(fe,{title:"Code Server",description:"\u5165\u53E3:\u53F3\u4FA7\u680F\u6807\u7B7E(DSH \u2265 0.1.5-alpha.1);\u8BA4\u9886\u8303\u56F4\u51B3\u5B9A\u54EA\u4E9B\u6587\u4EF6\u4EA4\u7ED9 Code Server \u6253\u5F00",state:x,unsavedLabel:"\u672A\u4FDD\u5B58",readOnlyLabel:"\u672C\u90E8\u7F72\u7684\u8BBE\u7F6E\u4E3A\u53EA\u8BFB\u3002",saveFailedLabel:"\u672C\u90E8\u7F72\u6CA1\u6709\u63A5\u53D7\u8FD9\u4E9B\u503C\uFF0C\u5DF2\u4FDD\u7559\u4F9B\u4F60\u4FEE\u6539\u3002",discardLabel:"\u653E\u5F03\u4FEE\u6539",saveLabel:"\u4FDD\u5B58",savingLabel:"\u4FDD\u5B58\u4E2D\u2026",onSave:C,onDiscard:function(){i(null),c(!1)}},a.createElement("div",{className:"dshcs-field"},a.createElement("div",{className:"dshcs-fieldHead"},a.createElement("span",{className:"dshcs-fieldLabel"},"\u8BA4\u9886\u8303\u56F4(\u54EA\u4E9B\u6587\u4EF6\u4EA4\u7ED9 Code Server)"),N===!0?a.createElement(W,{overridden:!0,disabled:n.writable!==!0,overriddenLabel:"\u5DF2\u8986\u76D6",resetLabel:"\u6062\u590D\u9ED8\u8BA4",onReset:function(){L()}}):null),a.createElement(er,{value:l!==null?l.fileOpenScope:h.fileOpenScope,disabled:n.writable!==!0,options:[{value:"session",label:"\u4EC5\u4F1A\u8BDD\u5185\u6587\u4EF6(\u63A8\u8350)"},{value:"all",label:"\u6240\u6709\u6587\u4EF6(\u542B\u5DE5\u4F5C\u533A\u5916\u7684\u7EDD\u5BF9\u8DEF\u5F84)"}],onChange:function(b){i(function(y){return Object.assign({},y!==null?y:h,{fileOpenScope:b==="all"?"all":"session"})}),c(!1)}}),a.createElement("div",{className:"dshcs-hint",style:{marginTop:4}},"\u4F1A\u8BDD\u5185\u6587\u4EF6 = DSH \u7528 `dsh-resource://file/session/\u2026` \u547D\u540D\u7684\u6587\u4EF6(\u4EA7\u7269\u3001\u4EA4\u4ED8\u3001\u6B63\u6587\u63D0\u53CA\u3001\u5DE5\u5177\u89C6\u56FE);\u201C\u6240\u6709\u6587\u4EF6\u201D\u8FD8\u4F1A\u8BA4\u9886\u4E0D\u5E26\u4F1A\u8BDD\u7684\u7EDD\u5BF9\u8DEF\u5F84 `dsh-resource://file/absolute/\u2026`\u3002\u672A\u88AB\u8BA4\u9886\u7684\u5730\u5740\u7531 DSH \u81EA\u5E26\u9884\u89C8\u515C\u5E95\u3002")),a.createElement("div",{className:"dshcs-field"},a.createElement("div",{className:"dshcs-fieldHead"},a.createElement("span",{className:"dshcs-fieldLabel"},"\u6253\u5F00\u5373\u5168\u5C4F(\u53F3\u4FA7\u680F\u94FA\u6EE1\u7A97\u53E3)"),I===!0?a.createElement(W,{overridden:!0,disabled:n.writable!==!0,overriddenLabel:"\u5DF2\u8986\u76D6",resetLabel:"\u6062\u590D\u9ED8\u8BA4",onReset:function(){L()}}):null),a.createElement(ue,{checked:l!==null?l.fullscreenOnOpen:h.fullscreenOnOpen,disabled:n.writable!==!0,onChange:function(b){i(function(y){return Object.assign({},y!==null?y:h,{fullscreenOnOpen:b===!0})}),c(!1)}},'\u6253\u5F00 Code Server \u6807\u7B7E(\u542B\u70B9\u5F00\u4EA7\u7269/\u4EA4\u4ED8\u6587\u4EF6)\u65F6,\u81EA\u52A8\u628A\u53F3\u4FA7\u680F\u4ECE"\u4E0E\u5BF9\u8BDD\u5E76\u6392"\u5207\u5230\u5168\u5C4F;\u60F3\u540C\u65F6\u770B\u5BF9\u8BDD\u5C31\u5173\u6389\u5B83,\u6216\u968F\u65F6\u70B9\u53F3\u4FA7\u680F\u7684\u300C\u9000\u51FA\u5168\u5C4F\u300D\u2014\u2014 \u672C\u6B21\u6253\u5F00\u4E0D\u4F1A\u88AB\u62A2\u56DE\u53BB'),a.createElement("div",{className:"dshcs-hint",style:{marginTop:4}},'\u53EA\u5F71\u54CD"\u6253\u5F00\u90A3\u4E00\u523B":\u5207\u8D70\u518D\u5207\u56DE\u3001\u518D\u6B21\u6253\u5F00\u6587\u4EF6 tab \u4F1A\u91CD\u65B0\u5207\u5168\u5C4F;DSH \u672A\u5411\u63D2\u4EF6\u5F00\u653E\u6A21\u5F0F\u63A5\u53E3,\u672C\u9879\u7531\u70B9\u51FB\u53F3\u4FA7\u680F\u81EA\u8EAB\u7684\u300C\u5168\u5C4F\u300D\u6309\u94AE\u5B9E\u73B0\u3002')),a.createElement("div",{className:"dshcs-field"},a.createElement("div",{className:"dshcs-fieldHead"},a.createElement("span",{className:"dshcs-fieldLabel"},"\u540E\u53F0\u5E38\u9A7B(\u5207\u6807\u7B7E\u4E0D\u91CD\u8F7D)"),w===!0?a.createElement(W,{overridden:!0,disabled:n.writable!==!0,overriddenLabel:"\u5DF2\u8986\u76D6",resetLabel:"\u6062\u590D\u9ED8\u8BA4",onReset:function(){L()}}):null),a.createElement(ue,{checked:l!==null?l.keepResident:h.keepResident,disabled:n.writable!==!0,onChange:function(b){i(function(y){return Object.assign({},y!==null?y:h,{keepResident:b===!0})}),c(!1)}},'\u5F00\u542F\u540E\u5BBF\u4E3B\u542F\u52A8\u5373\u628A IDE \u52A0\u8F7D\u5230\u540E\u53F0"\u505C\u653E\u533A":\u5207\u6362\u53F3\u4FA7\u680F\u6807\u7B7E\u3001\u6536\u8D77/\u5C55\u5F00\u4FA7\u680F\u3001\u62D6\u6210\u6D6E\u52A8\u7A97\u53E3\u90FD\u4E0D\u518D\u91CD\u8F7D,\u9996\u6B21\u6253\u5F00\u514D\u7B49\u5F85;\u5173\u95ED\u5219\u53EA\u5728\u6253\u5F00\u9762\u677F\u65F6\u52A0\u8F7D(\u7701\u5185\u5B58)'),a.createElement("div",{className:"dshcs-hint",style:{marginTop:4}},A?"\u5E38\u9A7B\u9762:"+(v.docked?"\u5DF2\u505C\u9760":v.ready?"\u5DF2\u505C\u653E(\u540E\u53F0\u8FD0\u884C\u4E2D)":"\u672A\u542F\u52A8")+(v.degraded?" \xB7 \u672C\u6B21\u53D1\u751F\u8FC7\u964D\u7EA7\u91CD\u8F7D":""):"\u5F53\u524D\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 Element.moveBefore(Chromium <133)\u2192 \u5E38\u9A7B\u4E0D\u53EF\u7528,\u5207\u6807\u7B7E\u4ECD\u4F1A\u6574\u9875\u91CD\u8F7D(\u5347\u7EA7\u6D4F\u89C8\u5668\u540E\u81EA\u52A8\u751F\u6548)")))}catch(g){return console.error("[code-server] card render error:",g!=null&&g.message!==void 0?g.message:String(g)),null}}function nr(e){try{tr(e)}catch(r){console.error("[code-server] apply failed:",r&&r.stack?r.stack:String(r));try{document.title="CS-ERR "+(r&&r.message||String(r))}catch(n){}}}function tr(e){var r=e.get("slots");if(r===void 0){console.error("[code-server] slots service unavailable");return}var n=e.settingsScope,s=null;if(n!==void 0&&typeof n.bind=="function")s=n.bind({namespace:"code-server"});else{console.error("[code-server] settingsScope unavailable (inject missing?); settings card disabled");return}k("/code-server/status").then(function(o){E({status:o})}).catch(function(){}),r.inject("settings.plugin.item",()=>r.register({name:"settings.plugin.item",key:"code-server",label:"Code Server",inject:function(){return{scope:s}}},rr));var l=!1;function i(o,m){if(!l){l=!0,u();var h=!1;try{h=Ve(o)}catch(w){console.error("[code-server] sidebar tab registration failed:",w!=null&&w.message!=null?w.message:String(w))}T.sidebarUi==="legacy"&&(console.log("[code-server] \u53F3\u4FA7\u680F\u670D\u52A1\u665A\u5230(\u7ECF "+m+"):\u64A4\u9500\u65E7\u7248 DSH \u5224\u5B9A"),k("/code-server/ui-mode",{sidebar:!0}).catch(function(){})),E({sidebarUi:"modern",sidebarRegisterFailed:h!==!0}),r.inject("shell.overlay",()=>r.register({name:"shell.overlay",id:"code-server",order:70,label:"Code Server"},w=>a.createElement(_e,w))),console.log("[code-server] client registered via "+m+": sidebar tab="+h+"(claims dsh-resource://file/**) + resident preload + settings card")}}function d(o){E({sidebarUi:"legacy"}),console.warn("[code-server] \u672A\u63A2\u6D4B\u5230\u53F3\u4FA7\u680F\u670D\u52A1(sidebarRightTabs/sidebarRight): \u672C\u63D2\u4EF6\u81EA 0.2.3 \u8D77\u4E0D\u518D\u517C\u5BB9\u65E7\u7248 DSH \u2014\u2014 \u9664\u300C\u8BBE\u7F6E \u2192 \u63D2\u4EF6 \u2192 Code Server\u300D\u7684\u63D0\u793A\u5916\u4E0D\u63D0\u4F9B\u4EFB\u4F55\u5165\u53E3,\u4E5F\u4E0D\u9884\u70ED IDE\u3002\u8BF7\u5347\u7EA7 DSH\u3002"),o===!0&&k("/code-server/ui-mode",{sidebar:!1}).catch(function(){})}var f=null,p=null,c=null;function u(){f!==null&&(clearTimeout(f),f=null),p!==null&&(clearTimeout(p),p=null),c!==null&&(clearTimeout(c),c=null)}var v=!1;try{typeof e.inject=="function"&&(v=!0,e.inject(["sidebarRightTabs","sidebarRight"],function(o){i(o,"inject")}))}catch(o){console.warn("[code-server] sidebar inject failed:",o!=null&&o.message!=null?o.message:String(o))}var S=typeof e.get=="function"&&e.get("sidebarRightTabs")!==void 0&&e.get("sidebarRight")!==void 0;if(S){c=setTimeout(function(){l||(console.warn("[code-server] ctx.inject \u672A\u5728 1.5s \u5185\u56DE\u8C03,\u6539\u7528\u540C\u6B65\u670D\u52A1\u6CE8\u518C\u4FA7\u680F"),i(e,"sync-fallback"))},Qe);return}if(v!==!0){d(!0);return}f=setTimeout(function(){l||d(!1)},Be),p=setTimeout(function(){l||d(!0)},Ge)}var ar=["slots","settingsScope"],lr="code-server";
4
4
  return module.exports;}});
5
5
 
package/lib/index.js CHANGED
@@ -66,7 +66,7 @@ export const inject = ['connection', 'settings'];
66
66
  /** 设置命名空间:卡片经官方 settings 域读写,持久化到官方 settings 文档。 */
67
67
  export const SETTINGS_NS = 'code-server';
68
68
 
69
- /** 设置卡片 schema(只留两个可改设置:keepResident / fileOpenScope)。
69
+ /** 设置卡片 schema(只留三个可改设置:keepResident / fileOpenScope / fullscreenOnOpen)。
70
70
  * 旧设置文档里残留的 reserveComposer / windowedOpen 不再出现在 schema 里 —— schemastery 的
71
71
  * object 非 strict 会把未知键原样 merge 进解析结果,既不报错也不影响取值,故无需迁移。 */
72
72
  export const Config = z.object({
@@ -83,6 +83,10 @@ export const Config = z.object({
83
83
  * 正文提及、工具视图都走这条);'all' = 连不带会话的 `dsh-resource://file/absolute/…` 也认领。
84
84
  * 未认领的地址由 DSH 自带预览兜底。 */
85
85
  fileOpenScope: z.union([z.const('session'), z.const('all')]).default('session'),
86
+ /** fullscreenOnOpen=true(默认):打开 Code Server 标签(含点开产物/交付文件)时,
87
+ * 客户端把右侧栏切到全屏(铺满窗口);false 则保持 DSH 默认的 push(与对话并排)。
88
+ * 只影响"打开那一刻":之后用户点「退出全屏」不会被抢回去。 */
89
+ fullscreenOnOpen: z.boolean().default(true),
86
90
  });
87
91
 
88
92
  const DEFAULT_CONFIG = {
@@ -377,6 +381,7 @@ export async function apply(ctx, config) {
377
381
  let serveSetting = 'loopback';
378
382
  let keepResident = true; // 客户端常驻预热(0.2.2)
379
383
  let fileOpenScope = 'session'; // 客户端认领的文件地址范围(0.2.5)
384
+ let fullscreenOnOpen = true; // 客户端"打开标签即全屏右侧栏"(0.2.9)
380
385
  if (settingsSvc !== undefined && typeof settingsSvc.register === 'function') {
381
386
  try {
382
387
  const scope = settingsSvc.register(SETTINGS_NS, Config);
@@ -386,6 +391,7 @@ export async function apply(ctx, config) {
386
391
  serveSetting = resolved && resolved.serve === 'dsh' ? 'dsh' : 'loopback';
387
392
  keepResident = resolved && typeof resolved.keepResident === 'boolean' ? resolved.keepResident : true;
388
393
  fileOpenScope = resolved && resolved.fileOpenScope === 'all' ? 'all' : 'session';
394
+ fullscreenOnOpen = resolved && typeof resolved.fullscreenOnOpen === 'boolean' ? resolved.fullscreenOnOpen : true;
389
395
  }
390
396
  scope.watch((next) => {
391
397
  if (next != null && (next.serve === 'dsh' || next.serve === 'loopback')) {
@@ -404,9 +410,15 @@ export async function apply(ctx, config) {
404
410
  console.log(`[code-server] fileOpenScope updated: ${fileOpenScope}`);
405
411
  }
406
412
  }
413
+ if (next != null && typeof next.fullscreenOnOpen === 'boolean') {
414
+ if (next.fullscreenOnOpen !== fullscreenOnOpen) {
415
+ fullscreenOnOpen = next.fullscreenOnOpen;
416
+ console.log(`[code-server] fullscreenOnOpen updated: ${fullscreenOnOpen}`);
417
+ }
418
+ }
407
419
  });
408
420
  } catch (error) {
409
- console.error(`[code-server] settings unavailable; using defaults (keepResident=true, fileOpenScope=session): ${error.message}`);
421
+ console.error(`[code-server] settings unavailable; using defaults (keepResident=true, fileOpenScope=session, fullscreenOnOpen=true): ${error.message}`);
410
422
  }
411
423
  }
412
424
 
@@ -501,6 +513,7 @@ export async function apply(ctx, config) {
501
513
  adopted: state.adopted,
502
514
  keepResident,
503
515
  fileOpenScope, // 客户端据此决定认领哪些文件地址(0.2.5)
516
+ fullscreenOnOpen, // 客户端据此决定"打开标签即全屏右侧栏"(0.2.9)
504
517
  sidebarUi: state.sidebarUi,
505
518
  env: state.env,
506
519
  setup: {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-code-server-app",
3
- "version": "0.2.8",
4
- "description": "VS Code (from a code-server release) inside DSH: a right-sidebar tab driven by the plugin's own launcher over the in-process VS Code server (lib/launcher.mjs). The tab claims DSH file addresses (dsh-resource://file/**), so the product's own produced-file chips, delivered-file previews and inline prose mentions open in the workbench. The IDE is a resident surface moved with Element.moveBefore instead of being remounted, so switching sidebar tabs no longer reloads it. Requires a DSH with the right-sidebar services (sidebarRightTabs/sidebarRight, >= 0.1.5-alpha.1); older DSH versions get a single upgrade notice on the settings page and no other UI. Two serving modes: loopback port (default) or same-origin mount on DSH's own webServer (/code-server, protected by ctx.connection.requestRejection). No code-server Node layer, no argon2, no C++ toolchain.",
3
+ "version": "0.2.10",
4
+ "description": "VS Code (from a code-server release) inside DSH: a right-sidebar tab driven by the plugin's own launcher over the in-process VS Code server (lib/launcher.mjs). The tab claims DSH file addresses (dsh-resource://file/**), so the product's own produced-file chips, delivered-file previews and inline prose mentions open in the workbench. The IDE is a resident surface moved with Element.moveBefore instead of being remounted, so switching sidebar tabs no longer reloads it. Opening the tab switches the right sidebar to fullscreen by default (setting fullscreenOnOpen). Requires a DSH with the right-sidebar services (sidebarRightTabs/sidebarRight, >= 0.1.5-alpha.1); older DSH versions get a single upgrade notice on the settings page and no other UI. Two serving modes: loopback port (default) or same-origin mount on DSH's own webServer (/code-server, protected by ctx.connection.requestRejection). No code-server Node layer, no argon2, no C++ toolchain.",
5
5
  "homepage": "https://github.com/jinsiyu/dsh-code-server-app",
6
6
  "repository": {
7
7
  "type": "git",
@@ -113,6 +113,7 @@
113
113
  "promote": "node scripts/promote.mjs",
114
114
  "build:client": "node scripts/build-client.mjs",
115
115
  "test:apply": "node scripts/test-plugin-apply.mjs",
116
- "test:launcher-routes": "node scripts/test-launcher-routes.mjs"
116
+ "test:launcher-routes": "node scripts/test-launcher-routes.mjs",
117
+ "test:fullscreen": "node scripts/test-sidebar-fullscreen.mjs"
117
118
  }
118
119
  }
@@ -3,7 +3,7 @@
3
3
  "vscodeVersion": "1.136.1",
4
4
  "productPath": "stable-8d5f383f301ca20681f5b6606b8207d9dc87bdd8",
5
5
  "layout": "vscode-only",
6
- "preparedAt": "2026-09-11T10:59:59.005Z",
6
+ "preparedAt": "2026-09-11T12:34:21.276Z",
7
7
  "source": "registry",
8
8
  "node": "v24.13.1",
9
9
  "platform": "win32",