dsh-config-manager 0.1.10 → 0.1.12
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/adapters/plugins.js +7 -3
- package/lib/adapters/plugins.js.map +1 -1
- package/lib/client.js +70 -70
- package/lib/core/plugin-cli.d.ts +133 -0
- package/lib/core/plugin-cli.js +401 -0
- package/lib/core/plugin-cli.js.map +1 -0
- package/lib/index.d.ts +41 -5
- package/lib/index.js +94 -54
- package/lib/index.js.map +1 -1
- package/package.json +10 -1
- package/src/adapters/plugins.test.ts +1 -0
- package/src/adapters/plugins.ts +7 -3
- package/src/core/plugin-cli.fs.test.ts +147 -0
- package/src/core/plugin-cli.test.ts +126 -0
- package/src/core/plugin-cli.ts +466 -0
- package/src/index.facade.test.ts +240 -0
- package/src/index.ts +106 -66
package/lib/adapters/plugins.js
CHANGED
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
* plugins 分区 adapter(设计 §3.3/§8):
|
|
3
3
|
* 数据源 = ctx.plugins.listInstalled()(插件清单)+ 用户 patch 层(profile cordis.patch.yml)。
|
|
4
4
|
*
|
|
5
|
-
* 安全不变量:绝不打包插件二进制;导入走 DSH 官方机制(
|
|
5
|
+
* 安全不变量:绝不打包插件二进制;导入走 DSH 官方机制(dsh plugin CLI → needsRestart 提示)。
|
|
6
6
|
* patch 行导入(用户自定义行:启用/禁用/插入)写回 cordis.patch.yml,同样 needsRestart。
|
|
7
7
|
*/
|
|
8
8
|
import { isDeepStrictEqual } from 'node:util';
|
|
9
|
+
import { resolveProfileNameFromArgv } from "../core/plugin-cli.js";
|
|
9
10
|
export const USER_PATCH_FILE = 'cordis.patch.yml';
|
|
10
11
|
/** patch 行 raw 是否由其他 adapter 管理(mcp-client 行 / systemPrompt / planMode 行)。
|
|
11
12
|
* 这些行的导入归 mcp.ts / prompts.ts,plugins 分区只负责普通用户行(启用/禁用/插入插件等)。 */
|
|
@@ -134,7 +135,8 @@ export class PluginsAdapter {
|
|
|
134
135
|
return items;
|
|
135
136
|
}
|
|
136
137
|
async applyItem(item, ctx) {
|
|
137
|
-
// 插件安装/更新:官方机制
|
|
138
|
+
// 插件安装/更新:官方机制 dsh plugin CLI(dsh plugin --profile <p> add <pkg>);
|
|
139
|
+
// needsRestart 提示(设计 §8:不打包二进制)。
|
|
138
140
|
// 版本冲突(useImported)会解析成 Update,同样走这条安装通道(官方机制只能装到 npm
|
|
139
141
|
// 最新版,无法精确锁定备份版本,故如实提示)。
|
|
140
142
|
// 失败为非致命 warning(§34.17):一个装不上的插件(npm 依赖冲突/网络不可达等)不得
|
|
@@ -158,7 +160,9 @@ export class PluginsAdapter {
|
|
|
158
160
|
return {
|
|
159
161
|
ok: false,
|
|
160
162
|
warning: true,
|
|
161
|
-
|
|
163
|
+
// 保留 warning(§34.17 非致命):一个装不上的插件不得拖垮已成功导入的其余配置;
|
|
164
|
+
// message 附可复制的手动安装命令(profile 解析与 M1 宿主一致)。
|
|
165
|
+
message: `插件 ${name} ${verb}失败:${msg}。可手动安装:dsh plugin --profile ${resolveProfileNameFromArgv()} add ${name}(其余配置已导入;可修复依赖后在设置页重试或手动安装)`,
|
|
162
166
|
};
|
|
163
167
|
}
|
|
164
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/adapters/plugins.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/adapters/plugins.ts"],"names":[],"mappings":"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"}
|
package/lib/client.js
CHANGED
|
@@ -581,93 +581,93 @@ if (typeof document !== "undefined" && document.querySelector("style[data-tag=\"
|
|
|
581
581
|
document.head.appendChild(tag);
|
|
582
582
|
}
|
|
583
583
|
var config_manager_module_css_default = {
|
|
584
|
-
"
|
|
585
|
-
"conflictId": "_367UGW_conflictId",
|
|
586
|
-
"groupList": "_367UGW_groupList",
|
|
587
|
-
"dshCmSpin": "_367UGW_dshCmSpin",
|
|
588
|
-
"viewBody": "_367UGW_viewBody",
|
|
584
|
+
"groupHeader": "_367UGW_groupHeader",
|
|
589
585
|
"input": "_367UGW_input",
|
|
590
|
-
"
|
|
586
|
+
"errorList": "_367UGW_errorList",
|
|
587
|
+
"iconButton": "_367UGW_iconButton",
|
|
588
|
+
"primaryButton": "_367UGW_primaryButton",
|
|
589
|
+
"errorLine": "_367UGW_errorLine",
|
|
591
590
|
"pathRow": "_367UGW_pathRow",
|
|
592
|
-
"
|
|
593
|
-
"errorAction": "_367UGW_errorAction",
|
|
594
|
-
"conflictOptions": "_367UGW_conflictOptions",
|
|
595
|
-
"dshCmIndeterminate": "_367UGW_dshCmIndeterminate",
|
|
596
|
-
"conflictDetail": "_367UGW_conflictDetail",
|
|
597
|
-
"badgeError": "_367UGW_badgeError",
|
|
591
|
+
"fieldLabel": "_367UGW_fieldLabel",
|
|
598
592
|
"spinner": "_367UGW_spinner",
|
|
599
|
-
"
|
|
600
|
-
"
|
|
601
|
-
"
|
|
593
|
+
"groupNote": "_367UGW_groupNote",
|
|
594
|
+
"banner": "_367UGW_banner",
|
|
595
|
+
"errorTitle": "_367UGW_errorTitle",
|
|
596
|
+
"modeHint": "_367UGW_modeHint",
|
|
597
|
+
"conflictDetail": "_367UGW_conflictDetail",
|
|
602
598
|
"dangerButton": "_367UGW_dangerButton",
|
|
599
|
+
"badgeError": "_367UGW_badgeError",
|
|
600
|
+
"reportView": "_367UGW_reportView",
|
|
603
601
|
"groupLabel": "_367UGW_groupLabel",
|
|
602
|
+
"conflictId": "_367UGW_conflictId",
|
|
603
|
+
"conflictHead": "_367UGW_conflictHead",
|
|
604
|
+
"modeTab": "_367UGW_modeTab",
|
|
605
|
+
"groupList": "_367UGW_groupList",
|
|
606
|
+
"conflictOptions": "_367UGW_conflictOptions",
|
|
607
|
+
"progressLabel": "_367UGW_progressLabel",
|
|
608
|
+
"pathIssueKind": "_367UGW_pathIssueKind",
|
|
609
|
+
"spinnerWrap": "_367UGW_spinnerWrap",
|
|
610
|
+
"dshCmIndeterminate": "_367UGW_dshCmIndeterminate",
|
|
611
|
+
"sectionBody": "_367UGW_sectionBody",
|
|
612
|
+
"errorBanner": "_367UGW_errorBanner",
|
|
613
|
+
"dshCmSpin": "_367UGW_dshCmSpin",
|
|
614
|
+
"errorReason": "_367UGW_errorReason",
|
|
615
|
+
"badge": "_367UGW_badge",
|
|
616
|
+
"progressPercent": "_367UGW_progressPercent",
|
|
617
|
+
"errorActionLabel": "_367UGW_errorActionLabel",
|
|
618
|
+
"optionsCard": "_367UGW_optionsCard",
|
|
604
619
|
"spinnerLabel": "_367UGW_spinnerLabel",
|
|
605
|
-
"
|
|
606
|
-
"
|
|
607
|
-
"
|
|
608
|
-
"
|
|
609
|
-
"
|
|
610
|
-
"categoryDesc": "_367UGW_categoryDesc",
|
|
611
|
-
"reportFooter": "_367UGW_reportFooter",
|
|
620
|
+
"conflictList": "_367UGW_conflictList",
|
|
621
|
+
"progressBar": "_367UGW_progressBar",
|
|
622
|
+
"pathValue": "_367UGW_pathValue",
|
|
623
|
+
"secretsList": "_367UGW_secretsList",
|
|
624
|
+
"progressTrack": "_367UGW_progressTrack",
|
|
612
625
|
"checkboxRow": "_367UGW_checkboxRow",
|
|
613
|
-
"
|
|
626
|
+
"sectionHeader": "_367UGW_sectionHeader",
|
|
614
627
|
"sectionTitleBlock": "_367UGW_sectionTitleBlock",
|
|
615
628
|
"badgeWarn": "_367UGW_badgeWarn",
|
|
616
|
-
"
|
|
617
|
-
"
|
|
618
|
-
"severityError": "_367UGW_severityError",
|
|
619
|
-
"badgeInfo": "_367UGW_badgeInfo",
|
|
620
|
-
"pathValue": "_367UGW_pathValue",
|
|
621
|
-
"viewTabs": "_367UGW_viewTabs",
|
|
622
|
-
"card": "_367UGW_card",
|
|
623
|
-
"groupHeader": "_367UGW_groupHeader",
|
|
624
|
-
"progressLabel": "_367UGW_progressLabel",
|
|
625
|
-
"progressTrack": "_367UGW_progressTrack",
|
|
626
|
-
"pathOld": "_367UGW_pathOld",
|
|
627
|
-
"pathIssueKind": "_367UGW_pathIssueKind",
|
|
628
|
-
"hint": "_367UGW_hint",
|
|
629
|
-
"actionRow": "_367UGW_actionRow",
|
|
630
|
-
"ghostButton": "_367UGW_ghostButton",
|
|
631
|
-
"badge": "_367UGW_badge",
|
|
632
|
-
"modeTab": "_367UGW_modeTab",
|
|
633
|
-
"errorList": "_367UGW_errorList",
|
|
634
|
-
"modeTabs": "_367UGW_modeTabs",
|
|
635
|
-
"errorLine": "_367UGW_errorLine",
|
|
636
|
-
"iconButton": "_367UGW_iconButton",
|
|
637
|
-
"reportView": "_367UGW_reportView",
|
|
638
|
-
"viewTab": "_367UGW_viewTab",
|
|
629
|
+
"progressMeta": "_367UGW_progressMeta",
|
|
630
|
+
"sectionTitle": "_367UGW_sectionTitle",
|
|
639
631
|
"groupItems": "_367UGW_groupItems",
|
|
640
|
-
"
|
|
641
|
-
"
|
|
642
|
-
"
|
|
632
|
+
"actionRow": "_367UGW_actionRow",
|
|
633
|
+
"progressBarDone": "_367UGW_progressBarDone",
|
|
634
|
+
"viewTabs": "_367UGW_viewTabs",
|
|
643
635
|
"section": "_367UGW_section",
|
|
644
636
|
"sectionSubtitle": "_367UGW_sectionSubtitle",
|
|
645
|
-
"
|
|
646
|
-
"
|
|
647
|
-
"
|
|
648
|
-
"
|
|
649
|
-
"
|
|
650
|
-
"progressBlock": "_367UGW_progressBlock",
|
|
651
|
-
"progressPercent": "_367UGW_progressPercent",
|
|
652
|
-
"progressBar": "_367UGW_progressBar",
|
|
653
|
-
"modeHint": "_367UGW_modeHint",
|
|
654
|
-
"progressMeta": "_367UGW_progressMeta",
|
|
655
|
-
"rollbackBox": "_367UGW_rollbackBox",
|
|
656
|
-
"errorFooter": "_367UGW_errorFooter",
|
|
657
|
-
"optionsCard": "_367UGW_optionsCard",
|
|
637
|
+
"modeTabs": "_367UGW_modeTabs",
|
|
638
|
+
"progressIndeterminate": "_367UGW_progressIndeterminate",
|
|
639
|
+
"categoryDesc": "_367UGW_categoryDesc",
|
|
640
|
+
"badgeInfo": "_367UGW_badgeInfo",
|
|
641
|
+
"radioLabel": "_367UGW_radioLabel",
|
|
658
642
|
"categoryName": "_367UGW_categoryName",
|
|
659
|
-
"
|
|
643
|
+
"hiddenFile": "_367UGW_hiddenFile",
|
|
644
|
+
"viewBody": "_367UGW_viewBody",
|
|
660
645
|
"progressDetail": "_367UGW_progressDetail",
|
|
661
|
-
"conflictItem": "_367UGW_conflictItem",
|
|
662
|
-
"primaryButton": "_367UGW_primaryButton",
|
|
663
646
|
"reportText": "_367UGW_reportText",
|
|
664
|
-
"
|
|
665
|
-
"
|
|
647
|
+
"errorAction": "_367UGW_errorAction",
|
|
648
|
+
"warnList": "_367UGW_warnList",
|
|
649
|
+
"hint": "_367UGW_hint",
|
|
650
|
+
"pathMappingList": "_367UGW_pathMappingList",
|
|
651
|
+
"badgeOk": "_367UGW_badgeOk",
|
|
652
|
+
"pathNew": "_367UGW_pathNew",
|
|
653
|
+
"reportFooter": "_367UGW_reportFooter",
|
|
654
|
+
"errorFooter": "_367UGW_errorFooter",
|
|
655
|
+
"statRow": "_367UGW_statRow",
|
|
656
|
+
"ghostButton": "_367UGW_ghostButton",
|
|
666
657
|
"empty": "_367UGW_empty",
|
|
658
|
+
"pathOld": "_367UGW_pathOld",
|
|
659
|
+
"secretFields": "_367UGW_secretFields",
|
|
660
|
+
"viewTab": "_367UGW_viewTab",
|
|
661
|
+
"card": "_367UGW_card",
|
|
662
|
+
"rollbackBox": "_367UGW_rollbackBox",
|
|
663
|
+
"progressBlock": "_367UGW_progressBlock",
|
|
667
664
|
"errorItem": "_367UGW_errorItem",
|
|
668
|
-
"
|
|
669
|
-
"
|
|
670
|
-
"
|
|
665
|
+
"field": "_367UGW_field",
|
|
666
|
+
"severityError": "_367UGW_severityError",
|
|
667
|
+
"conflictItem": "_367UGW_conflictItem",
|
|
668
|
+
"groupCard": "_367UGW_groupCard",
|
|
669
|
+
"formError": "_367UGW_formError",
|
|
670
|
+
"categoryItem": "_367UGW_categoryItem"
|
|
671
671
|
};
|
|
672
672
|
//#endregion
|
|
673
673
|
//#region src/client/common/ui.tsx
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dsh plugin CLI 通道(方案A 主机侧实现,M1)。
|
|
3
|
+
*
|
|
4
|
+
* 本模块是唯一的子进程启动点:把「安装 / 更新 profile 插件」转成官方
|
|
5
|
+
* `dsh plugin --profile <name> <args…>` 调用(dsh CLI 内部转发 pnpm,并在
|
|
6
|
+
* 成功后 reconcile dsh.profile.bundles),以及从 profile 文件实时读取已装
|
|
7
|
+
* 插件清单(不依赖 web 专用 pluginMarketplace / pluginInventory 服务)。
|
|
8
|
+
*
|
|
9
|
+
* 设计对齐:
|
|
10
|
+
* - dsh 官方实现 @deepseek-ai/dsh/lib/plugin-*.js(runPlugin / reconcilePlugins /
|
|
11
|
+
* exportsPatch 的 bundle 判定语义);
|
|
12
|
+
* - dshmarket src/dsh-cli.ts(dshArgv / spawnShim / killTree / spawnEnv)与
|
|
13
|
+
* src/profile.ts(readInstalled / readInstalledVersion / hasDshManifest)。
|
|
14
|
+
*
|
|
15
|
+
* 只依赖 node 内置模块,零 DSH 运行时依赖(M5 的 TDD 可直接单测本模块)。
|
|
16
|
+
*/
|
|
17
|
+
import type { ChildProcess } from 'node:child_process';
|
|
18
|
+
import type { PluginInfo } from './types.ts';
|
|
19
|
+
/**
|
|
20
|
+
* dsh 出厂自带的 in-box bundle(profile 模板自身安装的层):唯一从「已装
|
|
21
|
+
* 插件清单」中隐藏的名字。社区插件可以合法地发布在官方 scope 下,因此不能
|
|
22
|
+
* 按 scope 整段过滤(dshmarket #28 的结论)。
|
|
23
|
+
*/
|
|
24
|
+
export declare const INBOX_BUNDLES: ReadonlySet<string>;
|
|
25
|
+
/**
|
|
26
|
+
* profile 名合法性校验,与 dsh-app-boot 的 resolveProfileDir 一致:拒绝空名、
|
|
27
|
+
* 路径分隔符与保留名,防止 join(home, 'profiles', name) 越界。
|
|
28
|
+
*/
|
|
29
|
+
export declare function validateProfileName(profile: string): string;
|
|
30
|
+
/** Profile 目录:$DSH_HOME/profiles/<name>(homeDir 由宿主 resolveDshHome() 解析)。 */
|
|
31
|
+
export declare function resolveProfileDir(homeDir: string, profile: string): string;
|
|
32
|
+
/**
|
|
33
|
+
* 从启动参数解析 profile 名:`--profile <name>` → 缺省 'web'。与宿主 apply 时的
|
|
34
|
+
* resolveProfileName 同源(config 覆盖仅 apply 处有;报告/适配器场景用本函数即可)。
|
|
35
|
+
* argv 参数化便于测试;缺省读当前进程 argv。
|
|
36
|
+
* 宽容语义:缺值 / 值以 '-' 开头 / 校验非法 → 一律回退 'web'。消息构建路径
|
|
37
|
+
* (applyItem 失败分支、补行等)绝不允许因 profile 名抛错破坏非致命 warning;
|
|
38
|
+
* 且 launcher 在启动时已拒绝非法 profile,此分支实际不可达。
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveProfileNameFromArgv(argv?: readonly string[]): string;
|
|
41
|
+
interface ProfileManifest {
|
|
42
|
+
dependencies?: Record<string, string>;
|
|
43
|
+
dsh?: {
|
|
44
|
+
profile?: {
|
|
45
|
+
bundles?: string[];
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/** 读 profile package.json;不可读(未初始化 / 损坏)返回 null。 */
|
|
50
|
+
export declare function readProfileManifest(profileDir: string): ProfileManifest | null;
|
|
51
|
+
/** 写回 profile package.json(2 空格缩进 + 尾换行,与 dsh-app-boot 一致)。 */
|
|
52
|
+
export declare function writeProfileManifest(profileDir: string, manifest: ProfileManifest): void;
|
|
53
|
+
/** 真实已装的依赖(in-box bundles 过滤掉):name → 声明的版本 spec。 */
|
|
54
|
+
export declare function readInstalled(profileDir: string): Record<string, string>;
|
|
55
|
+
/** node_modules/<name>/package.json 里实际落盘的版本;未装 / 不可读为 null。 */
|
|
56
|
+
export declare function readInstalledVersion(profileDir: string, name: string): string | null;
|
|
57
|
+
/** 包的 package.json 是否声明 dsh.bundle.patch(即它是一个 bundle / profile 层)。 */
|
|
58
|
+
export declare function hasDshBundlePatch(pkgDir: string): boolean;
|
|
59
|
+
/**
|
|
60
|
+
* 维护 dsh.profile.bundles 与已装依赖一致(语义对齐官方 plugin 命令的
|
|
61
|
+
* reconcilePlugins,按「已装状态」而非依赖 diff 判定):
|
|
62
|
+
* - 声明 dsh.bundle.patch 的依赖必须出现在 bundles(追加在依赖顺序尾部);
|
|
63
|
+
* - bundles 中「曾是依赖、但不再是(移除或版本不再声明 patch)」的条目移出;
|
|
64
|
+
* - in-box bundles 不是依赖,永远不碰。
|
|
65
|
+
* 仅在确有变化时写回 package.json。返回是否写回。
|
|
66
|
+
*/
|
|
67
|
+
export declare function reconcileBundles(profileDir: string): boolean;
|
|
68
|
+
/** 实时读 profile 已装插件清单(先 reconcile bundles,再逐依赖取版本/bundle 属性)。 */
|
|
69
|
+
export declare function listInstalledPlugins(homeDir: string, profile: string): PluginInfo[];
|
|
70
|
+
/**
|
|
71
|
+
* 重放启动当前宿主进程的 dsh CLI:
|
|
72
|
+
* - process.argv[1] 是 dsh 入口(全局 bin / 源码启动的 bin.ts / bin.js)→ 用
|
|
73
|
+
* 当前 Node 重新执行该入口(execArgv 原样保留,cwd 靠近入口保持相对导入可解析);
|
|
74
|
+
* - 否则退回 PATH 上的 `dsh`(Windows 是 .cmd,需经 shell)。
|
|
75
|
+
*/
|
|
76
|
+
export declare function dshArgv(): {
|
|
77
|
+
file: string;
|
|
78
|
+
args: string[];
|
|
79
|
+
cwd: string | undefined;
|
|
80
|
+
viaShell: boolean;
|
|
81
|
+
};
|
|
82
|
+
/** 为一个 argv token 构造 cmd.exe 命令行引用(需要引用的 token 用双引号包裹并加倍内部引号)。 */
|
|
83
|
+
export declare function quoteCmdArg(arg: string): string;
|
|
84
|
+
/** 由 argv 构造 cmd.exe 命令行(仅 Windows 垫片路径使用)。 */
|
|
85
|
+
export declare function cmdCommandLine(argv: readonly string[]): string;
|
|
86
|
+
/**
|
|
87
|
+
* 杀掉子进程整棵进程树:Windows 的 kill() 只终止包装进程、pnpm 子进程还活着,
|
|
88
|
+
* 用 taskkill /T /F;POSIX 子进程独立进程组启动(detached),先 SIGTERM 组、
|
|
89
|
+
* 5 秒后 SIGKILL 兜底。
|
|
90
|
+
*/
|
|
91
|
+
export declare function killTree(child: ChildProcess): void;
|
|
92
|
+
/** 一次 dsh plugin 子进程调用的原始结果(M2 失败分类器的输入)。 */
|
|
93
|
+
export interface DshPluginResult {
|
|
94
|
+
exitCode: number | null;
|
|
95
|
+
timedOut: boolean;
|
|
96
|
+
stdout: string;
|
|
97
|
+
stderr: string;
|
|
98
|
+
/** spawn 自身失败(如 ENOENT);此时 exitCode 固定为 127。 */
|
|
99
|
+
spawnError?: string;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 运行 `dsh plugin --profile <profile> <pluginArgs…>`:
|
|
103
|
+
* cwd=profile 目录、CI 环境、windowsHide、pipe 输出、15 分钟超时杀进程树。
|
|
104
|
+
* 永远 resolve(不 throw),由调用方判定成败。
|
|
105
|
+
*/
|
|
106
|
+
export declare function runDshPlugin(profileDir: string, profile: string, pluginArgs: readonly string[], timeoutMs?: number): Promise<DshPluginResult>;
|
|
107
|
+
/**
|
|
108
|
+
* 已识别的 pnpm/dsh CLI 失败模式(纯函数,可独立单测)。
|
|
109
|
+
* 识别语义对齐 dshmarket src/pnpm-compat.ts:dsh 的包装行不提供原因,必须
|
|
110
|
+
* 从 pnpm 的真实诊断文本里认。
|
|
111
|
+
*/
|
|
112
|
+
export type DshPluginFailureCode = 'hoist-pattern-diff' | 'adding-to-root' | 'not-a-workspace' | 'release-age-violation' | 'git-build-blocked' | 'fetch-404' | 'transient-network' | 'pnpm-missing';
|
|
113
|
+
export interface DshPluginFailure {
|
|
114
|
+
code: DshPluginFailureCode;
|
|
115
|
+
/** 双语可操作消息(同一字符串内 zh / en)。 */
|
|
116
|
+
message: string;
|
|
117
|
+
/** true = 按消息指示重跑(重建 / 直接重试)通常即可恢复;false = 需要人工动作。 */
|
|
118
|
+
recoverable: boolean;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* 瞬时网络故障判定:pnpm 的 5xx 拉取码、meta 拉取放弃、以及穿透 dsh 包装的
|
|
122
|
+
* 原始 socket 错误。永久的形态(404、鉴权)刻意排除——重试只会加倍等坏消息。
|
|
123
|
+
*/
|
|
124
|
+
export declare function isTransientDshPluginFailure(output: string): boolean;
|
|
125
|
+
/**
|
|
126
|
+
* 把一次失败的 dsh plugin 调用的合并输出映射到已知失败模式。
|
|
127
|
+
* @param output - stdout+stderr 合并文本。
|
|
128
|
+
* @returns 分类结果;未识别返回 null(调用方展示原始摘要)。
|
|
129
|
+
*/
|
|
130
|
+
export declare function classifyDshPluginFailure(output: string): DshPluginFailure | null;
|
|
131
|
+
/** 安装失败 → 分类后的双语可读 Error;未识别则保留 stderr 尾部摘要。 */
|
|
132
|
+
export declare function installErrorFor(pkg: string, result: DshPluginResult): Error;
|
|
133
|
+
export {};
|