dsh-code-server-app 0.3.22 → 0.3.24

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.
Files changed (41) hide show
  1. package/README.en.md +24 -11
  2. package/README.md +16 -8
  3. package/assets/extensions/dshcs-editor-bridge/extension.js +32 -3
  4. package/assets/extensions/dshcs-editor-bridge/lib/ask-panel.js +18 -4
  5. package/assets/extensions/dshcs-editor-bridge/lib/bridge-client.js +13 -0
  6. package/assets/extensions/dshcs-editor-bridge/package.json +2 -2
  7. package/assets/extensions/dshcs-editor-bridge/webview/THIRD-PARTY.md +2 -2
  8. package/assets/extensions/dshcs-editor-bridge/webview/src/app.jsx +36 -3
  9. package/assets/extensions/dshcs-editor-bridge/webview/src/approval.jsx +28 -20
  10. package/assets/extensions/dshcs-editor-bridge/webview/src/official-tokens.css +573 -7
  11. package/assets/extensions/dshcs-editor-bridge/webview/src/panel.css +108 -11
  12. package/assets/extensions/dshcs-editor-bridge/webview/src/thread.jsx +89 -10
  13. package/assets/extensions/dshcs-editor-bridge/webview/thread.css +1 -1
  14. package/assets/extensions/dshcs-editor-bridge/webview/thread.js +66 -63
  15. package/lib/bridge-approval.mjs +48 -14
  16. package/lib/bridge-session.mjs +40 -0
  17. package/lib/bridge-thread.mjs +80 -24
  18. package/lib/client.js +2 -2
  19. package/lib/index.js +240 -14
  20. package/package.json +2 -2
  21. package/vendor/VENDOR.json +1 -1
  22. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_AMS-Regular-U6PRYMIZ.woff2 +0 -0
  23. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Caligraphic-Bold-5QL5CMTE.woff2 +0 -0
  24. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Caligraphic-Regular-KX5MEWCF.woff2 +0 -0
  25. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Fraktur-Bold-2QVFK6NQ.woff2 +0 -0
  26. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Fraktur-Regular-2PEIFJSJ.woff2 +0 -0
  27. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Main-Bold-YP5VVQRP.woff2 +0 -0
  28. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Main-BoldItalic-N4V3DX7S.woff2 +0 -0
  29. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Main-Italic-RELBIK7M.woff2 +0 -0
  30. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Main-Regular-ARRPAO67.woff2 +0 -0
  31. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Math-BoldItalic-K4WTGH3J.woff2 +0 -0
  32. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Math-Italic-6KGCHLFN.woff2 +0 -0
  33. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_SansSerif-Bold-RRNVJFFW.woff2 +0 -0
  34. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_SansSerif-Italic-HMPFTM52.woff2 +0 -0
  35. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_SansSerif-Regular-XIQ62X4E.woff2 +0 -0
  36. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Script-Regular-APUWIHLP.woff2 +0 -0
  37. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Size1-Regular-5LRUTBFT.woff2 +0 -0
  38. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Size2-Regular-LELKET5D.woff2 +0 -0
  39. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Size3-Regular-WQRQ47UD.woff2 +0 -0
  40. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Size4-Regular-CDMV7U5C.woff2 +0 -0
  41. package/assets/extensions/dshcs-editor-bridge/webview/fonts/KaTeX_Typewriter-Regular-VBYJ4NRC.woff2 +0 -0
@@ -12,10 +12,13 @@
12
12
  *
13
13
  * ## 策略(先面板、后官方;绝不自动放行)
14
14
  * 只对**被面板 watch 的会话**注册监听(`agent.ctx.on('approval/request', …)`,agent 作用域天然只收本会话):
15
- * 1. 生成 pending 记录 → 面板随 `/sync` 的 `approvals` 字段看到卡片(工具名 / 原因 / 参数摘要);
16
- * 2. 等面板决策,最多 `HOLD_MS`(默认 8s):
17
- * - 窗口内作答 → **返回该 outcome**(settle;官方卡片不出现,人在编辑器就地处理);
18
- * - 无人作答 / 面板没开 → `return next()`,**原样交给官方链路**(DSH 界面照旧弹卡);
15
+ * 1. 生成 pending 记录 → 面板随 `/sync` 的 `approvals` 字段看到卡片(工具名 / 原因 / 倒计时);
16
+ * 2. 等面板决策,最多 `HOLD_MS`(**默认 5 分钟** —— 0.3.22 的 8 秒对人不现实:
17
+ * 卡片出现到用户读完、点下去,8 秒早就过了,表现就是"授权框失效"):
18
+ * - 面板作答 → **返回该 outcome**(settle;官方卡片不出现,人在编辑器就地处理);
19
+ * - **面板关掉了**(`hasPanel()` 变 false,每 `WATCH_POLL_MS` 检查一次)→ 立刻 `return next()`,
20
+ * 不干等到窗口结束;
21
+ * - 窗口到点仍没人答 → `return next()`,**原样交给官方链路**(DSH 界面照旧弹卡);
19
22
  * 3. 永不返回自动授权:`allowed-once` 只能来自用户点击。
20
23
  *
21
24
  * ## 安全
@@ -25,8 +28,11 @@
25
28
  * - 不接受任何自由文本 / 路径 / 命令参数 —— 这条路由**只能回答既有的问题**,不能发起动作。
26
29
  */
27
30
 
28
- /** 面板优先的等待窗口(毫秒);超过就交给官方链路。 */
29
- export const DEFAULT_HOLD_MS = 8000;
31
+ /** 面板优先的等待窗口(毫秒)。5 分钟:面板就在用户眼前,时间不该成为失败原因。 */
32
+ export const DEFAULT_HOLD_MS = 300000;
33
+
34
+ /** 等待期间检查"面板还在不在看"的间隔(毫秒):面板一关就立刻交回官方链路,不干等。 */
35
+ export const WATCH_POLL_MS = 500;
30
36
 
31
37
  /** 同时挂起的授权请求上限(超了直接交给官方,避免堆积)。 */
32
38
  export const MAX_PENDING = 4;
@@ -38,11 +44,16 @@ export const PANEL_OUTCOMES = ['allowed-once', 'rejected'];
38
44
  export function createApprovalBoard({ holdMs = DEFAULT_HOLD_MS, maxPending = MAX_PENDING, now = () => Date.now() } = {}) {
39
45
  /** requestId → {id, toolName, callId, reason, at, settle} */
40
46
  const pending = new Map();
47
+ /** 修订号:待决列表每次变化 +1(对话框据此只在变化时拉全量)。 */
48
+ let rev = 0;
41
49
 
42
50
  return {
43
51
  size() {
44
52
  return pending.size;
45
53
  },
54
+ rev() {
55
+ return rev;
56
+ },
46
57
  /** 面板要显示的待决列表(纯 JSON)。 */
47
58
  snapshot() {
48
59
  return [...pending.values()].map((item) => ({
@@ -63,6 +74,7 @@ export function createApprovalBoard({ holdMs = DEFAULT_HOLD_MS, maxPending = MAX
63
74
  let settle;
64
75
  const decision = new Promise((resolve) => { settle = resolve; });
65
76
  pending.set(id, { id, toolName, callId: callId ?? null, reason: reason ?? '', at: now(), settle });
77
+ rev += 1;
66
78
  return decision;
67
79
  },
68
80
  /** 面板作答:只接受白名单值;未知 / 已决 → false。 */
@@ -71,6 +83,7 @@ export function createApprovalBoard({ holdMs = DEFAULT_HOLD_MS, maxPending = MAX
71
83
  if (item === undefined) return false;
72
84
  if (!PANEL_OUTCOMES.includes(outcome)) return false;
73
85
  pending.delete(id);
86
+ rev += 1;
74
87
  item.settle(outcome);
75
88
  return true;
76
89
  },
@@ -79,6 +92,7 @@ export function createApprovalBoard({ holdMs = DEFAULT_HOLD_MS, maxPending = MAX
79
92
  const item = typeof id === 'string' ? pending.get(id) : undefined;
80
93
  if (item === undefined) return false;
81
94
  pending.delete(id);
95
+ rev += 1;
82
96
  item.settle(undefined);
83
97
  return true;
84
98
  },
@@ -96,6 +110,7 @@ export function createApprovalBoard({ holdMs = DEFAULT_HOLD_MS, maxPending = MAX
96
110
  * @param {ReturnType<typeof createApprovalBoard>} deps.board
97
111
  * @param {(message: string) => void} [deps.log]
98
112
  * @param {number} [deps.holdMs]
113
+ * @param {number} [deps.pollMs] 检查"面板还在不在看"的间隔
99
114
  * @param {() => boolean} deps.hasPanel 面板是否在看着(关掉时立刻交给官方,不做无谓等待)
100
115
  * @returns {{intercept: (agent: object, sessionId: string) => () => void}}
101
116
  */
@@ -103,10 +118,35 @@ export function createApprovalInterceptor(deps) {
103
118
  const board = deps.board;
104
119
  const log = deps.log ?? (() => {});
105
120
  const holdMs = deps.holdMs ?? DEFAULT_HOLD_MS;
121
+ const pollMs = deps.pollMs ?? WATCH_POLL_MS;
106
122
  const hasPanel = deps.hasPanel ?? (() => true);
107
123
  /** agent → disposer(每个被 watch 的 agent 一个监听器) */
108
124
  const registered = new Map();
109
125
 
126
+ /** 睡一小段(不占事件循环;unref 掉,别把进程钉住)。 */
127
+ function sleep(ms) {
128
+ return new Promise((resolve) => {
129
+ const timer = setTimeout(resolve, ms);
130
+ if (typeof timer.unref === 'function') timer.unref();
131
+ });
132
+ }
133
+
134
+ /**
135
+ * 等面板决策:面板作答 / 面板关掉 / 窗口到点,三者谁先到算谁。
136
+ * @returns {Promise<string|undefined>} outcome,或 undefined = 交给官方链路
137
+ */
138
+ async function waitForDecision(decision) {
139
+ const deadline = Date.now() + holdMs;
140
+ for (;;) {
141
+ const remaining = deadline - Date.now();
142
+ if (remaining <= 0) return undefined;
143
+ const outcome = await Promise.race([decision, sleep(Math.min(pollMs, remaining))]);
144
+ if (outcome !== undefined) return outcome;
145
+ // 面板关掉了(用户关掉 webview / 换了会话)→ 立刻交回官方链路,不干等窗口结束。
146
+ if (!hasPanel()) return undefined;
147
+ }
148
+ }
149
+
110
150
  async function handle(request, next) {
111
151
  try {
112
152
  // 面板没在看:完全不拦截,保持今天的行为。
@@ -123,20 +163,14 @@ export function createApprovalInterceptor(deps) {
123
163
  // 上限已满 / id 重复:不抢,交给官方。
124
164
  return await next();
125
165
  }
126
- let timer = null;
127
- const timeout = new Promise((resolve) => {
128
- timer = setTimeout(() => resolve(undefined), holdMs);
129
- if (typeof timer.unref === 'function') timer.unref();
130
- });
131
- const outcome = await Promise.race([decision, timeout]);
132
- if (timer !== null) clearTimeout(timer);
166
+ const outcome = await waitForDecision(decision);
133
167
  if (typeof outcome === 'string' && PANEL_OUTCOMES.includes(outcome)) {
134
168
  board.drop(id); // 幂等:answer() 已删过也没关系
135
169
  log(`授权由编辑器面板决定:${request.toolName ?? 'tool'} → ${outcome}`);
136
170
  return outcome;
137
171
  }
138
172
  board.drop(id);
139
- log(`授权 ${request.toolName ?? 'tool'} 面板未作答(${holdMs}ms),交给 DSH 界面`);
173
+ log(`授权 ${request.toolName ?? 'tool'} 面板未作答(面板关闭或超过 ${holdMs}ms),交给 DSH 界面`);
140
174
  return await next();
141
175
  } catch (err) {
142
176
  // 拦截器出问题绝不能把授权变成"放行":退回官方链路(它自己会 fail closed)。
@@ -71,6 +71,46 @@ export function composeEditorPrompt(input) {
71
71
  return parts.join('\n\n');
72
72
  }
73
73
 
74
+ /**
75
+ * 把 `composeEditorPrompt` 拼出来的文本**拆回**"注入的上下文"与"用户原话"(0.3.24)。
76
+ *
77
+ * 为什么需要:注入的上下文(位置行 + 选区代码块)在 DSH 界面里是**折叠**的,面板如果整段平铺,
78
+ * 用户看到的就是一大坨和自己问题无关的代码。解析按位置走(不能按空行切:选区自己常含空行):
79
+ * ① 可选的第一行 `From the editor: <位置>`;
80
+ * ② 可选的紧接着的 ``` 围栏块(语言标记 + 选区正文);
81
+ * ③ 剩下的是用户原话。
82
+ * 认不出来就整段当原话(例如用户在 DSH 界面里自己敲的消息)—— 面板照常渲染成普通气泡。
83
+ *
84
+ * @param {string} text 投递出去的完整文本
85
+ * @returns {{context: string, question: string}} context 为空串 = 不是桥拼出来的消息
86
+ */
87
+ export function splitEditorPrompt(text) {
88
+ const source = typeof text === 'string' ? text : '';
89
+ const lines = source.split('\n');
90
+ const context = [];
91
+ let index = 0;
92
+ if ((lines[0] ?? '').startsWith('From the editor: ')) {
93
+ context.push(lines[0]);
94
+ index = 1;
95
+ if (lines[index] === '') index += 1;
96
+ }
97
+ if ((lines[index] ?? '').startsWith('```')) {
98
+ context.push(lines[index]);
99
+ index += 1;
100
+ // 选区正文照抄到收尾围栏(收尾围栏是**恰好**三个反引号的一行,与 composeEditorPrompt 一致)。
101
+ while (index < lines.length && lines[index] !== '```') {
102
+ context.push(lines[index]);
103
+ index += 1;
104
+ }
105
+ if (index < lines.length) {
106
+ context.push('```');
107
+ index += 1;
108
+ }
109
+ if (lines[index] === '') index += 1;
110
+ }
111
+ return { context: context.join('\n'), question: lines.slice(index).join('\n') };
112
+ }
113
+
74
114
  /**
75
115
  * 选一个投递目标 agent。
76
116
  * @param {object} ctx cordis 上下文
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * lib/bridge-thread.mjs — 把「被面板观看的会话」投影成有界的对话条目流(0.3.22)。
3
3
  *
4
- * 方向:DSH → 编辑器。编辑器里的「问 DSH」面板要像 DSH 对话那样显示内容,数据来自
4
+ * 方向:DSH → 编辑器。编辑器里的「问 DSH」面板/对话框要像 DSH 对话那样显示内容,数据来自
5
5
  * **正规的实时通道** `sessionController.follow()`(冷安全:开帧给 `cursor`,之后是
6
6
  * gap-free 的耐久事件帧 + 无游标的助手流帧)。
7
7
  *
@@ -19,6 +19,8 @@
19
19
  * 有界:每会话 ≤ `MAX_ENTRIES` 条、单条正文 ≤ `MAX_TEXT`、同时 watch ≤ `MAX_WATCHED`(LRU + abort)。
20
20
  */
21
21
 
22
+ import { splitEditorPrompt } from './bridge-session.mjs';
23
+
22
24
  /** 每个会话保留的条目上限(丢最旧的;更早的内容本版本不提供)。 */
23
25
  export const MAX_ENTRIES = 120;
24
26
 
@@ -37,16 +39,28 @@ function clip(text, limit = MAX_TEXT) {
37
39
  return text.length > limit ? `${text.slice(0, limit)}…(已截断)` : text;
38
40
  }
39
41
 
40
- /** 从消息内容块里取正文(text 块拼接;reasoning / tool-call 不进面板)。 */
41
- export function textOfContent(content) {
42
- if (!Array.isArray(content)) return '';
43
- const parts = [];
42
+ /**
43
+ * 从消息内容块里取**正文**与**思考**(0.3.23 起思考也进面板,默认折叠)。
44
+ *
45
+ * DSH 的内容块类型(`packages/llm/llm/src/types.ts`):`{type:'text',text}` 是给用户看的正文,
46
+ * `{type:'reasoning',text}` 是模型的思考过程 —— 面板以前把它整个丢掉,于是"像官方对话"
47
+ * 少了最显眼的那一块(官方的 Think 行默认折叠,点开才展开)。
48
+ */
49
+ export function partsOfContent(content) {
50
+ if (!Array.isArray(content)) return { text: '', thinking: '' };
51
+ const texts = [];
52
+ const thinkings = [];
44
53
  for (const block of content) {
45
- if (block !== null && typeof block === 'object' && block.type === 'text' && typeof block.text === 'string') {
46
- parts.push(block.text);
47
- }
54
+ if (block === null || typeof block !== 'object') continue;
55
+ if (block.type === 'text' && typeof block.text === 'string') texts.push(block.text);
56
+ else if (block.type === 'reasoning' && typeof block.text === 'string') thinkings.push(block.text);
48
57
  }
49
- return clip(parts.join(''));
58
+ return { text: clip(texts.join('')), thinking: clip(thinkings.join('')) };
59
+ }
60
+
61
+ /** 只取正文(旧签名保留;思考不进正文)。 */
62
+ export function textOfContent(content) {
63
+ return partsOfContent(content).text;
50
64
  }
51
65
 
52
66
  /** 工具调用摘要:从原始 JSON 参数里抽一个最有信息量的字段(路径 / 命令首行)。 */
@@ -79,6 +93,8 @@ export function createThreadState(sessionId) {
79
93
  /** 流式条目属于哪一轮;换轮时新建条目。 */
80
94
  streamingTurn: null,
81
95
  error: null,
96
+ /** 修订号:每次有可见变化 +1(对话框据此只在变化时拉全量状态)。 */
97
+ rev: 0,
82
98
  };
83
99
  }
84
100
 
@@ -101,18 +117,32 @@ function push(state, entry) {
101
117
  return state.entries.length - 1;
102
118
  }
103
119
 
104
- /** 助手流帧(SessionAssistantStreamFrame):只取正文 text-delta。 */
120
+ /**
121
+ * 助手流帧(SessionAssistantStreamFrame):正文取 `text-delta`,思考取 `reasoning-delta`。
122
+ *
123
+ * 两者都累积到**同一个**流式条目上(text / thinking 两个字段),所以面板可以在"思考中"
124
+ * 就先显示折叠的思考行,正文到了再往下长 —— 与 DSH 界面的观感一致。
125
+ */
105
126
  export function applyStreamFrame(state, frame) {
106
127
  if (frame === null || typeof frame !== 'object' || frame.type !== 'chunk') return false;
107
128
  const chunk = frame.chunk;
108
- if (chunk === null || typeof chunk !== 'object' || chunk.type !== 'text-delta' || typeof chunk.text !== 'string') return false;
129
+ if (chunk === null || typeof chunk !== 'object' || typeof chunk.text !== 'string') return false;
130
+ const isText = chunk.type === 'text-delta';
131
+ const isThinking = chunk.type === 'reasoning-delta';
132
+ if (!isText && !isThinking) return false;
109
133
  const turn = Number.isSafeInteger(frame.turn) ? frame.turn : null;
134
+ const field = isText ? 'text' : 'thinking';
110
135
  if (state.streamingIndex !== null && state.streamingTurn === turn) {
111
136
  const current = state.entries[state.streamingIndex];
112
- current.text = clip(current.text + chunk.text);
137
+ current[field] = clip((current[field] ?? '') + chunk.text);
113
138
  return true;
114
139
  }
115
- state.streamingIndex = push(state, { role: 'assistant', text: clip(chunk.text), streaming: true });
140
+ state.streamingIndex = push(state, {
141
+ role: 'assistant',
142
+ text: isText ? clip(chunk.text) : '',
143
+ thinking: isThinking ? clip(chunk.text) : '',
144
+ streaming: true,
145
+ });
116
146
  state.streamingTurn = turn;
117
147
  return true;
118
148
  }
@@ -128,30 +158,35 @@ export function applyEvent(state, event) {
128
158
  const data = event.data ?? {};
129
159
 
130
160
  if (event.type === 'user/message') {
131
- const text = textOfContent(data.content);
161
+ const text = partsOfContent(data.content).text;
132
162
  if (text === '') return false;
133
- push(state, { role: 'user', text });
163
+ // 桥自己拼的消息(位置行 + 选区代码块 + 用户原话)拆开:上下文折叠显示,气泡只留原话。
164
+ // 认不出来(用户在 DSH 界面里自己敲的)→ 整段当原话。
165
+ const { context, question } = splitEditorPrompt(text);
166
+ if (context === '') push(state, { role: 'user', text });
167
+ else push(state, { role: 'user', text: question, context });
134
168
  return true;
135
169
  }
136
170
 
137
171
  if (event.type === 'assistant/message') {
138
- const text = textOfContent(data.message?.content);
172
+ const { text, thinking } = partsOfContent(data.message?.content);
139
173
  const streamingIndex = state.streamingIndex;
140
174
  state.streamingIndex = null;
141
175
  state.streamingTurn = null;
142
176
  if (streamingIndex !== null && state.entries[streamingIndex] !== undefined) {
143
177
  // 耐久消息落地:原地替换同一轮的流式临时条目(不重复显示,顺序也不变)。
144
- if (text === '') {
178
+ // 正文与思考都空(例如整轮只有工具调用)→ 撤掉这条临时条目。
179
+ if (text === '' && thinking === '') {
145
180
  state.entries.splice(streamingIndex, 1);
146
181
  rebuildIndex(state);
147
182
  return true;
148
183
  }
149
- state.entries[streamingIndex] = { role: 'assistant', text };
184
+ state.entries[streamingIndex] = { role: 'assistant', text, thinking };
150
185
  rebuildIndex(state);
151
186
  return true;
152
187
  }
153
- if (text === '') return false;
154
- push(state, { role: 'assistant', text });
188
+ if (text === '' && thinking === '') return false;
189
+ push(state, { role: 'assistant', text, thinking });
155
190
  return true;
156
191
  }
157
192
 
@@ -207,6 +242,7 @@ export function applyEvent(state, event) {
207
242
  /**
208
243
  * 收一帧 `follow` 输出。
209
244
  * 开帧(`snapshot`)只取 `cursor` 与助手流基线 —— 历史记录按"只渲染新内容"丢弃。
245
+ * 任何可见变化都让 `rev` +1:对话框靠它判断"要不要拉全量状态"(每 900ms 只问一个数字)。
210
246
  */
211
247
  export function consumeFrame(state, frame) {
212
248
  if (state === null || frame === null || typeof frame !== 'object') return false;
@@ -214,20 +250,28 @@ export function consumeFrame(state, frame) {
214
250
  state.cursor = Number.isSafeInteger(frame.cursor) ? frame.cursor : state.cursor ?? 0;
215
251
  return false; // 不渲染历史
216
252
  }
217
- if (frame.type === 'assistant-stream') return applyStreamFrame(state, frame.frame);
218
- if (frame.type === 'event') return applyEvent(state, frame.event);
253
+ let changed = false;
254
+ if (frame.type === 'assistant-stream') changed = applyStreamFrame(state, frame.frame);
255
+ else if (frame.type === 'event') changed = applyEvent(state, frame.event);
219
256
  // 兼容:调用方直接喂会话事件(测试与降级路径)
220
- if (typeof frame.type === 'string' && frame.data !== undefined) return applyEvent(state, frame);
221
- return false;
257
+ else if (typeof frame.type === 'string' && frame.data !== undefined) changed = applyEvent(state, frame);
258
+ if (changed) state.rev += 1;
259
+ return changed;
222
260
  }
223
261
 
224
262
  /** 给 `/sync` 的快照(纯 JSON)。 */
225
263
  export function threadSnapshot(state) {
226
264
  return {
227
265
  cursor: Number.isSafeInteger(state.cursor) ? state.cursor : null,
266
+ /** 修订号:变了才需要重新拉全量(对话框的轮询靠它省流量)。 */
267
+ rev: Number.isSafeInteger(state.rev) ? state.rev : 0,
228
268
  entries: state.entries.map((entry) => ({
229
269
  role: entry.role,
230
270
  text: entry.text ?? null,
271
+ // 思考过程(0.3.23):面板渲染成官方那样的折叠行,默认收起。
272
+ thinking: entry.thinking ?? null,
273
+ // 注入的上下文(0.3.24):桥自己拼的位置行 + 选区代码块,面板折叠显示(0.3.23 之前是平铺)。
274
+ context: entry.context ?? null,
231
275
  streaming: entry.streaming === true,
232
276
  name: entry.name ?? null,
233
277
  callId: entry.callId ?? null,
@@ -333,6 +377,18 @@ export function createThreadRegistry(deps) {
333
377
  const service = controller();
334
378
  return service !== undefined && typeof service.follow === 'function';
335
379
  },
380
+ /**
381
+ * 被观看会话的修订号(0.3.24):对话框每 900ms 只问这一个数字,变了才拉全量状态。
382
+ * 没 watch 到就返回 0。
383
+ */
384
+ rev(sessionIds) {
385
+ const wanted = Array.isArray(sessionIds) ? sessionIds : [...watched.keys()];
386
+ for (const id of wanted) {
387
+ const entry = watched.get(id);
388
+ if (entry !== undefined) return entry.state.rev;
389
+ }
390
+ return 0;
391
+ },
336
392
  /** 该会话是否在 watch 中(授权拦截据此判断"面板是否在看")。 */
337
393
  isWatched(sessionId) {
338
394
  return watched.has(sessionId);
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 H=Object.defineProperty;var ge=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var xe=Object.prototype.hasOwnProperty;var we=(e,r)=>{for(var n in r)H(e,n,{get:r[n],enumerable:!0})},Ee=(e,r,n,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let l of ye(r))!xe.call(e,l)&&l!==n&&H(e,l,{get:()=>r[l],enumerable:!(t=ge(r,l))||t.enumerable});return e};var ke=e=>Ee(H({},"__esModule",{value:!0}),e);var hr={};we(hr,{apply:()=>ur,inject:()=>pr,name:()=>vr});module.exports=ke(hr);var q="dsh-resource://file/",Se="sidebar://";function F(e){return typeof e=="string"&&e.startsWith(Se)}function D(e){if(typeof e!="string"||!e.startsWith(q))return null;for(var r=e.length,n=0;n<e.length;n+=1){var t=e.charAt(n);if(t==="?"||t==="#"){r=n;break}}var l=e.slice(q.length,r).split("/"),s=l.shift();try{if(s==="session"){var c=l.shift();return c===void 0||c===""||l.length===0?null:{scope:"session",sessionId:decodeURIComponent(c),path:K(l)}}if(s==="absolute"){var u=l[0]===""&&l.length>1,p=u?l.slice(1):l,o=K(p);return(o===""||o.charAt(0)==="/")&&!u?null:u?{scope:"absolute",path:"//"+o}:o===""?null:{scope:"absolute",path:$(o)?o:"/"+o}}}catch(f){return null}return null}function K(e){for(var r=[],n=0;n<e.length;n+=1)r.push(decodeURIComponent(e[n]));return r.join("/")}function $(e){return/^[A-Za-z]:($|\/)/.test(e)}function Ce(e){return typeof e!="string"||e===""?!1:e.charAt(0)==="/"?!0:$(e)}function ee(e){var r=D(e);if(r===null)return"";var n=r.path.replace(/[/\\]+$/,""),t=Math.max(n.lastIndexOf("/"),n.lastIndexOf("\\")),l=t===-1?n:n.slice(t+1);return l}function re(e,r){if(e===null||e==null)return null;var n=typeof e.path=="string"?e.path:"";if(n==="")return null;if(Ce(n))return n;if(typeof r!="string"||r==="")return null;var t=r.indexOf("\\")!==-1?"\\":"/",l=r.replace(/[\\/]+$/,"");return l+t+(t==="\\"?n.replace(/\//g,"\\"):n)}var T="*;!md;!markdown;!html;!htm;!png;!jpg;!jpeg;!gif;!webp;!bmp;!ico;!svg;!pdf",Ne=/[;,\s]+/;function Oe(e){return String(e).replace(/!\s+/g,"!").split(Ne)}function Le(e){var r=typeof e=="string"?e.trim():"";if(r==="")return"";var n=r.charAt(0)==="!",t=n?r.slice(1).trim():r;return t==="*"?n?"!*":"*":(t.slice(0,2)==="*."?t=t.slice(2):t.charAt(0)==="."&&(t=t.slice(1)),t=t.toLowerCase(),t===""?"":n?"!"+t:t)}function C(e){if(typeof e!="string")return"";for(var r=Oe(e),n=[],t=0;t<r.length;t+=1){var l=Le(r[t]);l===""||l==="!*"||n.indexOf(l)===-1&&n.push(l)}return n.join(";")}function P(e){for(var r=C(e),n=r===""?[]:r.split(";"),t=!1,l=[],s=[],c=0;c<n.length;c+=1){var u=n[c];if(u==="*"){t=!0;continue}u.charAt(0)==="!"?s.push(u.slice(1)):l.push(u)}return{all:t,allow:l,deny:s}}function Ae(e){if(typeof e!="string"||e==="")return"";var r=e.replace(/[/\\]+$/,""),n=Math.max(r.lastIndexOf("/"),r.lastIndexOf("\\"));n!==-1&&(r=r.slice(n+1));var t=r.lastIndexOf(".");return t<=0?"":r.slice(t+1).toLowerCase()}function Te(e,r){if(r==null)return!1;var n=Ae(e);return n!==""&&r.deny.indexOf(n)!==-1?!1:n!==""&&r.allow.indexOf(n)!==-1?!0:r.all===!0}function ne(e,r){return e===null||e==null?!1:Te(e.path,r)}function te(e){var r=P(e),n=[];return r.all&&n.push("\u5176\u4F59\u7C7B\u578B\u5168\u90E8\u8BA4\u9886"),r.allow.length>0&&n.push("\u6307\u5B9A\u8BA4\u9886 "+r.allow.length+" \u9879"),r.deny.length>0&&n.push("\u6392\u9664 "+r.deny.length+" \u9879"),n.length===0?"\u4E0D\u8BA4\u9886\u4EFB\u4F55\u6587\u4EF6(\u53EA\u6709\u9875\u9762\u6807\u7B7E)":n.join(" \xB7 ")}var Re="[data-sidebar-right-panel]",Me='[data-sidebar-right-mode="fullscreen"]';function ae(e){if(e==null||typeof e.closest!="function")return"no-root";var r,n;try{if(r=e.closest(Re),r==null||typeof r.querySelector!="function")return"no-panel";n=r.querySelector(Me)}catch(t){return"lookup-failed"}if(n==null||typeof n.click!="function")return"no-control";try{n.click()}catch(t){return"click-failed"}return"clicked"}var R=typeof Element!="undefined"&&typeof Element.prototype.moveBefore=="function",Ie=-2e4,a={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 B(){return{ready:a.frame!==null,docked:a.owner!==null,owner:a.owner,src:a.currentSrc,sameOrigin:a.sameOrigin,parkStrategy:a.parkStrategy,degraded:a.degraded,preloaded:a.preloaded,supportsMoveBefore:R,nudgeCount:a.nudgeCount,lastNudgeAt:a.lastNudgeAt}}function M(){var e=B();a.listeners.forEach(function(r){try{r(e)}catch(n){}})}function le(e){return a.listeners.add(e),function(){a.listeners.delete(e)}}function ie(){return B()}function je(e){e!=="offscreen"&&e!=="behind"||a.parkStrategy!==e&&(a.parkStrategy=e,a.frame!==null&&a.owner===null&&G(),M())}function ze(){return a.parkStrategy}function De(){var e=a.lastRect;e!==null&&(a.park.style.width=Math.max(1,Math.round(e.width))+"px",a.park.style.height=Math.max(1,Math.round(e.height))+"px")}function G(){if(a.park!==null){if(De(),a.parkStrategy==="behind"&&a.lastRect!==null){a.park.style.left=Math.round(a.lastRect.left)+"px",a.park.style.top=Math.round(a.lastRect.top)+"px",a.park.style.visibility="visible",a.park.style.zIndex="0";return}a.park.style.left=Ie+"px",a.park.style.top="0px",a.park.style.visibility="hidden",a.park.style.zIndex="0"}}function se(){a.frame!==null&&(a.frame.setAttribute("inert",""),a.frame.setAttribute("aria-hidden","true"))}function Pe(){a.frame!==null&&(a.frame.removeAttribute("inert"),a.frame.removeAttribute("aria-hidden"))}function Ue(){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),a.park=e,a.frame=r,a.currentSrc="about:blank",a.owner=null,G(),se(),r}function _e(e){var r=a.frame;if(r!==null){var n=a.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"),a.sameOrigin=e)}}function Q(e){var r=e||{};return a.frame===null&&Ue(),typeof r.sameOrigin=="boolean"&&_e(r.sameOrigin),typeof r.src=="string"&&r.src!==""&&r.src!==a.currentSrc&&He(r.src),a.frame}function He(e){a.frame===null||typeof e!="string"||e===""||e===a.currentSrc||(a.currentSrc=e,a.frame.src=e,M())}function ce(){var e=a.frame;if(a.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,a.nudgeCount+=1,a.lastNudgeAt=Date.now(),!0}function Fe(e){return a.nudgeEnabled=e!==!1,a.nudgeEnabled}function oe(e){if(a.frame!==null){if(R)try{e.moveBefore(a.frame,null);return}catch(r){a.degraded=!0,a.lastMoveError=(r&&r.name?r.name+": ":"")+(r&&r.message?r.message:String(r))}else a.degraded=!0;e.appendChild(a.frame)}}function W(e,r){if(!(a.frame===null||e==null)){var n=a.owner===null,t=e.getBoundingClientRect();t.width>=1&&t.height>=1&&(a.lastRect={left:t.left,top:t.top,width:t.width,height:t.height}),a.owner=r===void 0?null:r,Pe(),a.park.setAttribute("aria-hidden","true"),oe(e),n&&ce(),M()}}function I(e){a.frame!==null&&(e!==void 0&&a.owner!==e||(a.owner=null,G(),se(),a.park.setAttribute("aria-hidden","true"),oe(a.park),M()))}function Y(e){var r=e||{};return Q(r),a.owner===null&&(typeof r.src=="string"&&r.src!==""&&(a.preloaded=!0),I()),a.frame}function Be(){a.park!==null&&a.park.parentNode!==null&&a.park.parentNode.removeChild(a.park),a.park=null,a.frame=null,a.currentSrc=null,a.sameOrigin=null,a.owner=null,a.lastRect=null,a.degraded=!1,a.preloaded=!1,a.nudgeCount=0,a.lastNudgeAt=0,M()}typeof window!="undefined"&&(window.__dshcsSurface={snapshot:B,setParkStrategy:je,getParkStrategy:ze,preload:Y,dock:W,park:I,nudge:ce,setNudgeEnabled:Fe,destroy:Be});var i=require("react"),X=new Set,j={status:null,busy:!1,sidebarUi:"unknown",sidebarRegisterFailed:!1};function S(e){j=Object.assign({},j,e),X.forEach(function(r){r()})}function Ge(e){return X.add(e),function(){X.delete(e)}}function Qe(){return j}function V(){return i.useSyncExternalStore(Ge,Qe)}var We="/api",Ye="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 t=await fetch(We+e,n),l=await t.text(),s=null;try{s=l===""?null:JSON.parse(l)}catch(c){s=null}return t.ok?s!==null?s:{ok:!1,error:"invalid JSON response"}:{ok:!1,error:"HTTP "+t.status+(s!==null&&s.error!==void 0?": "+s.error:"")}}function me(e,r){try{var n=e(function(h){return h}),t=r===null?null:typeof r=="function"?r(function(h){return h}):null,l=n!=null?n.current:void 0;if(l!==void 0&&n!=null&&n.byId!=null){var s=n.byId[l];if(s!=null&&typeof s.cwd=="string"&&s.cwd!=="")return s.cwd}var c=t!=null&&Array.isArray(t.items)?t.items:[];if(l!==void 0)for(var u=0;u<c.length;u++){var p=c[u];if(p.sessionIds!=null&&p.sessionIds.indexOf(l)!==-1&&typeof p.path=="string"&&p.path!=="")return p.path}var o=t!=null?t.recentWorkspaceId:void 0;if(o!==void 0){for(var f=0;f<c.length;f++)if(c[f].workspaceId===o&&typeof c[f].path=="string"&&c[f].path!=="")return c[f].path}if(c.length>0&&typeof c[0].path=="string"&&c[0].path!=="")return c[0].path}catch(h){}}function be(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",t=e.url+"?s="+encodeURIComponent(n),l=typeof r=="string"&&r!==""?r:e!=null&&e.cwd!=null?e.cwd:null;if(l==null||l==="")return t;var s=l.replace(/\\/g,"/"),c=s;return(/^[A-Za-z]:\//.test(s)||s.charCodeAt(0)!==47)&&(c="/"+s),t+"&folder="+encodeURIComponent(c)}function Ze(e){var r=e.status,n=e.pageUrl,t=e.reloadTick,l=e.owner,s=i.useRef(null),c=r!=null&&r.ok===!0&&r.running===!0,u=r!=null&&r.status==="starting",p=r!=null&&r.ok===!1,o=r!=null&&r.serve==="dsh";if(i.useLayoutEffect(function(){if(!c||n===null){I(l);return}Q({src:n,sameOrigin:o}),s.current!==null&&W(s.current,l)},[c,n,o,t,l]),i.useLayoutEffect(function(){return function(){I(l)}},[l]),c&&n!==null)return i.createElement("div",{ref:s,className:"dshcs-slot","data-code-server-slot":l!=null?l:"code-server"});if(u)return i.createElement("div",{className:"dshcs-loading"},"\u6B63\u5728\u542F\u52A8 code-server\u2026");var f=p&&r!=null&&r.error?r.error:"code-server \u672A\u8FD0\u884C",h=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:"\u968F\u673A")+" + \u8DEF\u5F84\u4EE4\u724C;\u8981\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00,\u590D\u5236\u8BBE\u7F6E\u5361\u91CC\u7684\u5B8C\u6574\u5730\u5740 \u2014\u2014 \u7F3A\u4E86\u4EE4\u724C\u90A3\u6BB5\u4F1A 404)\u3002",w=R?"\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 i.createElement("div",{className:"dshcs-empty"},i.createElement("div",{className:"dshcs-emptybox"},i.createElement("div",null,p?"code-server \u542F\u52A8\u5931\u8D25":"code-server \u672A\u8FD0\u884C"),i.createElement("pre",{className:"dshcs-error"},f),i.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"+h+w)))}function Je(e){var r=V(),n=r.status,t=n!=null&&n.ok===!0&&n.running===!0,l=n!=null&&n.keepResident===!0,s=me(e&&e.useSessions,e&&e.useWorkspaces),c=t?be(n,s):null;return i.useEffect(function(){!l||!t||c===null||Y({src:c,sameOrigin:n!=null&&n.serve==="dsh"})},[l,t,c,n!=null?n.serve:null]),null}var Xe=".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}",de="dsh-code-server/styles";typeof document!="undefined"&&document.querySelector("style[data-dshcs="+JSON.stringify(de)+"]")===null&&(U=document.createElement("style"),U.setAttribute("data-dshcs",de),U.textContent=Xe,document.head.appendChild(U));var U,ue="code-server",fe="dsh-code-server-app",Ve=2500,qe=1e4,Ke=1500;function $e(e){var r=e!=null&&typeof e.size=="number"?e.size:16;return i.createElement("img",{src:Ye,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"}})}var er=P("");function rr(){var e=j.status;return e==null||typeof e.claimExtensions!="string"?er:P(e.claimExtensions)}function nr(e,r){try{var n=e(function(l){return l});if(n!=null&&r!=null&&n.byId!=null){var t=n.byId[r];if(t!=null&&typeof t.cwd=="string"&&t.cwd!=="")return t.cwd}}catch(l){}}function tr(e){var r=e.useTabInfo(),n=r.tab,t=V(),l=t.status,s=n.navigation,c=s!=null&&typeof s.revision=="number"?s.revision:0,u=s!=null&&typeof s.address=="string"?s.address:"",p=F(u)?null:D(u),o=nr(e.useSessions,p!=null?p.sessionId:void 0),f=o!==void 0?o:me(e.useSessions,null),h=re(p,f),w=s!=null&&s.params!=null&&typeof s.params.line=="number"?s.params.line:null,d=i.useRef(void 0),[g,v]=i.useState(0),x=i.useRef(null),L=i.useRef(!1),z=r.tab!=null&&r.tab.visible===!0,N=r.sidebar!=null&&r.sidebar.fullscreen===!0,_=l!=null&&l.fullscreenOnOpen!==!1;return i.useLayoutEffect(function(){if(!z){L.current=!1;return}if(!(!_||N||L.current)){L.current=!0;var E=ae(x.current);E!=="clicked"&&console.warn("[code-server] \u672A\u80FD\u81EA\u52A8\u5207\u5230\u5168\u5C4F\u53F3\u4FA7\u680F("+E+");\u672C\u6B21\u6253\u5F00\u4FDD\u6301\u539F\u6A21\u5F0F")}},[z,N,_]),i.useEffect(function(){if(!(typeof f!="string"||f==="")&&d.current!==f){var E=d.current!==void 0;d.current=f;var b=!1;return k("/code-server/start",{cwd:f}).then(function(O){b||(S({status:O}),E&&O!=null&&O.ok===!0&&O.running===!0&&v(function(A){return A+1}))}).catch(function(){}),function(){b=!0}}},[f]),i.useEffect(function(){k("/code-server/status").then(function(b){b!=null&&S({status:b})}).catch(function(){});var E=window.setInterval(function(){k("/code-server/status").then(function(b){S({status:b})}).catch(function(){})},3e3);return function(){window.clearInterval(E)}},[]),i.useEffect(function(){h!==null&&k("/code-server/open-file",w===null?{file:h}:{file:h,line:w}).catch(function(){})},[c,h,w]),i.createElement("div",{className:"dshcs-tabroot","data-code-server-tab":"body",ref:x},i.createElement(Ze,{status:l,pageUrl:be(l,f),reloadTick:g,owner:"tab:"+n.id}))}function Z(e,r){if(e==null)return null;var n=e[r];if(n!=null)return n;if(typeof e.get=="function"){var t=e.get(r);if(t!=null)return t}return null}function ar(e){var r=Z(e,"sidebarRightTabs"),n=Z(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 t=Z(e,"slots");if(e.effect(function(){return r.register({id:fe,kind:ue,priority:"extension",patterns:["dsh-resource://file/**"],canOpen:function(l){return ne(D(l),rr())},title:function(l){if(F(l)||l===void 0||l===null||l==="")return"Code Server";var s=ee(l);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"),t!=null)e.effect(function(){return t.inject("sidebar.right.pane.tab",function(){return t.register({name:"sidebar.right.pane.tab",key:fe},tr)})},"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(){S({sidebarUi:"unknown"})}},"code-server: sidebar mode reset"),console.log("[code-server] right-sidebar tab registered (kind="+ue+")"),!0}var lr=".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-text{display:flex}.dshcs-text input{font:12px/1.5 ui-monospace,Consolas,monospace;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:5px 8px;width:100%;min-width:0}.dshcs-text input:disabled{opacity:.5;cursor:default}.dshcs-text input:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-1px}.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}",ir="dsh-code-server/Card.module.css";function sr(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)}}sr(ir,lr);function cr(e){return i.createElement("svg",{width:14,height:14,viewBox:"0 0 14 14",fill:"none","aria-hidden":!0,className:e.className},i.createElement("path",{d:"M3.5 5.25L7 8.75L10.5 5.25",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"}))}function pe(e){return i.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 i.createElement("label",{className:"dshcs-check"},i.createElement("input",{type:"checkbox",checked:e.checked===!0,disabled:e.disabled===!0,onChange:function(r){e.onChange(r.target.checked)}}),i.createElement("span",{className:"dshcs-hint"},e.children))}function or(e){return i.createElement("label",{className:"dshcs-text"},i.createElement("input",{type:"text",value:e.value,disabled:e.disabled===!0,spellCheck:!1,autoComplete:"off",placeholder:e.placeholder,onChange:function(r){e.onChange(r.target.value)}}))}function J(e){var r=[];return e.overridden===!0&&(r.push(i.createElement("span",{className:"dshcs-badge"},e.overriddenLabel)),r.push(i.createElement("button",{type:"button",className:"dshcs-reset",disabled:e.disabled===!0,onClick:e.onReset},e.resetLabel))),r.length===0?null:i.createElement("span",{className:"dshcs-badges"},...r)}function he(e){var[r,n]=i.useState(e.defaultOpen===!0),t=e.state;if(t==null||t.available!==!0)return null;var l=e.title,s=e.noticeOnly===!0,c=t.dirty!==!0||t.invalid===!0||t.saving===!0;return i.createElement("li",{className:"dshcs-card"+(r?" dshcs-cardOpen":"")},i.createElement("button",{type:"button",className:"dshcs-cardHeader","aria-expanded":r,onClick:function(){n(!r)}},i.createElement("span",{className:"dshcs-cardHeadText"},i.createElement("span",{className:"dshcs-cardName"},l),i.createElement("span",{className:"dshcs-cardDescription"},e.description)),t.dirty===!0?i.createElement("span",{className:"dshcs-pending"},e.unsavedLabel):null,i.createElement(cr,{className:"dshcs-cardChevron"+(r?" dshcs-cardChevronOpen":"")})),r===!0?i.createElement("div",{className:"dshcs-cardBody"},s===!0?null:t.writable!==!0?i.createElement("p",{className:"dshcs-cardReadOnly",role:"status"},e.readOnlyLabel):null,e.children,s===!0?null:i.createElement("div",{className:"dshcs-cardFooter"},t.failed===!0?i.createElement("p",{className:"dshcs-cardFailed",role:"status"},e.saveFailedLabel):null,i.createElement(pe,{disabled:t.dirty!==!0||t.saving===!0,onClick:e.onDiscard},e.discardLabel),i.createElement(pe,{variant:"primary",disabled:c,onClick:e.onSave},t.saving===!0?e.savingLabel:e.saveLabel))):null)}function dr(e){try{let b=function(){k("/code-server/status").then(function(m){m!=null&&typeof m=="object"&&S({status:m})}).catch(function(){})};var r=e.scope,[n,t]=i.useState(function(){return r!==void 0?r.getSnapshot():null}),[l,s]=i.useState(null),[c,u]=i.useState(!1),[p,o]=i.useState(!1),f=V(),[h,w]=i.useState(ie());if(i.useEffect(function(){return le(function(m){w(m)})},[]),i.useEffect(function(){if(r===void 0||typeof r.subscribe!="function")return;function m(){try{t(r.getSnapshot())}catch(mr){}}var y=r.subscribe(m);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 d=n.value!==void 0&&n.value!==null?n.value:{},g=n.user,v={keepResident:d.keepResident!==!1,claimExtensions:typeof d.claimExtensions=="string"?d.claimExtensions:T,fullscreenOnOpen:d.fullscreenOnOpen!==!1};if(f!=null&&f.sidebarUi==="legacy")return i.createElement(he,{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}},i.createElement("div",{className:"dshcs-field"},i.createElement("div",{className:"dshcs-legacy"},"\u672C\u63D2\u4EF6\u81EA 0.2.3 \u8D77\u4E0D\u518D\u517C\u5BB9\u65E7\u7248 DSH\u3002"),i.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 x=g!=null&&Object.prototype.hasOwnProperty.call(g,"keepResident"),L=g!=null&&Object.prototype.hasOwnProperty.call(g,"claimExtensions"),z=g!=null&&Object.prototype.hasOwnProperty.call(g,"fullscreenOnOpen"),N=l!==null&&(l.keepResident!==v.keepResident||C(l.claimExtensions)!==C(v.claimExtensions)||l.fullscreenOnOpen!==v.fullscreenOnOpen),_=!N||c,E={available:!0,writable:n.writable,dirty:N,invalid:!1,saving:c,failed:p};async function O(){if(N&&!c){u(!0),o(!1);try{var m=l!==null?l:v;await e.scope.set("keepResident",m.keepResident===!0),await e.scope.set("claimExtensions",C(m.claimExtensions)),await e.scope.set("fullscreenOnOpen",m.fullscreenOnOpen===!0),s(null),b()}catch(y){o(!0)}u(!1)}}async function A(){if(!(c||n.writable!==!0)){u(!0),o(!1);try{typeof e.scope.unset=="function"?(await e.scope.unset("keepResident"),await e.scope.unset("claimExtensions"),await e.scope.unset("fullscreenOnOpen")):(await e.scope.set("keepResident",d.keepResident===void 0||d.keepResident===null?!0:d.keepResident),await e.scope.set("claimExtensions",typeof d.claimExtensions=="string"?C(d.claimExtensions):T),await e.scope.set("fullscreenOnOpen",d.fullscreenOnOpen===void 0||d.fullscreenOnOpen===null?!0:d.fullscreenOnOpen)),s(null),b()}catch(m){o(!0)}u(!1)}}return i.createElement(he,{title:"Code Server",description:"\u5165\u53E3:\u53F3\u4FA7\u680F\u6807\u7B7E(DSH \u2265 0.1.5-alpha.1);\u8BA4\u9886\u7C7B\u578B\u51B3\u5B9A\u54EA\u4E9B\u6587\u4EF6\u4EA4\u7ED9 Code Server \u6253\u5F00",state:E,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:O,onDiscard:function(){s(null),o(!1)}},i.createElement("div",{className:"dshcs-field"},i.createElement("div",{className:"dshcs-fieldHead"},i.createElement("span",{className:"dshcs-fieldLabel"},"\u8BA4\u9886\u7C7B\u578B(\u6309\u6269\u5C55\u540D,\u5206\u53F7\u5206\u9694)"),L===!0?i.createElement(J,{overridden:!0,disabled:n.writable!==!0,overriddenLabel:"\u5DF2\u8986\u76D6",resetLabel:"\u6062\u590D\u9ED8\u8BA4",onReset:function(){A()}}):null),i.createElement(or,{value:l!==null?l.claimExtensions:v.claimExtensions,disabled:n.writable!==!0,placeholder:T,onChange:function(m){s(function(y){return Object.assign({},y!==null?y:v,{claimExtensions:m})}),o(!1)}}),i.createElement("div",{className:"dshcs-hint",style:{marginTop:4}},"\u5199\u6269\u5C55\u540D(\u4E0D\u5E26\u70B9,\u5927\u5C0F\u5199\u968F\u610F);`*` = \u5176\u4F59\u7C7B\u578B\u4E5F\u8BA4\u9886;`!ext` = \u4E0D\u8BA4\u9886(\u6392\u9664\u4F18\u5148)\u3002\u4E0D\u518D\u533A\u5206\u4F1A\u8BDD\u5185/\u7EDD\u5BF9\u8DEF\u5F84 \u2014\u2014 \u6240\u6709 `dsh-resource://file/**` \u4E00\u89C6\u540C\u4EC1,\u672A\u8BA4\u9886\u7684\u843D\u56DE DSH \u81EA\u5E26\u9884\u89C8\u3002"),i.createElement("div",{className:"dshcs-hint",style:{marginTop:2}},"\u5B9E\u9645\u89C4\u5219:"+te(l!==null?l.claimExtensions:v.claimExtensions)+(C(l!==null?l.claimExtensions:v.claimExtensions)!==(l!==null?l.claimExtensions:v.claimExtensions)?"(\u4FDD\u5B58\u540E\u5F52\u4E00\u5316)":"")+" \xB7 \u9ED8\u8BA4 "+T)),i.createElement("div",{className:"dshcs-field"},i.createElement("div",{className:"dshcs-fieldHead"},i.createElement("span",{className:"dshcs-fieldLabel"},"\u6253\u5F00\u5373\u5168\u5C4F(\u53F3\u4FA7\u680F\u94FA\u6EE1\u7A97\u53E3)"),z===!0?i.createElement(J,{overridden:!0,disabled:n.writable!==!0,overriddenLabel:"\u5DF2\u8986\u76D6",resetLabel:"\u6062\u590D\u9ED8\u8BA4",onReset:function(){A()}}):null),i.createElement(ve,{checked:l!==null?l.fullscreenOnOpen:v.fullscreenOnOpen,disabled:n.writable!==!0,onChange:function(m){s(function(y){return Object.assign({},y!==null?y:v,{fullscreenOnOpen:m===!0})}),o(!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'),i.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')),i.createElement("div",{className:"dshcs-field"},i.createElement("div",{className:"dshcs-fieldHead"},i.createElement("span",{className:"dshcs-fieldLabel"},"\u540E\u53F0\u5E38\u9A7B(\u5207\u6807\u7B7E\u4E0D\u91CD\u8F7D)"),x===!0?i.createElement(J,{overridden:!0,disabled:n.writable!==!0,overriddenLabel:"\u5DF2\u8986\u76D6",resetLabel:"\u6062\u590D\u9ED8\u8BA4",onReset:function(){A()}}):null),i.createElement(ve,{checked:l!==null?l.keepResident:v.keepResident,disabled:n.writable!==!0,onChange:function(m){s(function(y){return Object.assign({},y!==null?y:v,{keepResident:m===!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)'),i.createElement("div",{className:"dshcs-hint",style:{marginTop:4}},R?"\u5E38\u9A7B\u9762:"+(h.docked?"\u5DF2\u505C\u9760":h.ready?"\u5DF2\u505C\u653E(\u540E\u53F0\u8FD0\u884C\u4E2D)":"\u672A\u542F\u52A8")+(h.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(b){return console.error("[code-server] card render error:",b!=null&&b.message!==void 0?b.message:String(b)),null}}function ur(e){try{fr(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 fr(e){var r=e.get("slots");if(r===void 0){console.error("[code-server] slots service unavailable");return}var n=e.settingsScope,t=null;if(n!==void 0&&typeof n.bind=="function")t=n.bind({namespace:"code-server"});else{console.error("[code-server] settingsScope unavailable (inject missing?); settings card disabled");return}k("/code-server/status").then(function(d){S({status:d})}).catch(function(){}),r.inject("settings.plugin.item",()=>r.register({name:"settings.plugin.item",key:"code-server",label:"Code Server",inject:function(){return{scope:t}}},dr));var l=!1;function s(d,g){if(!l){l=!0,f();var v=!1;try{v=ar(d)}catch(x){console.error("[code-server] sidebar tab registration failed:",x!=null&&x.message!=null?x.message:String(x))}j.sidebarUi==="legacy"&&(console.log("[code-server] \u53F3\u4FA7\u680F\u670D\u52A1\u665A\u5230(\u7ECF "+g+"):\u64A4\u9500\u65E7\u7248 DSH \u5224\u5B9A"),k("/code-server/ui-mode",{sidebar:!0}).catch(function(){})),S({sidebarUi:"modern",sidebarRegisterFailed:v!==!0}),r.inject("shell.overlay",()=>r.register({name:"shell.overlay",id:"code-server",order:70,label:"Code Server"},x=>i.createElement(Je,x))),console.log("[code-server] client registered via "+g+": sidebar tab="+v+"(claims dsh-resource://file/**) + resident preload + settings card")}}function c(d){S({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"),d===!0&&k("/code-server/ui-mode",{sidebar:!1}).catch(function(){})}var u=null,p=null,o=null;function f(){u!==null&&(clearTimeout(u),u=null),p!==null&&(clearTimeout(p),p=null),o!==null&&(clearTimeout(o),o=null)}var h=!1;try{typeof e.inject=="function"&&(h=!0,e.inject(["sidebarRightTabs","sidebarRight"],function(d){s(d,"inject")}))}catch(d){console.warn("[code-server] sidebar inject failed:",d!=null&&d.message!=null?d.message:String(d))}var w=typeof e.get=="function"&&e.get("sidebarRightTabs")!==void 0&&e.get("sidebarRight")!==void 0;if(w){o=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"),s(e,"sync-fallback"))},Ke);return}if(h!==!0){c(!0);return}u=setTimeout(function(){l||c(!1)},Ve),p=setTimeout(function(){l||c(!0)},qe)}var pr=["slots","settingsScope"],vr="code-server";
2
+ var G=Object.defineProperty;var Ce=Object.getOwnPropertyDescriptor;var Ne=Object.getOwnPropertyNames;var Oe=Object.prototype.hasOwnProperty;var Le=(e,r)=>{for(var t in r)G(e,t,{get:r[t],enumerable:!0})},Te=(e,r,t,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of Ne(r))!Oe.call(e,n)&&n!==t&&G(e,n,{get:()=>r[n],enumerable:!(a=Ce(r,n))||a.enumerable});return e};var Ae=e=>Te(G({},"__esModule",{value:!0}),e);var Cr={};Le(Cr,{apply:()=>wr,inject:()=>Er,name:()=>Sr});module.exports=Ae(Cr);var ee="dsh-resource://file/",Me="sidebar://";function Y(e){return typeof e=="string"&&e.startsWith(Me)}function _(e){if(typeof e!="string"||!e.startsWith(ee))return null;for(var r=e.length,t=0;t<e.length;t+=1){var a=e.charAt(t);if(a==="?"||a==="#"){r=t;break}}var n=e.slice(ee.length,r).split("/"),s=n.shift();try{if(s==="session"){var o=n.shift();return o===void 0||o===""||n.length===0?null:{scope:"session",sessionId:decodeURIComponent(o),path:re(n)}}if(s==="absolute"){var d=n[0]===""&&n.length>1,p=d?n.slice(1):n,u=re(p);return(u===""||u.charAt(0)==="/")&&!d?null:d?{scope:"absolute",path:"//"+u}:u===""?null:{scope:"absolute",path:te(u)?u:"/"+u}}}catch(h){return null}return null}function re(e){for(var r=[],t=0;t<e.length;t+=1)r.push(decodeURIComponent(e[t]));return r.join("/")}function te(e){return/^[A-Za-z]:($|\/)/.test(e)}function Re(e){return typeof e!="string"||e===""?!1:e.charAt(0)==="/"?!0:te(e)}function ne(e){var r=_(e);if(r===null)return"";var t=r.path.replace(/[/\\]+$/,""),a=Math.max(t.lastIndexOf("/"),t.lastIndexOf("\\")),n=a===-1?t:t.slice(a+1);return n}function ae(e,r){if(e===null||e==null)return null;var t=typeof e.path=="string"?e.path:"";if(t==="")return null;if(Re(t))return t;if(typeof r!="string"||r==="")return null;var a=r.indexOf("\\")!==-1?"\\":"/",n=r.replace(/[\\/]+$/,"");return n+a+(a==="\\"?t.replace(/\//g,"\\"):t)}var R="*;!md;!markdown;!html;!htm;!png;!jpg;!jpeg;!gif;!webp;!bmp;!ico;!svg;!pdf",Ie=/[;,\s]+/;function ze(e){return String(e).replace(/!\s+/g,"!").split(Ie)}function je(e){var r=typeof e=="string"?e.trim():"";if(r==="")return"";var t=r.charAt(0)==="!",a=t?r.slice(1).trim():r;return a==="*"?t?"!*":"*":(a.slice(0,2)==="*."?a=a.slice(2):a.charAt(0)==="."&&(a=a.slice(1)),a=a.toLowerCase(),a===""?"":t?"!"+a:a)}function N(e){if(typeof e!="string")return"";for(var r=ze(e),t=[],a=0;a<r.length;a+=1){var n=je(r[a]);n===""||n==="!*"||t.indexOf(n)===-1&&t.push(n)}return t.join(";")}function H(e){for(var r=N(e),t=r===""?[]:r.split(";"),a=!1,n=[],s=[],o=0;o<t.length;o+=1){var d=t[o];if(d==="*"){a=!0;continue}d.charAt(0)==="!"?s.push(d.slice(1)):n.push(d)}return{all:a,allow:n,deny:s}}function De(e){if(typeof e!="string"||e==="")return"";var r=e.replace(/[/\\]+$/,""),t=Math.max(r.lastIndexOf("/"),r.lastIndexOf("\\"));t!==-1&&(r=r.slice(t+1));var a=r.lastIndexOf(".");return a<=0?"":r.slice(a+1).toLowerCase()}function Pe(e,r){if(r==null)return!1;var t=De(e);return t!==""&&r.deny.indexOf(t)!==-1?!1:t!==""&&r.allow.indexOf(t)!==-1?!0:r.all===!0}function le(e,r){return e===null||e==null?!1:Pe(e.path,r)}function ie(e){var r=H(e),t=[];return r.all&&t.push("\u5176\u4F59\u7C7B\u578B\u5168\u90E8\u8BA4\u9886"),r.allow.length>0&&t.push("\u6307\u5B9A\u8BA4\u9886 "+r.allow.length+" \u9879"),r.deny.length>0&&t.push("\u6392\u9664 "+r.deny.length+" \u9879"),t.length===0?"\u4E0D\u8BA4\u9886\u4EFB\u4F55\u6587\u4EF6(\u53EA\u6709\u9875\u9762\u6807\u7B7E)":t.join(" \xB7 ")}var _e="[data-sidebar-right-panel]",He='[data-sidebar-right-mode="fullscreen"]';function se(e){if(e==null||typeof e.closest!="function")return"no-root";var r,t;try{if(r=e.closest(_e),r==null||typeof r.querySelector!="function")return"no-panel";t=r.querySelector(He)}catch(a){return"lookup-failed"}if(t==null||typeof t.click!="function")return"no-control";try{t.click()}catch(a){return"click-failed"}return"clicked"}var I=typeof Element!="undefined"&&typeof Element.prototype.moveBefore=="function",Ue=-2e4,l={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 W(){return{ready:l.frame!==null,docked:l.owner!==null,owner:l.owner,src:l.currentSrc,sameOrigin:l.sameOrigin,parkStrategy:l.parkStrategy,degraded:l.degraded,preloaded:l.preloaded,supportsMoveBefore:I,nudgeCount:l.nudgeCount,lastNudgeAt:l.lastNudgeAt}}function z(){var e=W();l.listeners.forEach(function(r){try{r(e)}catch(t){}})}function oe(e){return l.listeners.add(e),function(){l.listeners.delete(e)}}function de(){return W()}function Fe(e){e!=="offscreen"&&e!=="behind"||l.parkStrategy!==e&&(l.parkStrategy=e,l.frame!==null&&l.owner===null&&Q(),z())}function Be(){return l.parkStrategy}function Ge(){var e=l.lastRect;e!==null&&(l.park.style.width=Math.max(1,Math.round(e.width))+"px",l.park.style.height=Math.max(1,Math.round(e.height))+"px")}function Q(){if(l.park!==null){if(Ge(),l.parkStrategy==="behind"&&l.lastRect!==null){l.park.style.left=Math.round(l.lastRect.left)+"px",l.park.style.top=Math.round(l.lastRect.top)+"px",l.park.style.visibility="visible",l.park.style.zIndex="0";return}l.park.style.left=Ue+"px",l.park.style.top="0px",l.park.style.visibility="hidden",l.park.style.zIndex="0"}}function ce(){l.frame!==null&&(l.frame.setAttribute("inert",""),l.frame.setAttribute("aria-hidden","true"))}function Ye(){l.frame!==null&&(l.frame.removeAttribute("inert"),l.frame.removeAttribute("aria-hidden"))}function We(){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),l.park=e,l.frame=r,l.currentSrc="about:blank",l.owner=null,Q(),ce(),r}function Qe(e){var r=l.frame;if(r!==null){var t=l.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"),l.sameOrigin=e)}}function Z(e){var r=e||{};return l.frame===null&&We(),typeof r.sameOrigin=="boolean"&&Qe(r.sameOrigin),typeof r.src=="string"&&r.src!==""&&r.src!==l.currentSrc&&Ze(r.src),l.frame}function Ze(e){l.frame===null||typeof e!="string"||e===""||e===l.currentSrc||(l.currentSrc=e,l.frame.src=e,z())}function ue(){var e=l.frame;if(l.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,l.nudgeCount+=1,l.lastNudgeAt=Date.now(),!0}function Xe(e){return l.nudgeEnabled=e!==!1,l.nudgeEnabled}function fe(e){if(l.frame!==null){if(I)try{e.moveBefore(l.frame,null);return}catch(r){l.degraded=!0,l.lastMoveError=(r&&r.name?r.name+": ":"")+(r&&r.message?r.message:String(r))}else l.degraded=!0;e.appendChild(l.frame)}}function X(e,r){if(!(l.frame===null||e==null)){var t=l.owner===null,a=e.getBoundingClientRect();a.width>=1&&a.height>=1&&(l.lastRect={left:a.left,top:a.top,width:a.width,height:a.height}),l.owner=r===void 0?null:r,Ye(),l.park.setAttribute("aria-hidden","true"),fe(e),t&&ue(),z()}}function j(e){l.frame!==null&&(e!==void 0&&l.owner!==e||(l.owner=null,Q(),ce(),l.park.setAttribute("aria-hidden","true"),fe(l.park),z()))}function J(e){var r=e||{};return Z(r),l.owner===null&&(typeof r.src=="string"&&r.src!==""&&(l.preloaded=!0),j()),l.frame}function Je(){l.park!==null&&l.park.parentNode!==null&&l.park.parentNode.removeChild(l.park),l.park=null,l.frame=null,l.currentSrc=null,l.sameOrigin=null,l.owner=null,l.lastRect=null,l.degraded=!1,l.preloaded=!1,l.nudgeCount=0,l.lastNudgeAt=0,z()}typeof window!="undefined"&&(window.__dshcsSurface={snapshot:W,setParkStrategy:Fe,getParkStrategy:Be,preload:J,dock:X,park:j,nudge:ue,setNudgeEnabled:Xe,destroy:Je});var i=require("react"),K=new Set,D={status:null,busy:!1,sidebarUi:"unknown",sidebarRegisterFailed:!1};function C(e){D=Object.assign({},D,e),K.forEach(function(r){r()})}function Ve(e){return K.add(e),function(){K.delete(e)}}function qe(){return D}function $(){return i.useSyncExternalStore(Ve,qe)}var Ke="/api",$e="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2aWV3Qm94PSIwIDAgMTQ3IDE0NyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8c3R5bGU+QG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgeyogeyBmaWxsOiB3aGl0ZTsgfX08L3N0eWxlPgogIDxwYXRoIGQ9Im00Mi40MjE0LDM5LjY1NWMtMjQuNDA1NywwIC00Mi4xNTU0LDEzLjE3MjEgLTQyLjE1NTQsMzMuODQ1YzAsMjAuNTgxNCAxOC40ODkyLDMzLjg0NSA0Mi4xNTU0LDMzLjg0NWMyMy42NjYyLDAgMzguMTgwMywtMTEuNjE3MSAzOC43MzQ5LC0yOC43MjI1bC0yMS4wNzc3LC0wLjQ1NzRjLTAuOTI0NCw5LjMzMDMgLTkuMTA1OSwxNS4xODQ1IC0xNy42NTcyLDE1LjE4NDVjLTExLjc0MDYsMCAtMjAuNDMwNiwtNy41OTIyIC0yMC40MzA2LC0xOS44NDk2YzAsLTEyLjI1NzQgOC42OSwtMTkuOTg2OCAyMC40MzA2LC0yMC4yMTU1YzguNTUxMywtMC4xODMgMTYuOTE3Nyw1Ljk0NTcgMTcuNDcyMywxNS4yNzZsMjEuMDc3NywtMC42NDAzYy0wLjQ2MjIsLTE2LjgzMTEgLTE0LjE0NDIsLTI4LjI2NTIgLTM4LjU1LC0yOC4yNjUyem00OC44NDQ2LDJsNTUuNDY4LDBsMCw2NC4wMzExbC01NS40NjgsMGwwLC02NC4wMzExeiIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz4KPC9zdmc+Cg==";async function x(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 a=await fetch(Ke+e,t),n=await a.text(),s=null;try{s=n===""?null:JSON.parse(n)}catch(o){s=null}return a.ok?s!==null?s:{ok:!1,error:"invalid JSON response"}:{ok:!1,error:"HTTP "+a.status+(s!==null&&s.error!==void 0?": "+s.error:"")}}function we(e,r){try{var t=e(function(m){return m}),a=r===null?null:typeof r=="function"?r(function(m){return m}):null,n=t!=null?t.current:void 0;if(n!==void 0&&t!=null&&t.byId!=null){var s=t.byId[n];if(s!=null&&typeof s.cwd=="string"&&s.cwd!=="")return s.cwd}var o=a!=null&&Array.isArray(a.items)?a.items:[];if(n!==void 0)for(var d=0;d<o.length;d++){var p=o[d];if(p.sessionIds!=null&&p.sessionIds.indexOf(n)!==-1&&typeof p.path=="string"&&p.path!=="")return p.path}var u=a!=null?a.recentWorkspaceId:void 0;if(u!==void 0){for(var h=0;h<o.length;h++)if(o[h].workspaceId===u&&typeof o[h].path=="string"&&o[h].path!=="")return o[h].path}if(o.length>0&&typeof o[0].path=="string"&&o[0].path!=="")return o[0].path}catch(m){}}function ke(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",a=e.url+"?s="+encodeURIComponent(t),n=typeof r=="string"&&r!==""?r:e!=null&&e.cwd!=null?e.cwd:null;if(n==null||n==="")return a;var s=n.replace(/\\/g,"/"),o=s;return(/^[A-Za-z]:\//.test(s)||s.charCodeAt(0)!==47)&&(o="/"+s),a+"&folder="+encodeURIComponent(o)}function er(e){var r=e.status,t=e.pageUrl,a=e.reloadTick,n=e.owner,s=i.useRef(null),o=r!=null&&r.ok===!0&&r.running===!0,d=r!=null&&r.status==="starting",p=r!=null&&r.ok===!1,u=r!=null&&r.serve==="dsh";if(i.useLayoutEffect(function(){if(!o||t===null){j(n);return}Z({src:t,sameOrigin:u}),s.current!==null&&X(s.current,n)},[o,t,u,a,n]),i.useLayoutEffect(function(){return function(){j(n)}},[n]),o&&t!==null)return i.createElement("div",{ref:s,className:"dshcs-slot","data-code-server-slot":n!=null?n:"code-server"});if(d)return i.createElement("div",{className:"dshcs-loading"},"\u6B63\u5728\u542F\u52A8 code-server\u2026");var h=p&&r!=null&&r.error?r.error:"code-server \u672A\u8FD0\u884C",m=u?"\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:"\u968F\u673A")+" + \u8DEF\u5F84\u4EE4\u724C;\u8981\u5728\u65B0\u6807\u7B7E\u9875\u6253\u5F00,\u590D\u5236\u8BBE\u7F6E\u5361\u91CC\u7684\u5B8C\u6574\u5730\u5740 \u2014\u2014 \u7F3A\u4E86\u4EE4\u724C\u90A3\u6BB5\u4F1A 404)\u3002",E=I?"\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 i.createElement("div",{className:"dshcs-empty"},i.createElement("div",{className:"dshcs-emptybox"},i.createElement("div",null,p?"code-server \u542F\u52A8\u5931\u8D25":"code-server \u672A\u8FD0\u884C"),i.createElement("pre",{className:"dshcs-error"},h),i.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"+m+E)))}function rr(e){var r=$(),t=r.status,a=t!=null&&t.ok===!0&&t.running===!0,n=t!=null&&t.keepResident===!0,s=we(e&&e.useSessions,e&&e.useWorkspaces),o=a?ke(t,s):null;return i.useEffect(function(){!n||!a||o===null||J({src:o,sameOrigin:t!=null&&t.serve==="dsh"})},[n,a,o,t!=null?t.serve:null]),null}var tr=".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}",pe="dsh-code-server/styles";typeof document!="undefined"&&document.querySelector("style[data-dshcs="+JSON.stringify(pe)+"]")===null&&(U=document.createElement("style"),U.setAttribute("data-dshcs",pe),U.textContent=tr,document.head.appendChild(U));var U,he="code-server",ve="dsh-code-server-app",nr=2500,ar=1e4,lr=1500;function ir(e){var r=e!=null&&typeof e.size=="number"?e.size:16;return i.createElement("img",{src:$e,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"}})}var sr=H("");function or(){var e=D.status;return e==null||typeof e.claimExtensions!="string"?sr:H(e.claimExtensions)}function dr(e,r){try{var t=e(function(n){return n});if(t!=null&&r!=null&&t.byId!=null){var a=t.byId[r];if(a!=null&&typeof a.cwd=="string"&&a.cwd!=="")return a.cwd}}catch(n){}}function cr(e){var r=e.useTabInfo(),t=r.tab,a=$(),n=a.status,s=t.navigation,o=s!=null&&typeof s.revision=="number"?s.revision:0,d=s!=null&&typeof s.address=="string"?s.address:"",p=Y(d)?null:_(d),u=dr(e.useSessions,p!=null?p.sessionId:void 0),h=u!==void 0?u:we(e.useSessions,null),m=ae(p,h),E=s!=null&&s.params!=null&&typeof s.params.line=="number"?s.params.line:null,f=i.useRef(void 0),[y,v]=i.useState(0),k=i.useRef(null),A=i.useRef(!1),P=r.tab!=null&&r.tab.visible===!0,O=r.sidebar!=null&&r.sidebar.fullscreen===!0,B=n!=null&&n.fullscreenOnOpen!==!1;return i.useLayoutEffect(function(){if(!P){A.current=!1;return}if(!(!B||O||A.current)){A.current=!0;var S=se(k.current);S!=="clicked"&&console.warn("[code-server] \u672A\u80FD\u81EA\u52A8\u5207\u5230\u5168\u5C4F\u53F3\u4FA7\u680F("+S+");\u672C\u6B21\u6253\u5F00\u4FDD\u6301\u539F\u6A21\u5F0F")}},[P,O,B]),i.useEffect(function(){if(!(typeof h!="string"||h==="")&&f.current!==h){var S=f.current!==void 0;f.current=h;var g=!1;return x("/code-server/start",{cwd:h}).then(function(L){g||(C({status:L}),S&&L!=null&&L.ok===!0&&L.running===!0&&v(function(M){return M+1}))}).catch(function(){}),function(){g=!0}}},[h]),i.useEffect(function(){x("/code-server/status").then(function(g){g!=null&&C({status:g})}).catch(function(){});var S=window.setInterval(function(){x("/code-server/status").then(function(g){C({status:g})}).catch(function(){})},3e3);return function(){window.clearInterval(S)}},[]),i.useEffect(function(){m!==null&&x("/code-server/open-file",E===null?{file:m}:{file:m,line:E}).catch(function(){})},[o,m,E]),i.createElement("div",{className:"dshcs-tabroot","data-code-server-tab":"body",ref:k},i.createElement(er,{status:n,pageUrl:ke(n,h),reloadTick:y,owner:"tab:"+t.id}))}function V(e,r){if(e==null)return null;var t=e[r];if(t!=null)return t;if(typeof e.get=="function"){var a=e.get(r);if(a!=null)return a}return null}function ur(e){var r=V(e,"sidebarRightTabs"),t=V(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 a=V(e,"slots");if(e.effect(function(){return r.register({id:ve,kind:he,priority:"extension",patterns:["dsh-resource://file/**"],canOpen:function(n){return le(_(n),or())},title:function(n){if(Y(n)||n===void 0||n===null||n==="")return"Code Server";var s=ne(n);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:ir}]})},"code-server: sidebar tab type"),a!=null)e.effect(function(){return a.inject("sidebar.right.pane.tab",function(){return a.register({name:"sidebar.right.pane.tab",key:ve},cr)})},"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="+he+")"),!0}var fr=".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-text{display:flex}.dshcs-text input{font:12px/1.5 ui-monospace,Consolas,monospace;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:5px 8px;width:100%;min-width:0}.dshcs-text input:disabled{opacity:.5;cursor:default}.dshcs-text input:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-1px}.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}",pr="dsh-code-server/Card.module.css";function hr(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)}}hr(pr,fr);function vr(e){return i.createElement("svg",{width:14,height:14,viewBox:"0 0 14 14",fill:"none","aria-hidden":!0,className:e.className},i.createElement("path",{d:"M3.5 5.25L7 8.75L10.5 5.25",stroke:"currentColor",strokeWidth:1.5,strokeLinecap:"round",strokeLinejoin:"round"}))}function me(e){return i.createElement("button",{type:"button",className:"dshcs-cbtn "+(e.variant==="primary"?"dshcs-cbtnPrimary":"dshcs-cbtnOutline"),disabled:e.disabled===!0,onClick:e.onClick},e.children)}function be(e){return i.createElement("label",{className:"dshcs-check"},i.createElement("input",{type:"checkbox",checked:e.checked===!0,disabled:e.disabled===!0,onChange:function(r){e.onChange(r.target.checked)}}),i.createElement("span",{className:"dshcs-hint"},e.children))}function mr(e){return i.createElement("label",{className:"dshcs-text"},i.createElement("input",{type:"text",value:e.value,disabled:e.disabled===!0,spellCheck:!1,autoComplete:"off",placeholder:e.placeholder,onChange:function(r){e.onChange(r.target.value)}}))}function q(e){var r=[];return e.overridden===!0&&(r.push(i.createElement("span",{className:"dshcs-badge"},e.overriddenLabel)),r.push(i.createElement("button",{type:"button",className:"dshcs-reset",disabled:e.disabled===!0,onClick:e.onReset},e.resetLabel))),r.length===0?null:i.createElement("span",{className:"dshcs-badges"},...r)}function ge(e){var[r,t]=i.useState(e.defaultOpen===!0),a=e.state;if(a==null||a.available!==!0)return null;var n=e.title,s=e.noticeOnly===!0,o=a.dirty!==!0||a.invalid===!0||a.saving===!0;return i.createElement("li",{className:"dshcs-card"+(r?" dshcs-cardOpen":"")},i.createElement("button",{type:"button",className:"dshcs-cardHeader","aria-expanded":r,onClick:function(){t(!r)}},i.createElement("span",{className:"dshcs-cardHeadText"},i.createElement("span",{className:"dshcs-cardName"},n),i.createElement("span",{className:"dshcs-cardDescription"},e.description)),a.dirty===!0?i.createElement("span",{className:"dshcs-pending"},e.unsavedLabel):null,i.createElement(vr,{className:"dshcs-cardChevron"+(r?" dshcs-cardChevronOpen":"")})),r===!0?i.createElement("div",{className:"dshcs-cardBody"},s===!0?null:a.writable!==!0?i.createElement("p",{className:"dshcs-cardReadOnly",role:"status"},e.readOnlyLabel):null,e.children,s===!0?null:i.createElement("div",{className:"dshcs-cardFooter"},a.failed===!0?i.createElement("p",{className:"dshcs-cardFailed",role:"status"},e.saveFailedLabel):null,i.createElement(me,{disabled:a.dirty!==!0||a.saving===!0,onClick:e.onDiscard},e.discardLabel),i.createElement(me,{variant:"primary",disabled:o,onClick:e.onSave},a.saving===!0?e.savingLabel:e.saveLabel))):null)}function br(e){try{let g=function(){x("/code-server/status").then(function(b){b!=null&&typeof b=="object"&&C({status:b})}).catch(function(){})};var r=e.scope,[t,a]=i.useState(function(){return r!==void 0?r.getSnapshot():null}),[n,s]=i.useState(null),[o,d]=i.useState(!1),[p,u]=i.useState(!1),h=$(),[m,E]=i.useState(de());if(i.useEffect(function(){return oe(function(b){E(b)})},[]),i.useEffect(function(){if(r===void 0||typeof r.subscribe!="function")return;function b(){try{a(r.getSnapshot())}catch(Nr){}}var w=r.subscribe(b);return function(){typeof w=="function"&&w()}},[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 f=t.value!==void 0&&t.value!==null?t.value:{},y=t.user,v={keepResident:f.keepResident!==!1,claimExtensions:typeof f.claimExtensions=="string"?f.claimExtensions:R,fullscreenOnOpen:f.fullscreenOnOpen!==!1};if(h!=null&&h.sidebarUi==="legacy")return i.createElement(ge,{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}},i.createElement("div",{className:"dshcs-field"},i.createElement("div",{className:"dshcs-legacy"},"\u672C\u63D2\u4EF6\u81EA 0.2.3 \u8D77\u4E0D\u518D\u517C\u5BB9\u65E7\u7248 DSH\u3002"),i.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 k=y!=null&&Object.prototype.hasOwnProperty.call(y,"keepResident"),A=y!=null&&Object.prototype.hasOwnProperty.call(y,"claimExtensions"),P=y!=null&&Object.prototype.hasOwnProperty.call(y,"fullscreenOnOpen"),O=n!==null&&(n.keepResident!==v.keepResident||N(n.claimExtensions)!==N(v.claimExtensions)||n.fullscreenOnOpen!==v.fullscreenOnOpen),B=!O||o,S={available:!0,writable:t.writable,dirty:O,invalid:!1,saving:o,failed:p};async function L(){if(O&&!o){d(!0),u(!1);try{var b=n!==null?n:v;await e.scope.set("keepResident",b.keepResident===!0),await e.scope.set("claimExtensions",N(b.claimExtensions)),await e.scope.set("fullscreenOnOpen",b.fullscreenOnOpen===!0),s(null),g()}catch(w){u(!0)}d(!1)}}async function M(){if(!(o||t.writable!==!0)){d(!0),u(!1);try{typeof e.scope.unset=="function"?(await e.scope.unset("keepResident"),await e.scope.unset("claimExtensions"),await e.scope.unset("fullscreenOnOpen")):(await e.scope.set("keepResident",f.keepResident===void 0||f.keepResident===null?!0:f.keepResident),await e.scope.set("claimExtensions",typeof f.claimExtensions=="string"?N(f.claimExtensions):R),await e.scope.set("fullscreenOnOpen",f.fullscreenOnOpen===void 0||f.fullscreenOnOpen===null?!0:f.fullscreenOnOpen)),s(null),g()}catch(b){u(!0)}d(!1)}}return i.createElement(ge,{title:"Code Server",description:"\u5165\u53E3:\u53F3\u4FA7\u680F\u6807\u7B7E(DSH \u2265 0.1.5-alpha.1);\u8BA4\u9886\u7C7B\u578B\u51B3\u5B9A\u54EA\u4E9B\u6587\u4EF6\u4EA4\u7ED9 Code Server \u6253\u5F00",state:S,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:L,onDiscard:function(){s(null),u(!1)}},i.createElement("div",{className:"dshcs-field"},i.createElement("div",{className:"dshcs-fieldHead"},i.createElement("span",{className:"dshcs-fieldLabel"},"\u8BA4\u9886\u7C7B\u578B(\u6309\u6269\u5C55\u540D,\u5206\u53F7\u5206\u9694)"),A===!0?i.createElement(q,{overridden:!0,disabled:t.writable!==!0,overriddenLabel:"\u5DF2\u8986\u76D6",resetLabel:"\u6062\u590D\u9ED8\u8BA4",onReset:function(){M()}}):null),i.createElement(mr,{value:n!==null?n.claimExtensions:v.claimExtensions,disabled:t.writable!==!0,placeholder:R,onChange:function(b){s(function(w){return Object.assign({},w!==null?w:v,{claimExtensions:b})}),u(!1)}}),i.createElement("div",{className:"dshcs-hint",style:{marginTop:4}},"\u5199\u6269\u5C55\u540D(\u4E0D\u5E26\u70B9,\u5927\u5C0F\u5199\u968F\u610F);`*` = \u5176\u4F59\u7C7B\u578B\u4E5F\u8BA4\u9886;`!ext` = \u4E0D\u8BA4\u9886(\u6392\u9664\u4F18\u5148)\u3002\u4E0D\u518D\u533A\u5206\u4F1A\u8BDD\u5185/\u7EDD\u5BF9\u8DEF\u5F84 \u2014\u2014 \u6240\u6709 `dsh-resource://file/**` \u4E00\u89C6\u540C\u4EC1,\u672A\u8BA4\u9886\u7684\u843D\u56DE DSH \u81EA\u5E26\u9884\u89C8\u3002"),i.createElement("div",{className:"dshcs-hint",style:{marginTop:2}},"\u5B9E\u9645\u89C4\u5219:"+ie(n!==null?n.claimExtensions:v.claimExtensions)+(N(n!==null?n.claimExtensions:v.claimExtensions)!==(n!==null?n.claimExtensions:v.claimExtensions)?"(\u4FDD\u5B58\u540E\u5F52\u4E00\u5316)":"")+" \xB7 \u9ED8\u8BA4 "+R)),i.createElement("div",{className:"dshcs-field"},i.createElement("div",{className:"dshcs-fieldHead"},i.createElement("span",{className:"dshcs-fieldLabel"},"\u6253\u5F00\u5373\u5168\u5C4F(\u53F3\u4FA7\u680F\u94FA\u6EE1\u7A97\u53E3)"),P===!0?i.createElement(q,{overridden:!0,disabled:t.writable!==!0,overriddenLabel:"\u5DF2\u8986\u76D6",resetLabel:"\u6062\u590D\u9ED8\u8BA4",onReset:function(){M()}}):null),i.createElement(be,{checked:n!==null?n.fullscreenOnOpen:v.fullscreenOnOpen,disabled:t.writable!==!0,onChange:function(b){s(function(w){return Object.assign({},w!==null?w:v,{fullscreenOnOpen:b===!0})}),u(!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'),i.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')),i.createElement("div",{className:"dshcs-field"},i.createElement("div",{className:"dshcs-fieldHead"},i.createElement("span",{className:"dshcs-fieldLabel"},"\u540E\u53F0\u5E38\u9A7B(\u5207\u6807\u7B7E\u4E0D\u91CD\u8F7D)"),k===!0?i.createElement(q,{overridden:!0,disabled:t.writable!==!0,overriddenLabel:"\u5DF2\u8986\u76D6",resetLabel:"\u6062\u590D\u9ED8\u8BA4",onReset:function(){M()}}):null),i.createElement(be,{checked:n!==null?n.keepResident:v.keepResident,disabled:t.writable!==!0,onChange:function(b){s(function(w){return Object.assign({},w!==null?w:v,{keepResident:b===!0})}),u(!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)'),i.createElement("div",{className:"dshcs-hint",style:{marginTop:4}},I?"\u5E38\u9A7B\u9762:"+(m.docked?"\u5DF2\u505C\u9760":m.ready?"\u5DF2\u505C\u653E(\u540E\u53F0\u8FD0\u884C\u4E2D)":"\u672A\u542F\u52A8")+(m.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}}var ye=900,c={rev:-1,open:!1,mounted:!1,pending:null,el:null,body:null,title:null,timer:null,loading:!1};function gr(e){if(!(e===null||typeof e!="object")){if(e.type==="ready"){T(!0);return}if(e.type==="ask"&&typeof e.text=="string"){x("/code-server/ask/send",{text:e.text,mode:c.pending===null?void 0:c.pending.mode}).then(function(r){c.rev=-1,T(!0)}).catch(function(){});return}if(e.type==="approve"&&typeof e.id=="string"){x("/code-server/ask/approve",{id:e.id,outcome:e.outcome}).then(function(r){r!=null&&r.ok===!1&&F(r.error||"\u6388\u6743\u63D0\u4EA4\u5931\u8D25"),c.rev=-1,T(!0)}).catch(function(r){F("\u6388\u6743\u63D0\u4EA4\u5931\u8D25:"+String(r&&r.message?r.message:r))});return}e.type==="close"&&Ee()}}function T(e){if(c.el!==null){var r=window.__DSHCS_ASK_PUSH__;typeof r=="function"?r(c.pending):e===!0&&setTimeout(function(){T(!1)},120)}}function F(e){console.warn("[code-server] ask dialog:",e)}function Ee(){c.open=!1,c.el!==null&&(c.el.style.display="none"),x("/code-server/ask/close",{}).catch(function(){})}function Se(){if(c.el===null){var e=document.createElement("div");e.className="dshcs-dialog",e.setAttribute("data-dshcs-dialog","ask"),e.style.cssText=["position:fixed","right:24px","bottom:24px","width:460px","height:600px","min-width:320px","min-height:280px","max-width:96vw","max-height:92vh","resize:both","overflow:hidden","display:none","z-index:2147483000","border-radius:10px","box-shadow:0 18px 48px rgba(0,0,0,.45)","border:1px solid var(--dsw-alias-border-l2, rgba(128,128,128,.4))","background:var(--dsw-alias-bg-base, var(--vscode-editor-background, #1e1e1e))"].join(";");var r=document.createElement("div");r.style.cssText="display:flex;align-items:center;gap:8px;padding:6px 10px;cursor:move;border-bottom:1px solid var(--dsw-alias-border-l1, rgba(128,128,128,.3));font:var(--dsw-font-markdown-base, 13px/20px sans-serif)";var t=document.createElement("span");t.textContent="DSH \u5BF9\u8BDD",t.style.cssText="font-weight:600;flex:none";var a=document.createElement("span");a.style.cssText="flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-tertiary, rgba(128,128,128,.9));font-size:12px";var n=document.createElement("button");n.type="button",n.textContent="\u2715",n.title="\u5173\u95ED",n.setAttribute("aria-label","\u5173\u95ED"),n.style.cssText="flex:none;border:0;background:transparent;color:inherit;cursor:pointer;font-size:13px;line-height:1;padding:2px 6px;border-radius:4px",n.addEventListener("click",function(){Ee()}),r.appendChild(t),r.appendChild(a),r.appendChild(n);var s=document.createElement("div");s.className="dshcs-panel",s.setAttribute("data-dshcs-ask-root",""),s.style.cssText="height:calc(100% - 33px);overflow:hidden",e.appendChild(r),e.appendChild(s),document.body.appendChild(e),c.el=e,c.body=s,c.title=a;var o=null;r.addEventListener("pointerdown",function(d){if(d.target!==n){var p=e.getBoundingClientRect();o={x:d.clientX,y:d.clientY,left:p.left,top:p.top},e.style.right="auto",e.style.bottom="auto",e.style.left=p.left+"px",e.style.top=p.top+"px";try{r.setPointerCapture(d.pointerId)}catch(u){}}}),r.addEventListener("pointermove",function(d){o!==null&&(e.style.left=Math.max(0,Math.min(window.innerWidth-80,o.left+(d.clientX-o.x)))+"px",e.style.top=Math.max(0,Math.min(window.innerHeight-40,o.top+(d.clientY-o.y)))+"px")}),r.addEventListener("pointerup",function(){o=null})}}function yr(){c.mounted||c.loading||(c.loading=!0,x("/code-server/ask/bundle").then(function(e){if(c.loading=!1,e==null||e.ok!==!0){F(e!=null&&e.error?e.error:"\u9762\u677F\u4EA7\u7269\u4E0D\u53EF\u7528");return}if(Se(),document.getElementById("dshcs-ask-style")===null){var r=document.createElement("style");r.id="dshcs-ask-style",r.textContent=e.css,document.head.appendChild(r)}window.__DSHCS_HOST__="dsh",window.__DSHCS_MOUNT__=c.body,window.acquireVsCodeApi=function(){return{postMessage:gr}};var t=document.createElement("script");t.textContent=e.js,document.head.appendChild(t),c.mounted=!0,setTimeout(function(){T(!0)},60)}).catch(function(e){c.loading=!1,F("\u9762\u677F\u4EA7\u7269\u52A0\u8F7D\u5931\u8D25:"+String(e&&e.message?e.message:e))}))}function xe(){x("/code-server/ask/state?rev="+c.rev).then(function(e){e==null||e.ok!==!0||e.changed===!0&&(c.rev=typeof e.rev=="number"?e.rev:-1,c.pending=e,e.open===!0?(Se(),c.el.style.display="block",c.title!==null&&(c.title.textContent=e.contextText||"\u6765\u81EA\u7F16\u8F91\u5668"),c.open=!0,yr(),c.mounted&&T(!0)):c.el!==null&&(c.el.style.display="none",c.open=!1))}).catch(function(){})}function xr(){c.timer===null&&(c.timer=setInterval(xe,ye),setTimeout(xe,1500),console.log("[code-server] ask dialog poller started (every "+ye+"ms)"))}function wr(e){try{kr(e),xr()}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 kr(e){var r=e.get("slots");if(r===void 0){console.error("[code-server] slots service unavailable");return}var t=e.settingsScope,a=null;if(t!==void 0&&typeof t.bind=="function")a=t.bind({namespace:"code-server"});else{console.error("[code-server] settingsScope unavailable (inject missing?); settings card disabled");return}x("/code-server/status").then(function(f){C({status:f})}).catch(function(){}),r.inject("settings.plugin.item",()=>r.register({name:"settings.plugin.item",key:"code-server",label:"Code Server",inject:function(){return{scope:a}}},br));var n=!1;function s(f,y){if(!n){n=!0,h();var v=!1;try{v=ur(f)}catch(k){console.error("[code-server] sidebar tab registration failed:",k!=null&&k.message!=null?k.message:String(k))}D.sidebarUi==="legacy"&&(console.log("[code-server] \u53F3\u4FA7\u680F\u670D\u52A1\u665A\u5230(\u7ECF "+y+"):\u64A4\u9500\u65E7\u7248 DSH \u5224\u5B9A"),x("/code-server/ui-mode",{sidebar:!0}).catch(function(){})),C({sidebarUi:"modern",sidebarRegisterFailed:v!==!0}),r.inject("shell.overlay",()=>r.register({name:"shell.overlay",id:"code-server",order:70,label:"Code Server"},k=>i.createElement(rr,k))),console.log("[code-server] client registered via "+y+": sidebar tab="+v+"(claims dsh-resource://file/**) + resident preload + settings card")}}function o(f){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"),f===!0&&x("/code-server/ui-mode",{sidebar:!1}).catch(function(){})}var d=null,p=null,u=null;function h(){d!==null&&(clearTimeout(d),d=null),p!==null&&(clearTimeout(p),p=null),u!==null&&(clearTimeout(u),u=null)}var m=!1;try{typeof e.inject=="function"&&(m=!0,e.inject(["sidebarRightTabs","sidebarRight"],function(f){s(f,"inject")}))}catch(f){console.warn("[code-server] sidebar inject failed:",f!=null&&f.message!=null?f.message:String(f))}var E=typeof e.get=="function"&&e.get("sidebarRightTabs")!==void 0&&e.get("sidebarRight")!==void 0;if(E){u=setTimeout(function(){n||(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"))},lr);return}if(m!==!0){o(!0);return}d=setTimeout(function(){n||o(!1)},nr),p=setTimeout(function(){n||o(!0)},ar)}var Er=["slots","settingsScope"],Sr="code-server";
4
4
  return module.exports;}});
5
5