dsh-plugin-manager-companion 0.1.0 → 0.1.1
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/dist/about.js +42 -10
- package/dist/paths.d.ts +8 -0
- package/dist/paths.js +8 -0
- package/package.json +1 -1
package/dist/about.js
CHANGED
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import { existsSync, readFileSync, statSync } from 'node:fs';
|
|
22
22
|
import { dirname, join } from 'node:path';
|
|
23
|
-
import {
|
|
23
|
+
import { fileURLToPath } from 'node:url';
|
|
24
|
+
import { DSH_PACKAGE_NAME, OUR_PACKAGE_NAME, dshHome } from "./paths.js";
|
|
24
25
|
import { registryCachePath } from "./registry.js";
|
|
25
26
|
/**
|
|
26
27
|
* 读一个 JSON 文件的某个字符串字段。
|
|
@@ -67,21 +68,50 @@ function locateInstallAnchor(injected) {
|
|
|
67
68
|
/**
|
|
68
69
|
* 从锚点文件推出官方 dsh 的 package.json 路径。
|
|
69
70
|
*
|
|
70
|
-
*
|
|
71
|
-
*
|
|
72
|
-
*
|
|
71
|
+
* **判据是文件里的 `name` 字段,不是路径字符串**(真机缺陷修复,0.1.1)。
|
|
72
|
+
*
|
|
73
|
+
* 为什么改:原实现看路径后缀是否等于 `@deepseek-ai/dsh/package.json`。在官方 monorepo 里
|
|
74
|
+
* 那份文件的实际路径是 `apps/cli/package.json`——**内容完全正确**(`name` 就是 `@deepseek-ai/dsh`、
|
|
75
|
+
* version 也对),却因为路径不匹配被判成"不像官方包",DSH 版本显示未知。
|
|
76
|
+
* 而它的退路 `apps/cli/node_modules/@deepseek-ai/dsh/package.json` 在 monorepo 里根本不存在。
|
|
77
|
+
*
|
|
78
|
+
* 用路径认包 = 用代理代替事实(DESIGN §12.10)。包的身份写在 `name` 里,就该读 `name`。
|
|
79
|
+
*
|
|
80
|
+
* 顺序:
|
|
81
|
+
* 1. 锚点自身是 package.json 且 `name === '@deepseek-ai/dsh'` → 认;
|
|
82
|
+
* 2. 否则按安装根拼一个候选(锚点可能是安装目录),候选同样要 `name` 对得上;
|
|
83
|
+
* 3. 都不成立 → undefined(如实报"锚点不是官方包",不硬读一个可能不存在的文件)。
|
|
73
84
|
*
|
|
74
85
|
* @param anchor - 锚点路径。
|
|
75
86
|
* @returns 官方 dsh 的 package.json 路径;不像时 undefined。
|
|
76
87
|
*/
|
|
77
88
|
function dshManifestFrom(anchor) {
|
|
78
|
-
|
|
79
|
-
if (normalized.endsWith('@deepseek-ai/dsh/package.json'))
|
|
89
|
+
if (isDshManifest(anchor))
|
|
80
90
|
return anchor;
|
|
81
|
-
// 锚点也可能是安装根(含 node_modules
|
|
82
|
-
// 但**只在它真的存在时**才用——不存在就走 unknown。
|
|
91
|
+
// 锚点也可能是安装根(含 node_modules 的目录):拼一个候选,仍以 name 为准。
|
|
83
92
|
const candidate = join(dirname(anchor), 'node_modules', '@deepseek-ai', 'dsh', 'package.json');
|
|
84
|
-
return
|
|
93
|
+
return isDshManifest(candidate) ? candidate : undefined;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* 一个路径是不是官方 dsh 的 package.json。
|
|
97
|
+
*
|
|
98
|
+
* 判据只有一条:文件里的 `name` 字段等于官方包名(读不到或不是 JSON 时为 false)。
|
|
99
|
+
* **不看路径**:monorepo、workspace 链接、pnpm 虚拟 store 下的真实路径各不相同,
|
|
100
|
+
* 路径字符串不是包的身份。
|
|
101
|
+
*
|
|
102
|
+
* @param path - 候选路径。
|
|
103
|
+
* @returns 是官方 dsh 的 manifest 时 true。
|
|
104
|
+
*/
|
|
105
|
+
function isDshManifest(path) {
|
|
106
|
+
if (!existsSync(path))
|
|
107
|
+
return false;
|
|
108
|
+
try {
|
|
109
|
+
const parsed = JSON.parse(readFileSync(path, 'utf8'));
|
|
110
|
+
return parsed.name === DSH_PACKAGE_NAME;
|
|
111
|
+
}
|
|
112
|
+
catch {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
85
115
|
}
|
|
86
116
|
/**
|
|
87
117
|
* 读本插件自身的 package.json 版本。
|
|
@@ -97,7 +127,9 @@ function dshManifestFrom(anchor) {
|
|
|
97
127
|
*/
|
|
98
128
|
function readOwnVersion() {
|
|
99
129
|
try {
|
|
100
|
-
|
|
130
|
+
// 必须走 fileURLToPath:`new URL(...).pathname` 在 Windows 上返回 `/D:/…`(前导斜杠),
|
|
131
|
+
// join 之后变成 `\\D:\…`,包根再也找不到,版本显示未知(真机缺陷,0.1.1)。
|
|
132
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
101
133
|
const candidate = join(here, '..', 'package.json');
|
|
102
134
|
return readJsonField(candidate, 'version', '本插件版本');
|
|
103
135
|
}
|
package/dist/paths.d.ts
CHANGED
|
@@ -12,6 +12,14 @@
|
|
|
12
12
|
import type { ManifestField } from './types.ts';
|
|
13
13
|
/** 本包名(用于行 id、缓存目录、自识别)。 */
|
|
14
14
|
export declare const OUR_PACKAGE_NAME = "dsh-plugin-manager-companion";
|
|
15
|
+
/**
|
|
16
|
+
* 官方 DSH 运行时包名(用于按 `name` 字段认包,**不看路径**)。
|
|
17
|
+
*
|
|
18
|
+
* 为什么要有这个常量:包的身份写在 package.json 的 `name` 里。monorepo(`apps/cli/`)、
|
|
19
|
+
* workspace 链接、pnpm 虚拟 store 下的真实路径各不相同,用路径字符串认包会误判
|
|
20
|
+
* (0.1.1 修复的真机缺陷:官方 monorepo 下 DSH 版本显示未知)。
|
|
21
|
+
*/
|
|
22
|
+
export declare const DSH_PACKAGE_NAME = "@deepseek-ai/dsh";
|
|
15
23
|
/** 本插件的 Loader 行 id。**绝不用 'plugin-manager'**——官方 base bundle 已占用该 id。 */
|
|
16
24
|
export declare const OUR_ROW_ID = "dsh-plugin-manager-companion";
|
|
17
25
|
/** 解析 Harness home(DSH_HOME 优先,否则 ~/.dsh)。 */
|
package/dist/paths.js
CHANGED
|
@@ -14,6 +14,14 @@ import { join, resolve, sep } from 'node:path';
|
|
|
14
14
|
import { homedir } from 'node:os';
|
|
15
15
|
/** 本包名(用于行 id、缓存目录、自识别)。 */
|
|
16
16
|
export const OUR_PACKAGE_NAME = 'dsh-plugin-manager-companion';
|
|
17
|
+
/**
|
|
18
|
+
* 官方 DSH 运行时包名(用于按 `name` 字段认包,**不看路径**)。
|
|
19
|
+
*
|
|
20
|
+
* 为什么要有这个常量:包的身份写在 package.json 的 `name` 里。monorepo(`apps/cli/`)、
|
|
21
|
+
* workspace 链接、pnpm 虚拟 store 下的真实路径各不相同,用路径字符串认包会误判
|
|
22
|
+
* (0.1.1 修复的真机缺陷:官方 monorepo 下 DSH 版本显示未知)。
|
|
23
|
+
*/
|
|
24
|
+
export const DSH_PACKAGE_NAME = '@deepseek-ai/dsh';
|
|
17
25
|
/** 本插件的 Loader 行 id。**绝不用 'plugin-manager'**——官方 base bundle 已占用该 id。 */
|
|
18
26
|
export const OUR_ROW_ID = 'dsh-plugin-manager-companion';
|
|
19
27
|
/** 解析 Harness home(DSH_HOME 优先,否则 ~/.dsh)。 */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-plugin-manager-companion",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Companion to the official DSH plugin manager: pre-install quality gate, deep environment diagnostics, plugin marketplace, and skills/presets management.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"deepseek",
|