dsh-vscode-mode 0.1.27 → 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 +61 -28
- package/lib/client.js.map +1 -1
- package/package.json +1 -1
- package/src/client/compat.ts +6 -3
- package/src/client/index.ts +48 -19
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
|
/**
|
|
@@ -5630,7 +5633,7 @@ window.__ModuleLoader__.load({
|
|
|
5630
5633
|
const settings = binder.scope;
|
|
5631
5634
|
let selected = autoValue("auto");
|
|
5632
5635
|
/** 可选探测 betterSidebar 服务(不进 inject:缺失会让插件停靠等待,杀死回退路径)。 */
|
|
5633
|
-
|
|
5636
|
+
let sideService = detectSidebarService(ctx);
|
|
5634
5637
|
/** 「添加到对话」动作集:编辑区/Tab 右键菜单注入文件引用与代码块(conversation 服务缺失时各动作安全降级)。 */
|
|
5635
5638
|
const addToConversation = createAddToConversation(ctx);
|
|
5636
5639
|
/** 客户端侧兼容摘要(与 host 报告合并展示;惰性求值保证 HMR 后仍新鲜)。 */
|
|
@@ -5704,7 +5707,7 @@ window.__ModuleLoader__.load({
|
|
|
5704
5707
|
logger: (message) => console.warn("[dsh-vscode-mode] " + message)
|
|
5705
5708
|
}), "vscode-mode: file link routing");
|
|
5706
5709
|
const registerLegacyTab = () => {
|
|
5707
|
-
registerSlotSafely(ctx, {
|
|
5710
|
+
return registerSlotSafely(ctx, {
|
|
5708
5711
|
name: "conversation.view",
|
|
5709
5712
|
id: "edrv-editor",
|
|
5710
5713
|
order: 5,
|
|
@@ -5720,30 +5723,60 @@ window.__ModuleLoader__.load({
|
|
|
5720
5723
|
fileMenuItems
|
|
5721
5724
|
})));
|
|
5722
5725
|
};
|
|
5723
|
-
|
|
5724
|
-
|
|
5725
|
-
|
|
5726
|
-
|
|
5727
|
-
|
|
5728
|
-
|
|
5729
|
-
|
|
5730
|
-
|
|
5731
|
-
|
|
5732
|
-
|
|
5733
|
-
|
|
5734
|
-
|
|
5735
|
-
|
|
5736
|
-
|
|
5737
|
-
|
|
5738
|
-
|
|
5739
|
-
|
|
5740
|
-
|
|
5741
|
-
|
|
5742
|
-
|
|
5743
|
-
|
|
5744
|
-
|
|
5745
|
-
|
|
5746
|
-
|
|
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();
|
|
5747
5780
|
registerSlotSafely(ctx, {
|
|
5748
5781
|
name: "conversation.input.dock",
|
|
5749
5782
|
id: "edrv-diff-dock",
|