dsh-code-server-app 0.3.37 → 0.3.39
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.
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
| react | 18.3.1 | MIT |
|
|
12
12
|
| react-dom | 18.3.1 | MIT |
|
|
13
13
|
|
|
14
|
-
生成时间:2026-09-13T12:
|
|
14
|
+
生成时间:2026-09-13T12:47:28.543Z
|
|
15
15
|
渲染器:@deepseek-ai/dsh-client-ui-primitives@0.1.5-rc.2(DSH 部署的界面版本:0.1.5-rc.2)
|
|
16
16
|
设计令牌:@deepseek-ai/dsh-client-ui-theme@0.1.5-rc.2(11 段)
|
|
17
17
|
KaTeX:已打包(公式排版与 DSH 界面一致)
|
package/lib/bridge-approval.mjs
CHANGED
|
@@ -120,6 +120,9 @@ export function createApprovalInterceptor(deps) {
|
|
|
120
120
|
const holdMs = deps.holdMs ?? DEFAULT_HOLD_MS;
|
|
121
121
|
const pollMs = deps.pollMs ?? WATCH_POLL_MS;
|
|
122
122
|
const hasPanel = deps.hasPanel ?? (() => true);
|
|
123
|
+
/** 本地生成的请求 id 序号(审批事件本身没有 id;见 handle 里的注释)。 */
|
|
124
|
+
let localSeq = 0;
|
|
125
|
+
|
|
123
126
|
/** agent → disposer(每个被 watch 的 agent 一个监听器) */
|
|
124
127
|
const registered = new Map();
|
|
125
128
|
|
|
@@ -160,10 +163,19 @@ export function createApprovalInterceptor(deps) {
|
|
|
160
163
|
|
|
161
164
|
async function handle(request, next) {
|
|
162
165
|
try {
|
|
166
|
+
log('收到授权请求:' + String(request && request.toolName) + ' id=' + String(request && request.id) + ' hasPanel=' + hasPanel());
|
|
163
167
|
// 面板没在看:完全不拦截,保持今天的行为。
|
|
164
|
-
if (!hasPanel())
|
|
165
|
-
|
|
166
|
-
|
|
168
|
+
if (!hasPanel()) {
|
|
169
|
+
log('没人看会话(hasPanel=false):不拦截,直接交给官方链路');
|
|
170
|
+
return await next();
|
|
171
|
+
}
|
|
172
|
+
// **审批事件没有 `id` 字段**(0.3.39 的实测:日志里 `收到授权请求:pwsh id=undefined`)。
|
|
173
|
+
// 事件形状是 `{agent, toolName, callId?, reason?, signal?}` —— 我们原来要求 id 是字符串,
|
|
174
|
+
// 否则**静默 next()** 交回官方卡片:这就是"面板里的卡片从来不出现"的最后一块拼图。
|
|
175
|
+
// id 只是我们自己用来把"面板上的那张卡"和"这次请求"对上号,所以本地生成即可;
|
|
176
|
+
// `board.answer(id, outcome)` 结算的是我们自己的 decision promise,DSH 侧不需要知道它。
|
|
177
|
+
const hasId = typeof request?.id === 'string' && request.id !== '';
|
|
178
|
+
const id = hasId ? request.id : 'local-' + String(++localSeq);
|
|
167
179
|
const decision = board.open({
|
|
168
180
|
id,
|
|
169
181
|
toolName: typeof request.toolName === 'string' ? request.toolName : 'tool',
|
|
@@ -175,6 +187,7 @@ export function createApprovalInterceptor(deps) {
|
|
|
175
187
|
return await next();
|
|
176
188
|
}
|
|
177
189
|
const outcome = await waitForDecision(decision);
|
|
190
|
+
log('decision -> ' + JSON.stringify(outcome === undefined ? null : outcome) + ' (typeof=' + typeof outcome + ')');
|
|
178
191
|
if (typeof outcome === 'string' && PANEL_OUTCOMES.includes(outcome)) {
|
|
179
192
|
board.drop(id); // 幂等:answer() 已删过也没关系
|
|
180
193
|
log(`授权由编辑器面板决定:${request.toolName ?? 'tool'} → ${outcome}`);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-code-server-app",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.39",
|
|
4
4
|
"description": "VS Code (from a code-server release) inside DSH: a right-sidebar tab driven by the plugin's own launcher over the in-process VS Code server (lib/launcher.mjs). Since 0.3.0 the bundle also ships an editor bridge (assets/extensions/dshcs-editor-bridge): a read-only channel between the in-tree VS Code extension host and DSH, giving the agent what only the editor knows (unsaved buffers, language-server diagnostics, the active selection) and letting editor gestures drive the session. Since 0.3.22 the ask panel renders that session's new content with DSH's own Markdown renderer (pinned to the deployed DSH UI version); since 0.3.23 it is a full-width dialog with collapsible thinking rows and can answer approval requests in place — the bridge's only non-read-only route (POST /approve, constrained to pending in-process requests and the outcomes allowed-once/rejected; panel-first for 5 minutes, handed back to the official card the moment the panel closes). The tab claims DSH file addresses (dsh-resource://file/**) by file type (setting claimExtensions), so the product's own produced-file chips, delivered-file previews and inline prose mentions open in the workbench. The IDE is a resident surface moved with Element.moveBefore instead of being remounted, so switching sidebar tabs no longer reloads it. Opening the tab switches the right sidebar to fullscreen by default (setting fullscreenOnOpen). Following a workspace switch is lightweight: the workbench re-navigates with the new ?folder= and the IDE process is not restarted (since 0.2.12). Requires a DSH with the right-sidebar services (sidebarRightTabs/sidebarRight, >= 0.1.5-alpha.1); older DSH versions get a single upgrade notice on the settings page and no other UI. Two serving modes: loopback port (default) or same-origin mount on DSH's own webServer (/code-server, protected by ctx.connection.requestRejection). No code-server Node layer, no argon2, no C++ toolchain.",
|
|
5
5
|
"homepage": "https://github.com/jinsiyu/dsh-code-server-app",
|
|
6
6
|
"repository": {
|
package/vendor/VENDOR.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"vscodeVersion": "1.137.0",
|
|
4
4
|
"productPath": "stable-b11dabdaca0d3369986975be285db92c8795cea5",
|
|
5
5
|
"layout": "vscode-only",
|
|
6
|
-
"preparedAt": "2026-09-13T12:
|
|
6
|
+
"preparedAt": "2026-09-13T12:47:27.183Z",
|
|
7
7
|
"source": "registry",
|
|
8
8
|
"node": "v24.21.0",
|
|
9
9
|
"platform": "win32",
|