dsh-plugin-manager-companion 0.1.0
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/LICENSE +21 -0
- package/README.en.md +144 -0
- package/README.md +142 -0
- package/cordis.patch.yml +9 -0
- package/dist/about.d.ts +77 -0
- package/dist/about.js +179 -0
- package/dist/cli.d.ts +226 -0
- package/dist/cli.js +856 -0
- package/dist/client/AboutPage.d.ts +75 -0
- package/dist/client/ConsolePage.d.ts +79 -0
- package/dist/client/KindsPage.d.ts +21 -0
- package/dist/client/MarketplacePage.d.ts +36 -0
- package/dist/client/OfficialSlots.d.ts +35 -0
- package/dist/client/UpgradeRow.d.ts +108 -0
- package/dist/client/index.d.ts +26 -0
- package/dist/client/locales.d.ts +475 -0
- package/dist/client/pmSelect.d.ts +38 -0
- package/dist/client/shared.d.ts +928 -0
- package/dist/client/upgradeView.d.ts +278 -0
- package/dist/client/wire.d.ts +401 -0
- package/dist/client.js +9194 -0
- package/dist/diagnostics.d.ts +332 -0
- package/dist/diagnostics.js +2631 -0
- package/dist/envManager.d.ts +1047 -0
- package/dist/envManager.js +3214 -0
- package/dist/fix.d.ts +60 -0
- package/dist/fix.js +168 -0
- package/dist/guard.d.ts +133 -0
- package/dist/guard.js +232 -0
- package/dist/index.d.ts +121 -0
- package/dist/index.js +1150 -0
- package/dist/installSession.d.ts +111 -0
- package/dist/installSession.js +150 -0
- package/dist/kinds.d.ts +464 -0
- package/dist/kinds.js +1029 -0
- package/dist/marketView.d.ts +261 -0
- package/dist/marketView.js +406 -0
- package/dist/marketplace.d.ts +248 -0
- package/dist/marketplace.js +500 -0
- package/dist/match.d.ts +67 -0
- package/dist/match.js +203 -0
- package/dist/net.d.ts +108 -0
- package/dist/net.js +163 -0
- package/dist/official.d.ts +145 -0
- package/dist/official.js +205 -0
- package/dist/paths.d.ts +108 -0
- package/dist/paths.js +236 -0
- package/dist/presets.d.ts +299 -0
- package/dist/presets.js +578 -0
- package/dist/qualityGate.d.ts +66 -0
- package/dist/qualityGate.js +247 -0
- package/dist/rank.d.ts +88 -0
- package/dist/rank.js +164 -0
- package/dist/registry.d.ts +295 -0
- package/dist/registry.js +686 -0
- package/dist/rest.d.ts +122 -0
- package/dist/rest.js +219 -0
- package/dist/scan.d.ts +134 -0
- package/dist/scan.js +396 -0
- package/dist/settings.d.ts +447 -0
- package/dist/settings.js +263 -0
- package/dist/tags.d.ts +119 -0
- package/dist/tags.js +166 -0
- package/dist/tools.d.ts +131 -0
- package/dist/tools.js +377 -0
- package/dist/types.d.ts +651 -0
- package/dist/types.js +13 -0
- package/dist/upgrade.d.ts +428 -0
- package/dist/upgrade.js +1100 -0
- package/dist/upgradeView.d.ts +313 -0
- package/dist/upgradeView.js +273 -0
- package/docs/images/readme/01-console-health.png +0 -0
- package/docs/images/readme/02-console-envs.png +0 -0
- package/docs/images/readme/03-marketplace.png +0 -0
- package/docs/images/readme/04-official-plugin-page.png +0 -0
- package/package.json +104 -0
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* dshpmc —— dsh-plugin-manager-companion 的命令行入口。
|
|
4
|
+
*
|
|
5
|
+
* 归属:A 类·重写(可执行入口;旧 src/cli.ts 仅作意图参考,未复制代码)。
|
|
6
|
+
* 旧实现参考:dsh-web-plugin-manager/src/cli.ts(400 行:bin 名 dshpm、命令集合
|
|
7
|
+
* install/remove/update/mount/list/analyze/uninstall-kind、全局 flag
|
|
8
|
+
* --profile/--home/--env、ctx 可空时跳过 live 应用、git 源缺 env 时给出
|
|
9
|
+
* 续装命令)。
|
|
10
|
+
* 官方复用:**包操作全部走官方 @deepseek-ai/dsh-plugin-manager/operations 的
|
|
11
|
+
* runPluginCommand**——它自带 profile 写锁(withFileLock)、profile 初始化、
|
|
12
|
+
* 输出落盘与 bundle 激活,与 dsh plugin 命令、官方 plugin_manager 工具是同一条
|
|
13
|
+
* pnpm 通道。安装锚点优先取官方 @deepseek-ai/dsh/profile-boot 的 INSTALL_ANCHOR。
|
|
14
|
+
* 本文件不拼任何 pnpm 参数、不写 package.json、不碰 cordis.patch.yml。
|
|
15
|
+
* 前提检查:旧实现的前提(必须在 profile 里跑 pnpm、必须自己维护 insert 行)已消失:
|
|
16
|
+
* 0.1.6 的官方 operations 按 profile 参数化,所以"管理另一个环境"= 换一个
|
|
17
|
+
* profile 参数,不是自建第二条写路径。旧实现的 mount(自己往 patch 里写挂载行)
|
|
18
|
+
* 被**删除**:官方 plugin_manager 的 set_plugin/set_bundle 才是挂载与启停的唯一
|
|
19
|
+
* 入口,这里只做只读盘点并把正确动作报给用户。
|
|
20
|
+
*
|
|
21
|
+
* 退出码:0 成功;1 发现问题(analyze)/ 操作失败;2 用法或环境错误。
|
|
22
|
+
* bin 名刻意用 dshpmc(旧包用 dshpm),两个包共存期间不会互相抢 bin。
|
|
23
|
+
*/
|
|
24
|
+
import { type CompanionConfig } from './settings.ts';
|
|
25
|
+
import type { DiagnosticReport, EnvironmentInfo } from './types.ts';
|
|
26
|
+
/** 官方 runPluginCommand 的入参形状(结构式,见下)。 */
|
|
27
|
+
export interface PluginOperationContext {
|
|
28
|
+
readonly profile: string;
|
|
29
|
+
/** 显式环境目录;省略时官方自己解析。 */
|
|
30
|
+
readonly dir?: string;
|
|
31
|
+
/** dsh 自身安装的 package.json 绝对路径。 */
|
|
32
|
+
readonly installAnchor: string;
|
|
33
|
+
/** 调用方的工作目录(相对路径安装源按它解析)。 */
|
|
34
|
+
readonly cwd: string;
|
|
35
|
+
/** Harness home。 */
|
|
36
|
+
readonly home?: string;
|
|
37
|
+
}
|
|
38
|
+
/** 官方包操作的执行策略。 */
|
|
39
|
+
export interface PluginOperationOptions {
|
|
40
|
+
readonly execution: 'cli' | 'service';
|
|
41
|
+
readonly outputBytes: number;
|
|
42
|
+
readonly lockWaitMs?: number;
|
|
43
|
+
readonly env?: Readonly<Record<string, string>>;
|
|
44
|
+
readonly onOutput?: (text: string, stream: 'stdout' | 'stderr') => void;
|
|
45
|
+
}
|
|
46
|
+
/** 官方包操作的返回。 */
|
|
47
|
+
export interface PluginOperationResult {
|
|
48
|
+
readonly exitCode: number | null;
|
|
49
|
+
readonly output: string;
|
|
50
|
+
/** 失败分类(官方 classifyInstallFailure 的结果),可能缺省。 */
|
|
51
|
+
readonly kind?: string;
|
|
52
|
+
/** 官方写下的完整日志路径。 */
|
|
53
|
+
readonly logPath?: string;
|
|
54
|
+
}
|
|
55
|
+
/** 与官方 operations 对接的那一个函数。 */
|
|
56
|
+
export type RunPluginCommand = (context: PluginOperationContext, args: readonly string[], options: PluginOperationOptions) => Promise<PluginOperationResult>;
|
|
57
|
+
/** CLI 的可注入依赖(测试用来替代真实 pnpm 与诊断引擎)。 */
|
|
58
|
+
export interface CliDependencies {
|
|
59
|
+
/** 跑一次修复动作;由宿主注入(CLI 不 import 诊断引擎,见文件头说明)。 */
|
|
60
|
+
readonly analyze?: (environmentName: string, config: CompanionConfig) => Promise<DiagnosticReport>;
|
|
61
|
+
/** 官方 runPluginCommand;缺省时 CLI 会动态 import 官方包,两条路都不通就报错。 */
|
|
62
|
+
readonly runPluginCommand?: RunPluginCommand;
|
|
63
|
+
/** 安装锚点覆盖(宿主进程里应传 ctx.profileContext.installAnchor)。 */
|
|
64
|
+
readonly installAnchor?: string;
|
|
65
|
+
/** 标准输出。 */
|
|
66
|
+
readonly stdout?: (text: string) => void;
|
|
67
|
+
/** 标准错误。 */
|
|
68
|
+
readonly stderr?: (text: string) => void;
|
|
69
|
+
}
|
|
70
|
+
/** 解析后的全局 flag。 */
|
|
71
|
+
export interface CliOptions {
|
|
72
|
+
readonly command: string;
|
|
73
|
+
/** 位置参数(命令之后的非 flag 词)。 */
|
|
74
|
+
readonly args: readonly string[];
|
|
75
|
+
readonly profile: string;
|
|
76
|
+
/** --home 覆盖;未给时 undefined。 */
|
|
77
|
+
readonly home?: string;
|
|
78
|
+
/** --env KEY=value。 */
|
|
79
|
+
readonly env: Readonly<Record<string, string>>;
|
|
80
|
+
readonly json: boolean;
|
|
81
|
+
/** 少数命令的支持项:marketplace 强制刷新等;也用于跳过确认类动作。 */
|
|
82
|
+
readonly flags: ReadonlySet<string>;
|
|
83
|
+
}
|
|
84
|
+
/** 默认 profile(与旧实现一致:web 是绝大多数用户的环境)。 */
|
|
85
|
+
export declare const DEFAULT_PROFILE = "web";
|
|
86
|
+
/** 用法文本。 */
|
|
87
|
+
export declare const USAGE: string;
|
|
88
|
+
/**
|
|
89
|
+
* 解析 argv。
|
|
90
|
+
*
|
|
91
|
+
* 全局 flag 可以出现在命令前或命令后(与官方 CLI 的解析器一致),因此解析一遍
|
|
92
|
+
* 就够,不需要位置状态机。未知 flag 也接受:CLI 是给工具与其他脚本调的,
|
|
93
|
+
* 对未知 flag 报错只会让上游版本升级变脆。
|
|
94
|
+
*
|
|
95
|
+
* @param argv - 进程参数(不含 node 与脚本路径),也可以用完整 process.argv。
|
|
96
|
+
* @returns 解析结果。
|
|
97
|
+
* @throws 缺少命令名或 --env 形式非法时。
|
|
98
|
+
*/
|
|
99
|
+
export declare function parseArgs(argv: readonly string[]): CliOptions;
|
|
100
|
+
/**
|
|
101
|
+
* 解析官方 dsh 安装的 package.json 锚点。
|
|
102
|
+
*
|
|
103
|
+
* 三条路,按可靠性排序:
|
|
104
|
+
* 1. 注入(宿主进程里应传 ctx.profileContext.installAnchor);
|
|
105
|
+
* 2. 官方 @deepseek-ai/dsh/profile-boot 的 INSTALL_ANCHOR(CLI 跑在装了 dsh 的
|
|
106
|
+
* profile 里时可用);
|
|
107
|
+
* 3. 从 CLI 自身位置向上找 node_modules/@deepseek-ai/dsh/package.json。
|
|
108
|
+
* 三条都不通时**不猜**:返回 undefined,由调用方给出可执行的报错。
|
|
109
|
+
*
|
|
110
|
+
* @param injected - 注入的锚点。
|
|
111
|
+
* @returns 锚点绝对路径;解析不出时 undefined。
|
|
112
|
+
*/
|
|
113
|
+
export declare function resolveInstallAnchor(injected?: string): Promise<string | undefined>;
|
|
114
|
+
/**
|
|
115
|
+
* 取官方 runPluginCommand;注入优先,否则动态 import。
|
|
116
|
+
*
|
|
117
|
+
* 动态 import 而不是静态 import 的原因是构建顺序:静态 import 会让本文件的编译
|
|
118
|
+
* 依赖官方子路径的解析结果,而 CLI 可能在官方包不可用的环境里构建/使用。
|
|
119
|
+
* 解析失败不是一个崩溃点,而是一个可读的操作错误。
|
|
120
|
+
*
|
|
121
|
+
* @param injected - 注入的实现。
|
|
122
|
+
* @returns 官方实现。
|
|
123
|
+
* @throws 官方包不可解析时。
|
|
124
|
+
*/
|
|
125
|
+
export declare function loadRunPluginCommand(injected?: RunPluginCommand): Promise<RunPluginCommand>;
|
|
126
|
+
/** 引擎模块的最小结构式视图:动态加载,加载失败也要能报出可读原因。 */
|
|
127
|
+
interface AnalyzerModule {
|
|
128
|
+
analyzeEnvironment(ctx: unknown, env: Record<string, unknown>, config: CompanionConfig): Promise<DiagnosticReport>;
|
|
129
|
+
}
|
|
130
|
+
/** 诊断目标:EnvironmentInfo 加上可选安装锚点(与 diagnostics.ts 的 DiagnosticTargetEnvironment 同形)。 */
|
|
131
|
+
type AnalyzeTarget = EnvironmentInfo & {
|
|
132
|
+
readonly installAnchor?: string;
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* 最小 host 上下文。
|
|
136
|
+
*
|
|
137
|
+
* 引擎对 ctx 只做两件事:ctx.get('profileContext') 取安装锚点、ctx.logger 记账。
|
|
138
|
+
* CLI 进程里两样都没有:get 一律 undefined(引擎会把它记成"没有锚点"的 skipped,
|
|
139
|
+
* 而不是当成"包不存在"),logger 用空实现。**不假装自己是宿主**。
|
|
140
|
+
*
|
|
141
|
+
* @returns 结构式最小上下文。
|
|
142
|
+
*/
|
|
143
|
+
export declare function minimalCliContext(): {
|
|
144
|
+
get(name: string): undefined;
|
|
145
|
+
logger: Record<string, () => void>;
|
|
146
|
+
};
|
|
147
|
+
/**
|
|
148
|
+
* 动态加载诊断引擎。
|
|
149
|
+
*
|
|
150
|
+
* 刻意不用静态 import:CLI 要在引擎的官方依赖(app-boot / plugin-inventory 等)缺失时
|
|
151
|
+
* 也能报出**可读的原因**,而不是让整个 bin 加载失败。说明符放在变量里,避免打包/编译期
|
|
152
|
+
* 去解析一个不保证存在的模块。
|
|
153
|
+
*
|
|
154
|
+
* @returns 引擎模块或失败原因。
|
|
155
|
+
*/
|
|
156
|
+
export declare function loadAnalyzer(): Promise<{
|
|
157
|
+
readonly analyzer?: AnalyzerModule;
|
|
158
|
+
readonly reason?: string;
|
|
159
|
+
}>;
|
|
160
|
+
/**
|
|
161
|
+
* 由磁盘事实构造诊断目标(不依赖宿主)。
|
|
162
|
+
*
|
|
163
|
+
* @param name - 环境名。
|
|
164
|
+
* @param installAnchor - 已解析的安装锚点;解析不出时不传(引擎会如实记 skipped)。
|
|
165
|
+
* @returns 诊断目标。
|
|
166
|
+
*/
|
|
167
|
+
export declare function environmentTargetFor(name: string, installAnchor?: string): AnalyzeTarget;
|
|
168
|
+
/**
|
|
169
|
+
* 启动阶段硬失败的根因特征。
|
|
170
|
+
*
|
|
171
|
+
* 这三种"脏"会让 dsh 在启动阶段就退出:用户连界面都没有,诊断页也永远看不到。
|
|
172
|
+
* CLI 是唯一的逃生口,所以这里把根因文本显式挑出来单独展示——即便它在报告里的
|
|
173
|
+
* 身份只是"某层被跳过的原因"(官方 composeEntries / loadProfileDirectory 会抛错,
|
|
174
|
+
* 引擎把抛错原因记进 skipped)。
|
|
175
|
+
*/
|
|
176
|
+
export declare const BOOT_BLOCKER_SIGNATURES: readonly string[];
|
|
177
|
+
/**
|
|
178
|
+
* 关键核对项:这些没跑完,就不能说"环境没问题"。
|
|
179
|
+
*
|
|
180
|
+
* 与"结构性不可用"分开:CLI 里没有活 Loader,运行时层(runtime)永远跳过,那是**已知且预期**
|
|
181
|
+
* 的缺失(要显著告知,但不构成"有问题");而依赖/组合/一致性三层是只读磁盘就能跑的,
|
|
182
|
+
* 它们跳过说明这次诊断并没有真正覆盖到"环境能不能起来"。
|
|
183
|
+
*/
|
|
184
|
+
export declare const CRITICAL_SKIP_CHECKS: readonly string[];
|
|
185
|
+
/** 一次诊断的完整判定:覆盖情况 + 根因 + 退出码语义。 */
|
|
186
|
+
export interface AnalyzeCoverage {
|
|
187
|
+
/** 哪个层跑完了 / 跳过了 / 被配置关闭。 */
|
|
188
|
+
readonly layers: readonly {
|
|
189
|
+
readonly layer: string;
|
|
190
|
+
readonly state: 'ran' | 'skipped' | 'disabled';
|
|
191
|
+
}[];
|
|
192
|
+
/** 关键核对项没完成的原因(人类可读)。 */
|
|
193
|
+
readonly incomplete: readonly string[];
|
|
194
|
+
/** 启动阶段硬失败的根因文本(可能来自 skipped.reason,而不只是 issues)。 */
|
|
195
|
+
readonly blockers: readonly string[];
|
|
196
|
+
/** 判定:发现问题 / 没跑完 / 干净。 */
|
|
197
|
+
readonly verdict: 'issues' | 'incomplete' | 'clean';
|
|
198
|
+
/** 退出码:0 干净;1 有问题或没跑完;2 用法/环境错误由调用方给。 */
|
|
199
|
+
readonly code: number;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* 判定一次诊断的结果与退出码。
|
|
203
|
+
*
|
|
204
|
+
* 语义(刻意不让 issues=0 等于"健康"):
|
|
205
|
+
* - 有问题 → 'issues' / 1;
|
|
206
|
+
* - 没问题但**关键核对项没跑完**(组合层读不出来、缺安装锚点)→ 'incomplete' / 1,
|
|
207
|
+
* 由调用方在文案里说清楚"这次没能完成组合层核对";
|
|
208
|
+
* - 只有关键项都跑完且没问题才是 'clean' / 0。
|
|
209
|
+
*
|
|
210
|
+
* @param report - 引擎报告。
|
|
211
|
+
* @param notes - 调用方补充的事实(例如"没有安装锚点")。
|
|
212
|
+
* @returns 判定结果。
|
|
213
|
+
*/
|
|
214
|
+
export declare function judgeAnalyze(report: DiagnosticReport, notes?: {
|
|
215
|
+
readonly anchorMissing?: boolean;
|
|
216
|
+
readonly disabledLayers?: readonly string[];
|
|
217
|
+
}): AnalyzeCoverage;
|
|
218
|
+
/**
|
|
219
|
+
* CLI 主入口。
|
|
220
|
+
*
|
|
221
|
+
* @param argv - 参数(不含 node 与脚本路径;传 process.argv.slice(2))。
|
|
222
|
+
* @param deps - 可注入依赖(测试/宿主用)。
|
|
223
|
+
* @returns 退出码。
|
|
224
|
+
*/
|
|
225
|
+
export declare function main(argv: readonly string[], deps?: CliDependencies): Promise<number>;
|
|
226
|
+
export {};
|