dsh-vscode-mode 0.1.26 → 0.1.28
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/client.js +62 -30
- package/lib/client.js.map +1 -1
- package/package.json +1 -1
- package/src/client/compat.ts +6 -3
- package/src/client/index.ts +52 -20
package/lib/client.js
CHANGED
|
@@ -3409,17 +3409,20 @@ window.__ModuleLoader__.load({
|
|
|
3409
3409
|
* @param ctx 客户端上下文(slots 服务)
|
|
3410
3410
|
* @param spec slot 描述
|
|
3411
3411
|
* @param render 渲染函数
|
|
3412
|
+
* @returns 注销函数(未注册返回 null;形态切换时用于卸载旧 slot)
|
|
3412
3413
|
*/
|
|
3413
3414
|
function registerSlotSafely(ctx, spec, render) {
|
|
3414
3415
|
const slots = ctx?.slots;
|
|
3415
3416
|
if (!slots || typeof slots.inject !== "function" || typeof slots.register !== "function") {
|
|
3416
3417
|
console.warn("[dsh-vscode-mode] slots 服务不可用,跳过 slot " + spec.name);
|
|
3417
|
-
return;
|
|
3418
|
+
return null;
|
|
3418
3419
|
}
|
|
3419
3420
|
try {
|
|
3420
|
-
slots.inject(spec.name, () => slots.register(spec, render));
|
|
3421
|
+
const disposer = slots.inject(spec.name, () => slots.register(spec, render));
|
|
3422
|
+
return typeof disposer === "function" ? disposer : null;
|
|
3421
3423
|
} catch (error) {
|
|
3422
3424
|
console.warn("[dsh-vscode-mode] slot " + spec.name + " 注册失败(" + String(error) + "),已跳过");
|
|
3425
|
+
return null;
|
|
3423
3426
|
}
|
|
3424
3427
|
}
|
|
3425
3428
|
/**
|
|
@@ -5598,8 +5601,7 @@ window.__ModuleLoader__.load({
|
|
|
5598
5601
|
"workspaces",
|
|
5599
5602
|
"sessions",
|
|
5600
5603
|
"conversation",
|
|
5601
|
-
"settingsScope"
|
|
5602
|
-
"webUiSettings"
|
|
5604
|
+
"settingsScope"
|
|
5603
5605
|
];
|
|
5604
5606
|
/**
|
|
5605
5607
|
* 装配客户端:注册中央编辑区视图与 header 差异角标。
|
|
@@ -5631,7 +5633,7 @@ window.__ModuleLoader__.load({
|
|
|
5631
5633
|
const settings = binder.scope;
|
|
5632
5634
|
let selected = autoValue("auto");
|
|
5633
5635
|
/** 可选探测 betterSidebar 服务(不进 inject:缺失会让插件停靠等待,杀死回退路径)。 */
|
|
5634
|
-
|
|
5636
|
+
let sideService = detectSidebarService(ctx);
|
|
5635
5637
|
/** 「添加到对话」动作集:编辑区/Tab 右键菜单注入文件引用与代码块(conversation 服务缺失时各动作安全降级)。 */
|
|
5636
5638
|
const addToConversation = createAddToConversation(ctx);
|
|
5637
5639
|
/** 客户端侧兼容摘要(与 host 报告合并展示;惰性求值保证 HMR 后仍新鲜)。 */
|
|
@@ -5705,7 +5707,7 @@ window.__ModuleLoader__.load({
|
|
|
5705
5707
|
logger: (message) => console.warn("[dsh-vscode-mode] " + message)
|
|
5706
5708
|
}), "vscode-mode: file link routing");
|
|
5707
5709
|
const registerLegacyTab = () => {
|
|
5708
|
-
registerSlotSafely(ctx, {
|
|
5710
|
+
return registerSlotSafely(ctx, {
|
|
5709
5711
|
name: "conversation.view",
|
|
5710
5712
|
id: "edrv-editor",
|
|
5711
5713
|
order: 5,
|
|
@@ -5721,30 +5723,60 @@ window.__ModuleLoader__.load({
|
|
|
5721
5723
|
fileMenuItems
|
|
5722
5724
|
})));
|
|
5723
5725
|
};
|
|
5724
|
-
|
|
5725
|
-
|
|
5726
|
-
|
|
5727
|
-
|
|
5728
|
-
|
|
5729
|
-
|
|
5730
|
-
|
|
5731
|
-
|
|
5732
|
-
|
|
5733
|
-
|
|
5734
|
-
|
|
5735
|
-
|
|
5736
|
-
|
|
5737
|
-
|
|
5738
|
-
|
|
5739
|
-
|
|
5740
|
-
|
|
5741
|
-
|
|
5742
|
-
|
|
5743
|
-
|
|
5744
|
-
|
|
5745
|
-
|
|
5746
|
-
|
|
5747
|
-
|
|
5726
|
+
let sideDisposer = null;
|
|
5727
|
+
let legacyDisposer = null;
|
|
5728
|
+
const applySideForm = () => {
|
|
5729
|
+
if (sideService) {
|
|
5730
|
+
if (sideDisposer !== null) return;
|
|
5731
|
+
if (legacyDisposer !== null) {
|
|
5732
|
+
legacyDisposer();
|
|
5733
|
+
legacyDisposer = null;
|
|
5734
|
+
}
|
|
5735
|
+
sideDisposer = ctx.effect(() => installSideEditor({
|
|
5736
|
+
service: sideService,
|
|
5737
|
+
renderTab: (props) => react.default.createElement(SideEditorTab, Object.assign({}, props, {
|
|
5738
|
+
schedule,
|
|
5739
|
+
addToConversation,
|
|
5740
|
+
sidebarPanels,
|
|
5741
|
+
outlineSources,
|
|
5742
|
+
fileMenuItems
|
|
5743
|
+
})),
|
|
5744
|
+
activeSession: () => {
|
|
5745
|
+
const snapshot = sessions?.list?.getSnapshot?.();
|
|
5746
|
+
const sessionId = snapshot?.current;
|
|
5747
|
+
if (!sessionId) return void 0;
|
|
5748
|
+
return {
|
|
5749
|
+
sessionId,
|
|
5750
|
+
cwd: snapshot?.byId?.[sessionId]?.cwd
|
|
5751
|
+
};
|
|
5752
|
+
},
|
|
5753
|
+
registerLegacyFallback: registerLegacyTab
|
|
5754
|
+
}), "vscode-mode: sidebar editor tab");
|
|
5755
|
+
} else {
|
|
5756
|
+
if (legacyDisposer !== null) return;
|
|
5757
|
+
if (sideDisposer !== null) {
|
|
5758
|
+
sideDisposer();
|
|
5759
|
+
sideDisposer = null;
|
|
5760
|
+
}
|
|
5761
|
+
setEnsureSideEditor(null);
|
|
5762
|
+
legacyDisposer = registerLegacyTab();
|
|
5763
|
+
}
|
|
5764
|
+
};
|
|
5765
|
+
applySideForm();
|
|
5766
|
+
let sideRetries = 0;
|
|
5767
|
+
const retrySideService = () => {
|
|
5768
|
+
if (sideService !== void 0 || sideRetries >= 15) return;
|
|
5769
|
+
sideRetries += 1;
|
|
5770
|
+
schedule(() => {
|
|
5771
|
+
if (sideService !== void 0) return;
|
|
5772
|
+
sideService = detectSidebarService(ctx);
|
|
5773
|
+
if (sideService !== void 0) {
|
|
5774
|
+
console.info("[dsh-vscode-mode] 检测到 dsh-better-sidebar,切换侧边栏编辑形态");
|
|
5775
|
+
applySideForm();
|
|
5776
|
+
} else retrySideService();
|
|
5777
|
+
}, 2e3);
|
|
5778
|
+
};
|
|
5779
|
+
retrySideService();
|
|
5748
5780
|
registerSlotSafely(ctx, {
|
|
5749
5781
|
name: "conversation.input.dock",
|
|
5750
5782
|
id: "edrv-diff-dock",
|