@ljwei-stak/model-router-galgame 0.4.21 → 0.4.22
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/.dsh-plugin/client.js +34 -34
- package/INSTALLATION_GUIDE.zh.md +19 -7
- package/README.md +34 -10
- package/README.zh.md +34 -10
- package/cordis.patch.yml +3 -0
- package/package.json +3 -2
package/.dsh-plugin/client.js
CHANGED
|
@@ -37654,33 +37654,33 @@ function StageView({ scene: scene2, assetsMap, mode, line, type, running, pinned
|
|
|
37654
37654
|
// .dsh-plugin/client/GalGameView.jsx
|
|
37655
37655
|
var import_react12 = __toESM(require("react"), 1);
|
|
37656
37656
|
|
|
37657
|
-
// node_modules
|
|
37657
|
+
// node_modules/lucide-react/dist/esm/createLucideIcon.mjs
|
|
37658
37658
|
var import_react7 = require("react");
|
|
37659
37659
|
|
|
37660
|
-
// node_modules
|
|
37660
|
+
// node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs
|
|
37661
37661
|
var mergeClasses = (...classes) => classes.filter((className, index2, array) => {
|
|
37662
37662
|
return Boolean(className) && className.trim() !== "" && array.indexOf(className) === index2;
|
|
37663
37663
|
}).join(" ").trim();
|
|
37664
37664
|
|
|
37665
|
-
// node_modules
|
|
37665
|
+
// node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs
|
|
37666
37666
|
var toKebabCase = (string3) => string3.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
37667
37667
|
|
|
37668
|
-
// node_modules
|
|
37668
|
+
// node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs
|
|
37669
37669
|
var toCamelCase = (string3) => string3.replace(
|
|
37670
37670
|
/^([A-Z])|[\s-_]+(\w)/g,
|
|
37671
37671
|
(match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()
|
|
37672
37672
|
);
|
|
37673
37673
|
|
|
37674
|
-
// node_modules
|
|
37674
|
+
// node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs
|
|
37675
37675
|
var toPascalCase = (string3) => {
|
|
37676
37676
|
const camelCase = toCamelCase(string3);
|
|
37677
37677
|
return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
|
|
37678
37678
|
};
|
|
37679
37679
|
|
|
37680
|
-
// node_modules
|
|
37680
|
+
// node_modules/lucide-react/dist/esm/Icon.mjs
|
|
37681
37681
|
var import_react6 = require("react");
|
|
37682
37682
|
|
|
37683
|
-
// node_modules
|
|
37683
|
+
// node_modules/lucide-react/dist/esm/defaultAttributes.mjs
|
|
37684
37684
|
var defaultAttributes = {
|
|
37685
37685
|
xmlns: "http://www.w3.org/2000/svg",
|
|
37686
37686
|
width: 24,
|
|
@@ -37693,7 +37693,7 @@ var defaultAttributes = {
|
|
|
37693
37693
|
strokeLinejoin: "round"
|
|
37694
37694
|
};
|
|
37695
37695
|
|
|
37696
|
-
// node_modules
|
|
37696
|
+
// node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs
|
|
37697
37697
|
var hasA11yProp = (props) => {
|
|
37698
37698
|
for (const prop in props) {
|
|
37699
37699
|
if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
|
|
@@ -37703,12 +37703,12 @@ var hasA11yProp = (props) => {
|
|
|
37703
37703
|
return false;
|
|
37704
37704
|
};
|
|
37705
37705
|
|
|
37706
|
-
// node_modules
|
|
37706
|
+
// node_modules/lucide-react/dist/esm/context.mjs
|
|
37707
37707
|
var import_react5 = require("react");
|
|
37708
37708
|
var LucideContext = (0, import_react5.createContext)({});
|
|
37709
37709
|
var useLucideContext = () => (0, import_react5.useContext)(LucideContext);
|
|
37710
37710
|
|
|
37711
|
-
// node_modules
|
|
37711
|
+
// node_modules/lucide-react/dist/esm/Icon.mjs
|
|
37712
37712
|
var Icon = (0, import_react6.forwardRef)(
|
|
37713
37713
|
({ color: color2, size, strokeWidth, absoluteStrokeWidth, className = "", children, iconNode, ...rest }, ref) => {
|
|
37714
37714
|
const {
|
|
@@ -37740,7 +37740,7 @@ var Icon = (0, import_react6.forwardRef)(
|
|
|
37740
37740
|
}
|
|
37741
37741
|
);
|
|
37742
37742
|
|
|
37743
|
-
// node_modules
|
|
37743
|
+
// node_modules/lucide-react/dist/esm/createLucideIcon.mjs
|
|
37744
37744
|
var createLucideIcon = (iconName, iconNode) => {
|
|
37745
37745
|
const Component = (0, import_react7.forwardRef)(
|
|
37746
37746
|
({ className, ...props }, ref) => (0, import_react7.createElement)(Icon, {
|
|
@@ -37758,21 +37758,21 @@ var createLucideIcon = (iconName, iconNode) => {
|
|
|
37758
37758
|
return Component;
|
|
37759
37759
|
};
|
|
37760
37760
|
|
|
37761
|
-
// node_modules
|
|
37761
|
+
// node_modules/lucide-react/dist/esm/icons/arrow-right.mjs
|
|
37762
37762
|
var __iconNode = [
|
|
37763
37763
|
["path", { d: "M5 12h14", key: "1ays0h" }],
|
|
37764
37764
|
["path", { d: "m12 5 7 7-7 7", key: "xquz4c" }]
|
|
37765
37765
|
];
|
|
37766
37766
|
var ArrowRight = createLucideIcon("arrow-right", __iconNode);
|
|
37767
37767
|
|
|
37768
|
-
// node_modules
|
|
37768
|
+
// node_modules/lucide-react/dist/esm/icons/arrow-up.mjs
|
|
37769
37769
|
var __iconNode2 = [
|
|
37770
37770
|
["path", { d: "m5 12 7-7 7 7", key: "hav0vg" }],
|
|
37771
37771
|
["path", { d: "M12 19V5", key: "x0mq9r" }]
|
|
37772
37772
|
];
|
|
37773
37773
|
var ArrowUp = createLucideIcon("arrow-up", __iconNode2);
|
|
37774
37774
|
|
|
37775
|
-
// node_modules
|
|
37775
|
+
// node_modules/lucide-react/dist/esm/icons/book-open.mjs
|
|
37776
37776
|
var __iconNode3 = [
|
|
37777
37777
|
["path", { d: "M12 5v16", key: "1f6ucr" }],
|
|
37778
37778
|
[
|
|
@@ -37785,7 +37785,7 @@ var __iconNode3 = [
|
|
|
37785
37785
|
];
|
|
37786
37786
|
var BookOpen = createLucideIcon("book-open", __iconNode3);
|
|
37787
37787
|
|
|
37788
|
-
// node_modules
|
|
37788
|
+
// node_modules/lucide-react/dist/esm/icons/bug.mjs
|
|
37789
37789
|
var __iconNode4 = [
|
|
37790
37790
|
["path", { d: "M12 20v-9", key: "1qisl0" }],
|
|
37791
37791
|
["path", { d: "M14 7a4 4 0 0 1 4 4v3a6 6 0 0 1-12 0v-3a4 4 0 0 1 4-4z", key: "uouzyp" }],
|
|
@@ -37801,15 +37801,15 @@ var __iconNode4 = [
|
|
|
37801
37801
|
];
|
|
37802
37802
|
var Bug = createLucideIcon("bug", __iconNode4);
|
|
37803
37803
|
|
|
37804
|
-
// node_modules
|
|
37804
|
+
// node_modules/lucide-react/dist/esm/icons/check.mjs
|
|
37805
37805
|
var __iconNode5 = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
|
|
37806
37806
|
var Check = createLucideIcon("check", __iconNode5);
|
|
37807
37807
|
|
|
37808
|
-
// node_modules
|
|
37808
|
+
// node_modules/lucide-react/dist/esm/icons/chevron-right.mjs
|
|
37809
37809
|
var __iconNode6 = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
|
|
37810
37810
|
var ChevronRight = createLucideIcon("chevron-right", __iconNode6);
|
|
37811
37811
|
|
|
37812
|
-
// node_modules
|
|
37812
|
+
// node_modules/lucide-react/dist/esm/icons/download.mjs
|
|
37813
37813
|
var __iconNode7 = [
|
|
37814
37814
|
["path", { d: "M12 15V3", key: "m9g1x1" }],
|
|
37815
37815
|
["path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4", key: "ih7n3h" }],
|
|
@@ -37817,7 +37817,7 @@ var __iconNode7 = [
|
|
|
37817
37817
|
];
|
|
37818
37818
|
var Download = createLucideIcon("download", __iconNode7);
|
|
37819
37819
|
|
|
37820
|
-
// node_modules
|
|
37820
|
+
// node_modules/lucide-react/dist/esm/icons/heart.mjs
|
|
37821
37821
|
var __iconNode8 = [
|
|
37822
37822
|
[
|
|
37823
37823
|
"path",
|
|
@@ -37829,11 +37829,11 @@ var __iconNode8 = [
|
|
|
37829
37829
|
];
|
|
37830
37830
|
var Heart = createLucideIcon("heart", __iconNode8);
|
|
37831
37831
|
|
|
37832
|
-
// node_modules
|
|
37832
|
+
// node_modules/lucide-react/dist/esm/icons/loader-circle.mjs
|
|
37833
37833
|
var __iconNode9 = [["path", { d: "M21 12a9 9 0 1 1-6.219-8.56", key: "13zald" }]];
|
|
37834
37834
|
var LoaderCircle = createLucideIcon("loader-circle", __iconNode9);
|
|
37835
37835
|
|
|
37836
|
-
// node_modules
|
|
37836
|
+
// node_modules/lucide-react/dist/esm/icons/map-pin.mjs
|
|
37837
37837
|
var __iconNode10 = [
|
|
37838
37838
|
[
|
|
37839
37839
|
"path",
|
|
@@ -37846,7 +37846,7 @@ var __iconNode10 = [
|
|
|
37846
37846
|
];
|
|
37847
37847
|
var MapPin = createLucideIcon("map-pin", __iconNode10);
|
|
37848
37848
|
|
|
37849
|
-
// node_modules
|
|
37849
|
+
// node_modules/lucide-react/dist/esm/icons/message-circle.mjs
|
|
37850
37850
|
var __iconNode11 = [
|
|
37851
37851
|
[
|
|
37852
37852
|
"path",
|
|
@@ -37858,7 +37858,7 @@ var __iconNode11 = [
|
|
|
37858
37858
|
];
|
|
37859
37859
|
var MessageCircle = createLucideIcon("message-circle", __iconNode11);
|
|
37860
37860
|
|
|
37861
|
-
// node_modules
|
|
37861
|
+
// node_modules/lucide-react/dist/esm/icons/palette.mjs
|
|
37862
37862
|
var __iconNode12 = [
|
|
37863
37863
|
[
|
|
37864
37864
|
"path",
|
|
@@ -37874,14 +37874,14 @@ var __iconNode12 = [
|
|
|
37874
37874
|
];
|
|
37875
37875
|
var Palette = createLucideIcon("palette", __iconNode12);
|
|
37876
37876
|
|
|
37877
|
-
// node_modules
|
|
37877
|
+
// node_modules/lucide-react/dist/esm/icons/pause.mjs
|
|
37878
37878
|
var __iconNode13 = [
|
|
37879
37879
|
["rect", { x: "14", y: "3", width: "5", height: "18", rx: "1", key: "kaeet6" }],
|
|
37880
37880
|
["rect", { x: "5", y: "3", width: "5", height: "18", rx: "1", key: "1wsw3u" }]
|
|
37881
37881
|
];
|
|
37882
37882
|
var Pause = createLucideIcon("pause", __iconNode13);
|
|
37883
37883
|
|
|
37884
|
-
// node_modules
|
|
37884
|
+
// node_modules/lucide-react/dist/esm/icons/play.mjs
|
|
37885
37885
|
var __iconNode14 = [
|
|
37886
37886
|
[
|
|
37887
37887
|
"path",
|
|
@@ -37893,7 +37893,7 @@ var __iconNode14 = [
|
|
|
37893
37893
|
];
|
|
37894
37894
|
var Play = createLucideIcon("play", __iconNode14);
|
|
37895
37895
|
|
|
37896
|
-
// node_modules
|
|
37896
|
+
// node_modules/lucide-react/dist/esm/icons/rotate-ccw-clock.mjs
|
|
37897
37897
|
var __iconNode15 = [
|
|
37898
37898
|
["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
|
|
37899
37899
|
["path", { d: "M3 3v5h5", key: "1xhq8a" }],
|
|
@@ -37901,14 +37901,14 @@ var __iconNode15 = [
|
|
|
37901
37901
|
];
|
|
37902
37902
|
var RotateCcwClock = createLucideIcon("rotate-ccw-clock", __iconNode15);
|
|
37903
37903
|
|
|
37904
|
-
// node_modules
|
|
37904
|
+
// node_modules/lucide-react/dist/esm/icons/rotate-ccw.mjs
|
|
37905
37905
|
var __iconNode16 = [
|
|
37906
37906
|
["path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8", key: "1357e3" }],
|
|
37907
37907
|
["path", { d: "M3 3v5h5", key: "1xhq8a" }]
|
|
37908
37908
|
];
|
|
37909
37909
|
var RotateCcw = createLucideIcon("rotate-ccw", __iconNode16);
|
|
37910
37910
|
|
|
37911
|
-
// node_modules
|
|
37911
|
+
// node_modules/lucide-react/dist/esm/icons/save.mjs
|
|
37912
37912
|
var __iconNode17 = [
|
|
37913
37913
|
[
|
|
37914
37914
|
"path",
|
|
@@ -37922,7 +37922,7 @@ var __iconNode17 = [
|
|
|
37922
37922
|
];
|
|
37923
37923
|
var Save = createLucideIcon("save", __iconNode17);
|
|
37924
37924
|
|
|
37925
|
-
// node_modules
|
|
37925
|
+
// node_modules/lucide-react/dist/esm/icons/settings-2.mjs
|
|
37926
37926
|
var __iconNode18 = [
|
|
37927
37927
|
["path", { d: "M14 17H5", key: "gfn3mx" }],
|
|
37928
37928
|
["path", { d: "M19 7h-9", key: "6i9tg" }],
|
|
@@ -37931,7 +37931,7 @@ var __iconNode18 = [
|
|
|
37931
37931
|
];
|
|
37932
37932
|
var Settings2 = createLucideIcon("settings-2", __iconNode18);
|
|
37933
37933
|
|
|
37934
|
-
// node_modules
|
|
37934
|
+
// node_modules/lucide-react/dist/esm/icons/shield-check.mjs
|
|
37935
37935
|
var __iconNode19 = [
|
|
37936
37936
|
[
|
|
37937
37937
|
"path",
|
|
@@ -37944,13 +37944,13 @@ var __iconNode19 = [
|
|
|
37944
37944
|
];
|
|
37945
37945
|
var ShieldCheck = createLucideIcon("shield-check", __iconNode19);
|
|
37946
37946
|
|
|
37947
|
-
// node_modules
|
|
37947
|
+
// node_modules/lucide-react/dist/esm/icons/square.mjs
|
|
37948
37948
|
var __iconNode20 = [
|
|
37949
37949
|
["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }]
|
|
37950
37950
|
];
|
|
37951
37951
|
var Square = createLucideIcon("square", __iconNode20);
|
|
37952
37952
|
|
|
37953
|
-
// node_modules
|
|
37953
|
+
// node_modules/lucide-react/dist/esm/icons/upload.mjs
|
|
37954
37954
|
var __iconNode21 = [
|
|
37955
37955
|
["path", { d: "M12 3v12", key: "1x0j5s" }],
|
|
37956
37956
|
["path", { d: "m17 8-5-5-5 5", key: "7q97r8" }],
|
|
@@ -37958,7 +37958,7 @@ var __iconNode21 = [
|
|
|
37958
37958
|
];
|
|
37959
37959
|
var Upload = createLucideIcon("upload", __iconNode21);
|
|
37960
37960
|
|
|
37961
|
-
// node_modules
|
|
37961
|
+
// node_modules/lucide-react/dist/esm/icons/x.mjs
|
|
37962
37962
|
var __iconNode22 = [
|
|
37963
37963
|
["path", { d: "M18 6 6 18", key: "1bl5f8" }],
|
|
37964
37964
|
["path", { d: "m6 6 12 12", key: "d8bk6v" }]
|
|
@@ -43528,7 +43528,7 @@ var gal_scene_default = { version: 1, settings: { stageW: 1920, stageH: 1080, sh
|
|
|
43528
43528
|
|
|
43529
43529
|
// .dsh-plugin/client/index.mjs
|
|
43530
43530
|
var name = "gal-view";
|
|
43531
|
-
var PLUGIN_VERSION = "0.4.
|
|
43531
|
+
var PLUGIN_VERSION = "0.4.22";
|
|
43532
43532
|
function createUpdateApi2(ctx) {
|
|
43533
43533
|
let connection;
|
|
43534
43534
|
try {
|
package/INSTALLATION_GUIDE.zh.md
CHANGED
|
@@ -16,6 +16,18 @@
|
|
|
16
16
|
|
|
17
17
|
---
|
|
18
18
|
|
|
19
|
+
## PPT 生成扩展
|
|
20
|
+
|
|
21
|
+
从 0.4.22 起,Router 聚合包自动安装并加载 `@ljwei-stak/ppt-master-for-mgr@6.3.1`。制作 PPT 时使用普通工作会话或 GAL 工作会话,在代理预设中启用 DSH 原生 `skill`、文件和终端工具,并在实际执行环境中安装 Python 3.10+。
|
|
22
|
+
|
|
23
|
+
```sh
|
|
24
|
+
npx --yes --package=@ljwei-stak/ppt-master-for-mgr@6.3.1 ppt-master-for-mgr doctor
|
|
25
|
+
npx --yes --package=@ljwei-stak/ppt-master-for-mgr@6.3.1 ppt-master-for-mgr setup
|
|
26
|
+
npx --yes --package=@ljwei-stak/ppt-master-for-mgr@6.3.1 ppt-master-for-mgr doctor
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`setup` 主动运行 pip 安装依赖,npm 安装本身不会安装 Python 依赖。指定解释器时为命令添加 `--python <解释器绝对路径>`,也可使用 `PPT_MASTER_PYTHON`;工作代理需使用相同解释器。随后在可写工作目录中请求“使用 ppt-master 生成 PPTX”,确认模型通过原生 `skill` 加载 `ppt-master` 后生成并检查文件。剧情模式和自由模式的角色对话不承担 PPT 工作流。完整配置与可选功能要求见 [README 的 PPT 安装步骤](README.zh.md#4-准备-ppt-生成环境) 和 [PPT Master 项目](https://github.com/ljwei-stak/ppt-master-for-MGR)。
|
|
30
|
+
|
|
19
31
|
## 1. 前置要求
|
|
20
32
|
|
|
21
33
|
### ✅ 确认 DeepSeek Harness 已安装
|
|
@@ -86,8 +98,8 @@ sudo mv dsh /usr/local/bin/
|
|
|
86
98
|
|
|
87
99
|
```powershell
|
|
88
100
|
pnpm config set registry https://registry.npmjs.org/
|
|
89
|
-
pnpm dsh plugin --profile web add @ljwei-stak/model-router-galgame@0.4.
|
|
90
|
-
pnpm dsh plugin --profile desktop add @ljwei-stak/model-router-galgame@0.4.
|
|
101
|
+
pnpm dsh plugin --profile web add @ljwei-stak/model-router-galgame@0.4.22
|
|
102
|
+
pnpm dsh plugin --profile desktop add @ljwei-stak/model-router-galgame@0.4.22
|
|
91
103
|
```
|
|
92
104
|
|
|
93
105
|
### 方法2: Git 克隆(仅源码开发)
|
|
@@ -151,11 +163,11 @@ model-router-galgame/
|
|
|
151
163
|
|
|
152
164
|
```powershell
|
|
153
165
|
pnpm config set registry https://registry.npmjs.org/
|
|
154
|
-
pnpm dsh plugin --profile web add @ljwei-stak/model-router-galgame@0.4.
|
|
155
|
-
pnpm dsh plugin --profile desktop add @ljwei-stak/model-router-galgame@0.4.
|
|
166
|
+
pnpm dsh plugin --profile web add @ljwei-stak/model-router-galgame@0.4.22
|
|
167
|
+
pnpm dsh plugin --profile desktop add @ljwei-stak/model-router-galgame@0.4.22
|
|
156
168
|
```
|
|
157
169
|
|
|
158
|
-
其中 `@0.4.
|
|
170
|
+
其中 `@0.4.22` 可以替换为通过 `npm view @ljwei-stak/model-router-galgame version --registry=https://registry.npmjs.org/` 查询到的版本号。官方 ModLens、审批门控、ModSearch、Ego Browser 和 PPT Master 依赖会自动解析;PPT 的 Python 依赖另按本指南开头步骤配置。
|
|
159
171
|
|
|
160
172
|
如果正在本地开发,再使用目录安装:
|
|
161
173
|
|
|
@@ -182,7 +194,7 @@ dsh plugin --profile web add /path/to/model-router-galgame
|
|
|
182
194
|
dsh plugin --profile web list
|
|
183
195
|
|
|
184
196
|
# 预期输出包含:
|
|
185
|
-
# @ljwei-stak/model-router-galgame@0.4.
|
|
197
|
+
# @ljwei-stak/model-router-galgame@0.4.22
|
|
186
198
|
```
|
|
187
199
|
|
|
188
200
|
### 步骤4: 重启 Harness
|
|
@@ -789,5 +801,5 @@ dsh restart
|
|
|
789
801
|
|
|
790
802
|
**文档版本**: 1.0
|
|
791
803
|
**更新日期**: 2026-09-01
|
|
792
|
-
**适用插件版本**: 0.4.
|
|
804
|
+
**适用插件版本**: 0.4.22
|
|
793
805
|
**已验证宿主版本**: DSH Desktop 2.0.5 / `@deepseek-ai/dsh@0.1.2-rc.1`
|
package/README.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
English | [中文](README.zh.md)
|
|
4
4
|
|
|
5
|
-
A model-routing and GAL conversation plugin for DeepSeek Harness / DSH Desktop. It combines task assignment, cost estimates, model-character dialogue, web tools, and approval integration in one npm package, and runs inside an existing DSH host.
|
|
5
|
+
A model-routing and GAL conversation plugin for DeepSeek Harness / DSH Desktop. It combines task assignment, cost estimates, model-character dialogue, web tools, PPT generation skills, and approval integration in one npm package, and runs inside an existing DSH host.
|
|
6
6
|
|
|
7
|
-
**Current release: 0.4.
|
|
7
|
+
**Current release: 0.4.22** · [npm package](https://www.npmjs.com/package/@ljwei-stak/model-router-galgame) · [GitHub Releases](https://github.com/ljwei-stak/model-router-galgame/releases) · [DSH Desktop](https://github.com/anywhere-labs/dsh-desktop/releases)
|
|
8
8
|
|
|
9
9
|
## Features
|
|
10
10
|
|
|
@@ -43,11 +43,17 @@ Story mode does not require provider credentials. Free mode requires a working m
|
|
|
43
43
|
- **Approval integration** attaches work-package, stage, model, and task-count context to sandbox escalation requests in multi-task work. Approval decisions, human confirmation, auditing, and learning are handled by `@ljwei-stak/dsh-approval-gate` and the host permission policy. Installing the router does not enable automatic approval.
|
|
44
44
|
- **OpenCode Zen compatibility** repairs OpenCode endpoint overrides mistakenly set to official website URLs while preserving custom gateways.
|
|
45
45
|
|
|
46
|
+
### PowerPoint generation with PPT Master
|
|
47
|
+
|
|
48
|
+
- **PPT Master** is bundled as a native DSH skill. In a normal work conversation, a PowerPoint/PPT/PPTX request can load `ppt-master` through the host's `skill` tool and follow its planning, SVG, validation, and PPTX export workflow.
|
|
49
|
+
- Model Router keeps the host's skill catalog, loaded skill instructions, and file/terminal tools available when it chooses a model or advances a work stage. Use ordinary chat or the GAL conversation view for presentation work; story mode does not run tools, and free-play character dialogue is not the work agent.
|
|
50
|
+
- The package includes the skill, Python scripts, and templates. Python dependencies require the explicit setup below; npm installation does not install Python or run pip. Generated presentations belong in the conversation's writable workspace.
|
|
51
|
+
|
|
46
52
|
### Separate plugin and desktop updates
|
|
47
53
|
|
|
48
54
|
"GAL 视窗 → 项目更新" (GAL view → Project updates) checks the plugin's npm version and the official DSH Desktop version separately. It offers "仅更新 npm 插件" (Update only the npm plugin), "仅更新完整客户端" (Update only the full client), and "一键更新插件与客户端" (Update plugin and client). Desktop plugin installation runs through the authenticated host connection. Fully exit and restart DSH Desktop after a successful installation.
|
|
49
55
|
|
|
50
|
-
A page opened in a regular browser can check the plugin version and open download pages, but cannot install the desktop client or change its profile directly. The plugin's `0.4.
|
|
56
|
+
A page opened in a regular browser can check the plugin version and open download pages, but cannot install the desktop client or change its profile directly. The plugin's `0.4.22` version and DSH Desktop's version are independent.
|
|
51
57
|
|
|
52
58
|
## Installation
|
|
53
59
|
|
|
@@ -69,7 +75,7 @@ Installing this npm package does not install DSH Desktop, model services, or a b
|
|
|
69
75
|
|
|
70
76
|
```sh
|
|
71
77
|
dsh --version
|
|
72
|
-
dsh plugin add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/model-router-galgame@0.4.
|
|
78
|
+
dsh plugin add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/model-router-galgame@0.4.22
|
|
73
79
|
```
|
|
74
80
|
|
|
75
81
|
3. After installation succeeds, use the desktop restart control, or explicitly quit from the system tray and reopen the app. Select the same profile. Closing the window may only hide the application.
|
|
@@ -84,7 +90,7 @@ If you do not have a global `dsh` but already have Node.js/npm and pnpm, replace
|
|
|
84
90
|
|
|
85
91
|
```sh
|
|
86
92
|
dsh --version
|
|
87
|
-
dsh plugin --profile web add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/model-router-galgame@0.4.
|
|
93
|
+
dsh plugin --profile web add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/model-router-galgame@0.4.22
|
|
88
94
|
dsh --profile web --dump-config
|
|
89
95
|
```
|
|
90
96
|
|
|
@@ -106,20 +112,37 @@ For desktop, run this in the DSH terminal opened by the app:
|
|
|
106
112
|
dsh --dump-config
|
|
107
113
|
```
|
|
108
114
|
|
|
109
|
-
For Web / CLI, use `dsh --profile web --dump-config`. The combined configuration should include all
|
|
115
|
+
For Web / CLI, use `dsh --profile web --dump-config`. The combined configuration should include all six plugins below, with no duplicate loader IDs. A configuration dump does not replace checking that the host starts successfully. Install only the Router aggregate package; its dependencies and bundle entries are added automatically.
|
|
110
116
|
|
|
111
|
-
| Plugin | Pinned version for 0.4.
|
|
117
|
+
| Plugin | Pinned version for 0.4.22 | Purpose |
|
|
112
118
|
| --- | --- | --- |
|
|
113
|
-
| `@ljwei-stak/model-router-galgame` | `0.4.
|
|
119
|
+
| `@ljwei-stak/model-router-galgame` | `0.4.22` | Routing, GAL view, story/free modes, and update controls |
|
|
114
120
|
| `@liustack/modlens` | `3.25.4` | Image understanding through compatible routes |
|
|
115
121
|
| `@liustack/modsearch` | `5.10.1` | Search and page reading |
|
|
116
122
|
| `@ljwei-stak/dsh-ego-browser` | `0.8.3` | Visible browser tools |
|
|
117
123
|
| `@ljwei-stak/dsh-approval-gate` | `0.5.3` | Approval policies and auditing |
|
|
124
|
+
| `@ljwei-stak/ppt-master-for-mgr` | `6.3.1` | Native PPT skill, scripts, and templates |
|
|
118
125
|
|
|
119
|
-
`schemastery@3.18.0`
|
|
126
|
+
`schemastery@3.18.0` and PPT Master's native skill provider are also installed automatically as runtime dependencies. These dependencies are pinned: updating Router uses the dependency combination declared by the new Router package, rather than updating every dependency to its own `latest`.
|
|
120
127
|
|
|
121
128
|
Create a conversation in DSH and confirm that the **"GAL视窗" (GAL view)** tab appears. If it is missing, first confirm the profile, restart the host, and check "启用 GAL 视窗" (Enable GAL view) in Settings.
|
|
122
129
|
|
|
130
|
+
### 4. Prepare PPT generation
|
|
131
|
+
|
|
132
|
+
Install Python 3.10 or newer in the environment where the DSH work agent executes commands. Enable the host's native `skill` tool (`@deepseek-ai/dsh-tool-skill`) and the file/terminal tools in that agent's preset. The bundled provider adds `ppt-master` to the native catalog; it does not override the preset's tools or permissions.
|
|
133
|
+
|
|
134
|
+
Run in the DSH terminal or the same execution environment as the work agent:
|
|
135
|
+
|
|
136
|
+
```sh
|
|
137
|
+
npx --yes --package=@ljwei-stak/ppt-master-for-mgr@6.3.1 ppt-master-for-mgr doctor
|
|
138
|
+
npx --yes --package=@ljwei-stak/ppt-master-for-mgr@6.3.1 ppt-master-for-mgr setup
|
|
139
|
+
npx --yes --package=@ljwei-stak/ppt-master-for-mgr@6.3.1 ppt-master-for-mgr doctor
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
`setup` explicitly runs pip for the bundled requirements. Use a dedicated Python virtual environment when appropriate, then add `--python /absolute/path/to/python` to each command, or set `PPT_MASTER_PYTHON` to that interpreter. On Windows, quote interpreter paths containing spaces. Configure the work agent to use that same interpreter. `doctor` checks core Python imports; it is not a visual quality or complete optional-service check. Some conversion, rendering, speech, or image features need additional software or credentials described in [PPT Master](https://github.com/ljwei-stak/ppt-master-for-MGR).
|
|
143
|
+
|
|
144
|
+
Restart DSH, open a normal work conversation with a writable workspace, and request, for example: "Use ppt-master to create a 10-slide project report and save the PPTX in this workspace." Confirm that the agent loads `ppt-master` through `skill`, then generates and checks the output. Follow the host's normal approval prompts for file and command access. A PowerPoint file is generated by the work agent; the GAL attachment input still does not parse binary documents directly.
|
|
145
|
+
|
|
123
146
|
## First use
|
|
124
147
|
|
|
125
148
|
To play without a model API, open **"GAL视窗 → GAL游戏 → 剧情模式" (GAL view → GAL game → Story mode)**. The steps below configure the existing routing and AI conversation features; the same host model configuration is used by free mode.
|
|
@@ -183,13 +206,14 @@ For Web / CLI, use `dsh plugin --profile web remove @ljwei-stak/model-router-gal
|
|
|
183
206
|
| `duplicate loader entry id` | A dependency may be installed separately and also loaded by the Router bundle in the same profile. Remove only standalone entries confirmed to be duplicates. |
|
|
184
207
|
| `EADDRINUSE` / `task-board ledger is already owned` | Shut down the old host process using that profile normally. Changing the port does not release the profile lock. |
|
|
185
208
|
| Image understanding fails | Check the ModLens engine, credentials, and available routes. Convert PDF/DOCX files to text first. |
|
|
209
|
+
| PPT skill is absent or PPTX export fails | Confirm the `ppt-master-for-mgr` bundle entry and native `skill` tool are enabled in the same profile, use a work conversation, then run `doctor` with the agent's Python interpreter. Run `setup` for missing core dependencies and check workspace permissions. |
|
|
186
210
|
| Update check fails | Check npm / GitHub connectivity. "Unable to confirm version" does not mean the installation is current. |
|
|
187
211
|
|
|
188
212
|
For example, only after confirming that ModLens is a duplicate standalone dependency in the same profile, run:
|
|
189
213
|
|
|
190
214
|
```sh
|
|
191
215
|
dsh plugin remove @liustack/modlens
|
|
192
|
-
dsh plugin add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/model-router-galgame@0.4.
|
|
216
|
+
dsh plugin add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/model-router-galgame@0.4.22
|
|
193
217
|
```
|
|
194
218
|
|
|
195
219
|
For Web / CLI, add `--profile web` after `plugin` in both commands. Handle other duplicate dependencies according to the actual error; do not remove all plugins at once. These removal commands are unnecessary when no duplicate entry exists.
|
package/README.zh.md
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
[English](README.md) | 中文
|
|
4
4
|
|
|
5
|
-
适用于 DeepSeek Harness / DSH Desktop 的模型路由与 GAL
|
|
5
|
+
适用于 DeepSeek Harness / DSH Desktop 的模型路由与 GAL 对话插件。它把任务分配、费用估算、模型角色对话、联网工具、PPT 生成技能和审批适配整合为一个 npm 插件包,需要在已有的 DSH 宿主中使用。
|
|
6
6
|
|
|
7
|
-
**当前发布版本:0.4.
|
|
7
|
+
**当前发布版本:0.4.22** · [npm 包](https://www.npmjs.com/package/@ljwei-stak/model-router-galgame) · [GitHub Releases](https://github.com/ljwei-stak/model-router-galgame/releases) · [DSH Desktop](https://github.com/anywhere-labs/dsh-desktop/releases)
|
|
8
8
|
|
|
9
9
|
## 功能介绍
|
|
10
10
|
|
|
@@ -43,11 +43,17 @@
|
|
|
43
43
|
- **审批适配**:在多任务沙箱升级请求中附加工作包、阶段、模型和任务数量。审批决定、人工确认、审计与学习由 `@ljwei-stak/dsh-approval-gate` 和宿主权限策略负责,安装路由器不等于开启自动批准。
|
|
44
44
|
- **OpenCode Zen 兼容**:修复误填成官方网页地址的 OpenCode 端点覆盖,保留自定义网关。
|
|
45
45
|
|
|
46
|
+
### PPT Master 演示文稿生成
|
|
47
|
+
|
|
48
|
+
- **PPT Master** 以 DSH 原生 skill 随包加载。在普通工作会话中收到 PowerPoint/PPT/PPTX 需求后,模型可通过宿主 `skill` 工具加载 `ppt-master`,按规划、SVG 制作、检查和 PPTX 导出的流程执行。
|
|
49
|
+
- Model Router 在选择模型和推进工作阶段时保留宿主技能目录、已加载的技能指令及文件/终端工具。制作 PPT 应使用普通聊天或 GAL 工作会话;剧情模式不调用工具,自由模式的角色对话也不是工作代理。
|
|
50
|
+
- 包内包含技能、Python 脚本和模板。Python 依赖需按下方步骤主动安装,npm 安装不会自动安装 Python 或运行 pip。生成的演示文稿保存在会话可写工作目录中。
|
|
51
|
+
|
|
46
52
|
### 插件与桌面端分别更新
|
|
47
53
|
|
|
48
54
|
“GAL 视窗 → 项目更新”分别检查插件 npm 版本和官方 DSH Desktop 版本。支持“仅更新 npm 插件”“仅更新完整客户端”和“一键更新插件与客户端”。桌面端插件安装通过已认证的宿主连接执行,成功后需要完全退出并重启 DSH Desktop。
|
|
49
55
|
|
|
50
|
-
普通浏览器中的页面可以查询插件版本、打开下载页面,但不能直接安装桌面端或修改其 profile。插件的 `0.4.
|
|
56
|
+
普通浏览器中的页面可以查询插件版本、打开下载页面,但不能直接安装桌面端或修改其 profile。插件的 `0.4.22` 与 DSH Desktop 的版本号相互独立。
|
|
51
57
|
|
|
52
58
|
## 安装
|
|
53
59
|
|
|
@@ -69,7 +75,7 @@
|
|
|
69
75
|
|
|
70
76
|
```sh
|
|
71
77
|
dsh --version
|
|
72
|
-
dsh plugin add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/model-router-galgame@0.4.
|
|
78
|
+
dsh plugin add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/model-router-galgame@0.4.22
|
|
73
79
|
```
|
|
74
80
|
|
|
75
81
|
3. 安装成功后,使用桌面端的重启入口,或从托盘明确退出后重新打开,仍选择刚才的 profile。仅关闭窗口可能只是隐藏应用。
|
|
@@ -84,7 +90,7 @@ dsh plugin add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/m
|
|
|
84
90
|
|
|
85
91
|
```sh
|
|
86
92
|
dsh --version
|
|
87
|
-
dsh plugin --profile web add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/model-router-galgame@0.4.
|
|
93
|
+
dsh plugin --profile web add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/model-router-galgame@0.4.22
|
|
88
94
|
dsh --profile web --dump-config
|
|
89
95
|
```
|
|
90
96
|
|
|
@@ -106,20 +112,37 @@ dsh web
|
|
|
106
112
|
dsh --dump-config
|
|
107
113
|
```
|
|
108
114
|
|
|
109
|
-
Web / CLI 使用 `dsh --profile web --dump-config
|
|
115
|
+
Web / CLI 使用 `dsh --profile web --dump-config`。组合后的配置应包含以下六个插件,且没有重复 loader ID。配置导出不能替代实际启动验证;只需安装 Router 聚合包,依赖和 bundle 条目会自动加入。
|
|
110
116
|
|
|
111
|
-
| 插件 | 0.4.
|
|
117
|
+
| 插件 | 0.4.22 固定依赖版本 | 用途 |
|
|
112
118
|
| --- | --- | --- |
|
|
113
|
-
| `@ljwei-stak/model-router-galgame` | `0.4.
|
|
119
|
+
| `@ljwei-stak/model-router-galgame` | `0.4.22` | 路由、GAL 视窗、剧情/自由模式和更新入口 |
|
|
114
120
|
| `@liustack/modlens` | `3.25.4` | 兼容路由的图片理解 |
|
|
115
121
|
| `@liustack/modsearch` | `5.10.1` | 搜索与页面读取 |
|
|
116
122
|
| `@ljwei-stak/dsh-ego-browser` | `0.8.3` | 可见浏览器工具 |
|
|
117
123
|
| `@ljwei-stak/dsh-approval-gate` | `0.5.3` | 审批策略与审计 |
|
|
124
|
+
| `@ljwei-stak/ppt-master-for-mgr` | `6.3.1` | 原生 PPT 技能、脚本和模板 |
|
|
118
125
|
|
|
119
|
-
`schemastery@3.18.0`
|
|
126
|
+
`schemastery@3.18.0` 和 PPT Master 的原生技能提供器也会作为运行依赖自动安装。上述依赖采用固定版本;更新 Router 时使用新 Router 包声明的依赖组合,而不是自动升级每个依赖到各自的 `latest`。
|
|
120
127
|
|
|
121
128
|
在 DSH 中新建会话,确认有 **“GAL视窗”** 标签。若没有,先确认 profile 正确、已重启宿主,并检查设置中的“启用 GAL 视窗”。
|
|
122
129
|
|
|
130
|
+
### 4. 准备 PPT 生成环境
|
|
131
|
+
|
|
132
|
+
在 DSH 工作代理执行命令的环境中安装 Python 3.10 或更新版本。在该代理的预设中启用宿主原生 `skill` 工具(`@deepseek-ai/dsh-tool-skill`)以及文件和终端工具。随包加载的提供器会把 `ppt-master` 注册到原生技能目录,不会改写预设的工具和权限。
|
|
133
|
+
|
|
134
|
+
在 DSH 终端或与工作代理相同的执行环境中运行:
|
|
135
|
+
|
|
136
|
+
```sh
|
|
137
|
+
npx --yes --package=@ljwei-stak/ppt-master-for-mgr@6.3.1 ppt-master-for-mgr doctor
|
|
138
|
+
npx --yes --package=@ljwei-stak/ppt-master-for-mgr@6.3.1 ppt-master-for-mgr setup
|
|
139
|
+
npx --yes --package=@ljwei-stak/ppt-master-for-mgr@6.3.1 ppt-master-for-mgr doctor
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
`setup` 会明确运行 pip 安装包内 requirements。可以先创建专用 Python 虚拟环境,再为每条命令添加 `--python /absolute/path/to/python`,或将环境变量 `PPT_MASTER_PYTHON` 设置为该解释器;Windows 路径包含空格时需加引号。工作代理也应使用同一个解释器。`doctor` 检查核心 Python 模块,不代表视觉质量或全部可选服务已通过检查。部分转换、渲染、配音和生图功能还需要 [PPT Master 文档](https://github.com/ljwei-stak/ppt-master-for-MGR) 中说明的额外软件或凭据。
|
|
143
|
+
|
|
144
|
+
重启 DSH,在可写工作目录中开启普通工作会话,例如发送:“请使用 ppt-master 制作一份 10 页的项目汇报,并将 PPTX 保存到当前工作目录。”确认模型通过 `skill` 加载 `ppt-master`,随后生成并检查文件。文件和命令访问仍遵循宿主正常审批。PPT 由工作代理生成;GAL 附件入口仍不会直接解析二进制文档。
|
|
145
|
+
|
|
123
146
|
## 首次使用
|
|
124
147
|
|
|
125
148
|
只玩剧情时,直接打开 **“GAL视窗 → GAL游戏 → 剧情模式”**,无需模型 API。以下步骤用于配置原有路由与 AI 对话,自由模式也使用宿主的模型配置。
|
|
@@ -183,13 +206,14 @@ Web / CLI 使用 `dsh plugin --profile web remove @ljwei-stak/model-router-galga
|
|
|
183
206
|
| `duplicate loader entry id` | 同一 profile 中某个依赖可能被单独安装,又被 Router bundle 加载;只删除确认重复的独立条目。 |
|
|
184
207
|
| `EADDRINUSE` / `task-board ledger is already owned` | 先正常关闭占用该 profile 的旧宿主进程。换端口不能解除 profile 锁。 |
|
|
185
208
|
| 图片不能识别 | 检查 ModLens 引擎、凭据和可用路由。PDF/DOCX 先转换为文本。 |
|
|
209
|
+
| 找不到 PPT 技能或 PPTX 导出失败 | 确认同一 profile 中存在 `ppt-master-for-mgr` bundle 条目,并在工作代理预设启用原生 `skill`;使用工作会话,按代理实际 Python 运行 `doctor`,缺少核心依赖时执行 `setup`,同时检查工作目录权限。 |
|
|
186
210
|
| 更新检查失败 | 检查 npm / GitHub 网络连接;“无法确认版本”不表示已经是最新版。 |
|
|
187
211
|
|
|
188
212
|
例如,仅在确认 ModLens 是同一 profile 中重复安装的独立依赖后,执行:
|
|
189
213
|
|
|
190
214
|
```sh
|
|
191
215
|
dsh plugin remove @liustack/modlens
|
|
192
|
-
dsh plugin add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/model-router-galgame@0.4.
|
|
216
|
+
dsh plugin add --save-exact --registry=https://registry.npmjs.org/ @ljwei-stak/model-router-galgame@0.4.22
|
|
193
217
|
```
|
|
194
218
|
|
|
195
219
|
Web / CLI 在两条命令的 `plugin` 后加 `--profile web`。其他重复依赖按实际报错处理,不要一次删除全部插件。没有重复条目时不需要执行这些移除命令。
|
package/cordis.patch.yml
CHANGED
|
@@ -9,6 +9,9 @@
|
|
|
9
9
|
# Ego Browser supplies visible Chromium tools for JS-heavy and anti-bot pages.
|
|
10
10
|
- id: ego-browser
|
|
11
11
|
name: '@ljwei-stak/dsh-ego-browser'
|
|
12
|
+
# Register PPT Master in the host's native skill catalog.
|
|
13
|
+
- id: ppt-master-for-mgr
|
|
14
|
+
name: '@ljwei-stak/ppt-master-for-mgr'
|
|
12
15
|
# The router annotates multi-task approval requests; dsh-approval-gate
|
|
13
16
|
# owns the Flash decision, human handoff, audit and snapshot UI.
|
|
14
17
|
- id: dsh-approval-gate
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ljwei-stak/model-router-galgame",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.22",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "DeepSeek Harness plugin: adaptive model routing, cost analysis and GAL view",
|
|
6
6
|
"repository": {
|
|
@@ -66,7 +66,8 @@
|
|
|
66
66
|
"@liustack/modsearch": "5.10.1",
|
|
67
67
|
"@ljwei-stak/dsh-approval-gate": "0.5.3",
|
|
68
68
|
"schemastery": "3.18.0",
|
|
69
|
-
"@ljwei-stak/dsh-ego-browser": "0.8.3"
|
|
69
|
+
"@ljwei-stak/dsh-ego-browser": "0.8.3",
|
|
70
|
+
"@ljwei-stak/ppt-master-for-mgr": "6.3.1"
|
|
70
71
|
},
|
|
71
72
|
"peerDependencies": {
|
|
72
73
|
"@deepseek-ai/dsh-settings": "^0.1.1-rc.1",
|