@dsh-enhanced/dsh-rsi-cli 0.1.55 → 0.1.57
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/README.md +53 -229
- package/lib/host-runtime.js +3 -3
- package/lib/host-runtime.js.map +1 -1
- package/lib/index.d.ts +5 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +119 -4
- package/lib/index.js.map +1 -1
- package/lib/install-host.js +2 -2
- package/lib/install-host.js.map +1 -1
- package/lib/install.d.ts.map +1 -1
- package/lib/install.js +41 -3
- package/lib/install.js.map +1 -1
- package/lib/program-update.d.ts +29 -0
- package/lib/program-update.d.ts.map +1 -0
- package/lib/program-update.js +400 -0
- package/lib/program-update.js.map +1 -0
- package/lib/update.d.ts +4 -3
- package/lib/update.d.ts.map +1 -1
- package/lib/update.js +23 -5
- package/lib/update.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { spawnSync } from 'node:child_process';
|
|
3
|
+
import { constants } from 'node:fs';
|
|
4
|
+
import { lstat, open, readdir, realpath } from 'node:fs/promises';
|
|
5
|
+
import { dirname, isAbsolute, join, resolve, sep } from 'node:path';
|
|
6
|
+
import { PurgeError } from "./purge.js";
|
|
7
|
+
const profilePattern = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/u;
|
|
8
|
+
const auxiliaryPattern = /^host-migration-[a-f0-9]{20}$/u;
|
|
9
|
+
const digestPattern = /^[a-f0-9]{64}$/u;
|
|
10
|
+
const defaultPorts = {
|
|
11
|
+
run(command, args, cwd, capture = true) {
|
|
12
|
+
const result = spawnSync(command, [...args], { cwd, encoding: 'utf8', stdio: capture ? ['inherit', 'pipe', 'inherit'] : 'inherit' });
|
|
13
|
+
return { status: result.status, stdout: result.stdout ?? '' };
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
function fail(reason) { throw new PurgeError(`冻结 owner 更新:${reason}`); }
|
|
17
|
+
async function ownedDirectory(path) {
|
|
18
|
+
const entry = await lstat(path);
|
|
19
|
+
if (!entry.isDirectory() || entry.isSymbolicLink() || entry.uid !== process.getuid?.() || (entry.mode & 0o022)) {
|
|
20
|
+
fail(`目录归属或权限不安全:${path}`);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function privateJson(path, limit) {
|
|
24
|
+
const descriptor = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW);
|
|
25
|
+
try {
|
|
26
|
+
const before = await descriptor.stat();
|
|
27
|
+
if (!before.isFile() || before.nlink !== 1 || before.uid !== process.getuid?.()
|
|
28
|
+
|| (before.mode & 0o077) || before.size < 1 || before.size > limit)
|
|
29
|
+
fail(`收据不安全:${path}`);
|
|
30
|
+
const bytes = await descriptor.readFile();
|
|
31
|
+
const after = await descriptor.stat();
|
|
32
|
+
const named = await lstat(path);
|
|
33
|
+
if (bytes.length !== before.size || before.dev !== after.dev || before.ino !== after.ino
|
|
34
|
+
|| before.size !== after.size || before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs
|
|
35
|
+
|| named.dev !== before.dev || named.ino !== before.ino || named.isSymbolicLink())
|
|
36
|
+
fail(`收据读取期间变化:${path}`);
|
|
37
|
+
const value = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes));
|
|
38
|
+
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
39
|
+
fail(`收据格式错误:${path}`);
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
await descriptor.close();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
async function names(path) {
|
|
47
|
+
try {
|
|
48
|
+
return await readdir(path);
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
if (error.code === 'ENOENT')
|
|
52
|
+
return [];
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function sameNames(actual, expected) {
|
|
57
|
+
const sortedExpected = [...expected].sort();
|
|
58
|
+
return actual.length === expected.length && [...actual].sort().every((name, index) => name === sortedExpected[index]);
|
|
59
|
+
}
|
|
60
|
+
function sortedUnique(values) {
|
|
61
|
+
const sorted = [...new Set(values)].sort();
|
|
62
|
+
return values.length === sorted.length && values.every((value, index) => value === sorted[index]);
|
|
63
|
+
}
|
|
64
|
+
async function stableArtifactDigest(path, profile) {
|
|
65
|
+
const descriptor = await open(path, constants.O_RDONLY | constants.O_NOFOLLOW).catch(() => fail(`辅助 cohort 制品文件不安全:${profile}`));
|
|
66
|
+
try {
|
|
67
|
+
const before = await descriptor.stat();
|
|
68
|
+
if (!before.isFile() || before.nlink !== 1 || before.uid !== process.getuid?.()
|
|
69
|
+
|| (before.mode & 0o022) || before.size < 1 || before.size > 268_435_456) {
|
|
70
|
+
fail(`辅助 cohort 制品文件不安全:${profile}`);
|
|
71
|
+
}
|
|
72
|
+
const hash = createHash('sha256');
|
|
73
|
+
let length = 0;
|
|
74
|
+
for await (const chunk of descriptor.createReadStream({ autoClose: false })) {
|
|
75
|
+
length += chunk.length;
|
|
76
|
+
if (length > 268_435_456)
|
|
77
|
+
fail(`辅助 cohort 制品超过大小上限:${profile}`);
|
|
78
|
+
hash.update(chunk);
|
|
79
|
+
}
|
|
80
|
+
const after = await descriptor.stat();
|
|
81
|
+
const named = await lstat(path);
|
|
82
|
+
if (length !== before.size || before.dev !== after.dev || before.ino !== after.ino
|
|
83
|
+
|| before.size !== after.size || before.mtimeMs !== after.mtimeMs || before.ctimeMs !== after.ctimeMs
|
|
84
|
+
|| named.dev !== before.dev || named.ino !== before.ino || named.isSymbolicLink()) {
|
|
85
|
+
fail(`辅助 cohort 制品读取期间变化:${profile}`);
|
|
86
|
+
}
|
|
87
|
+
return hash.digest('hex');
|
|
88
|
+
}
|
|
89
|
+
finally {
|
|
90
|
+
await descriptor.close();
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function auxiliarySourceRepository(home, sourceRepository, repository) {
|
|
94
|
+
if (sourceRepository === repository)
|
|
95
|
+
return true;
|
|
96
|
+
if (typeof sourceRepository !== 'string')
|
|
97
|
+
return false;
|
|
98
|
+
const parent = join(dirname(home), `.dsh-rsi-local-updates-${createHash('sha256').update(home).digest('hex').slice(0, 16)}`);
|
|
99
|
+
const prefix = `${parent}${sep}`;
|
|
100
|
+
if (!sourceRepository.startsWith(prefix))
|
|
101
|
+
return false;
|
|
102
|
+
const relative = sourceRepository.slice(prefix.length).split(sep);
|
|
103
|
+
return relative.length === 3 && digestPattern.test(relative[0])
|
|
104
|
+
&& relative[1] === 'source' && relative[2] === 'repository'
|
|
105
|
+
&& sourceRepository === join(parent, ...relative);
|
|
106
|
+
}
|
|
107
|
+
async function verifyAuxiliaryCohort(home, profile, repository) {
|
|
108
|
+
if (!auxiliaryPattern.test(profile))
|
|
109
|
+
fail(`未知本地 cohort:${profile}`);
|
|
110
|
+
const realProfile = await lstat(join(home, 'profiles', profile)).catch(error => {
|
|
111
|
+
if (error.code === 'ENOENT')
|
|
112
|
+
return undefined;
|
|
113
|
+
throw error;
|
|
114
|
+
});
|
|
115
|
+
if (realProfile !== undefined)
|
|
116
|
+
fail(`辅助 cohort 与真实 profile 同名:${profile}`);
|
|
117
|
+
const root = join(home, 'rsi-local-cohorts', profile);
|
|
118
|
+
const rootEntry = await lstat(root);
|
|
119
|
+
if (!rootEntry.isDirectory() || rootEntry.isSymbolicLink() || rootEntry.uid !== process.getuid?.()
|
|
120
|
+
|| (rootEntry.mode & 0o077))
|
|
121
|
+
fail(`辅助 cohort 目录不安全:${profile}`);
|
|
122
|
+
if (!sameNames(await names(root), ['artifacts', 'receipt.json']))
|
|
123
|
+
fail(`辅助 cohort 包含未知文件:${profile}`);
|
|
124
|
+
const artifactRoot = join(root, 'artifacts');
|
|
125
|
+
const artifactEntry = await lstat(artifactRoot);
|
|
126
|
+
if (!artifactEntry.isDirectory() || artifactEntry.isSymbolicLink() || artifactEntry.uid !== process.getuid?.()
|
|
127
|
+
|| (artifactEntry.mode & 0o077))
|
|
128
|
+
fail(`辅助制品目录不安全:${profile}`);
|
|
129
|
+
const receipt = await privateJson(join(root, 'receipt.json'), 16_777_216);
|
|
130
|
+
const keys = ['allowBuilds', 'bundles', 'packages', 'receiptDigest', 'root', 'schemaVersion', 'sourceCommit',
|
|
131
|
+
'sourceRepository', 'version'];
|
|
132
|
+
if (!sameNames(Object.keys(receipt), keys) || receipt.schemaVersion !== 1 || receipt.root !== root
|
|
133
|
+
|| !auxiliarySourceRepository(home, receipt.sourceRepository, repository) || typeof receipt.sourceCommit !== 'string'
|
|
134
|
+
|| !/^[a-f0-9]{40}$/u.test(receipt.sourceCommit) || typeof receipt.version !== 'string'
|
|
135
|
+
|| !/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u.test(receipt.version)
|
|
136
|
+
|| !Array.isArray(receipt.bundles) || !Array.isArray(receipt.packages)
|
|
137
|
+
|| receipt.packages.length < 1 || receipt.packages.length > 128
|
|
138
|
+
|| receipt.allowBuilds === null || typeof receipt.allowBuilds !== 'object' || Array.isArray(receipt.allowBuilds)
|
|
139
|
+
|| typeof receipt.receiptDigest !== 'string' || !digestPattern.test(receipt.receiptDigest)) {
|
|
140
|
+
fail(`辅助 cohort 收据格式或绑定无效:${profile}`);
|
|
141
|
+
}
|
|
142
|
+
const bundles = receipt.bundles;
|
|
143
|
+
if (bundles.length < 1
|
|
144
|
+
|| bundles.some(bundle => typeof bundle !== 'string' || !/^[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(bundle))
|
|
145
|
+
|| !sortedUnique(bundles)) {
|
|
146
|
+
fail(`辅助 cohort bundle 清单无效:${profile}`);
|
|
147
|
+
}
|
|
148
|
+
const allowedBuilds = Object.entries(receipt.allowBuilds);
|
|
149
|
+
if (allowedBuilds.length > 128 || !sortedUnique(allowedBuilds.map(([name]) => name))
|
|
150
|
+
|| allowedBuilds.some(([name, enabled]) => !/^(@[a-z0-9._-]+\/)?[a-z0-9._-]+$/u.test(name) || typeof enabled !== 'boolean')) {
|
|
151
|
+
fail(`辅助 cohort allowBuilds 无效:${profile}`);
|
|
152
|
+
}
|
|
153
|
+
const { receiptDigest, ...body } = receipt;
|
|
154
|
+
if (createHash('sha256').update(JSON.stringify(body)).digest('hex') !== receiptDigest) {
|
|
155
|
+
fail(`辅助 cohort 收据摘要不一致:${profile}`);
|
|
156
|
+
}
|
|
157
|
+
const expectedArtifacts = [];
|
|
158
|
+
const packageNames = [];
|
|
159
|
+
const records = [];
|
|
160
|
+
for (const item of receipt.packages) {
|
|
161
|
+
if (item === null || typeof item !== 'object' || Array.isArray(item))
|
|
162
|
+
fail(`辅助 cohort 包记录无效:${profile}`);
|
|
163
|
+
const record = item;
|
|
164
|
+
if (typeof record.name !== 'string' || !/^@dsh-enhanced\/[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(record.name)
|
|
165
|
+
|| typeof record.sha256 !== 'string' || !digestPattern.test(record.sha256))
|
|
166
|
+
fail(`辅助 cohort 包记录无效:${profile}`);
|
|
167
|
+
const slug = record.name.slice('@dsh-enhanced/'.length);
|
|
168
|
+
const artifact = `${slug}.tgz`;
|
|
169
|
+
if (!sameNames(Object.keys(record), ['bundle', 'files', 'name', 'path', 'runtimeDependencies', 'sha256', 'tarball'])
|
|
170
|
+
|| record.path !== `plugins/${slug}` && record.path !== `packages/${slug}`
|
|
171
|
+
|| record.bundle !== (record.path === `plugins/${slug}`)
|
|
172
|
+
|| record.tarball !== join(artifactRoot, artifact))
|
|
173
|
+
fail(`辅助 cohort 包记录无效:${profile}`);
|
|
174
|
+
expectedArtifacts.push(artifact);
|
|
175
|
+
packageNames.push(record.name);
|
|
176
|
+
records.push(record);
|
|
177
|
+
}
|
|
178
|
+
if (!sortedUnique(packageNames) || !sameNames(await names(artifactRoot), expectedArtifacts)) {
|
|
179
|
+
fail(`辅助 cohort 制品清单不匹配:${profile}`);
|
|
180
|
+
}
|
|
181
|
+
for (const record of records) {
|
|
182
|
+
if (!Array.isArray(record.runtimeDependencies) || !Array.isArray(record.files)) {
|
|
183
|
+
fail(`辅助 cohort 包依赖或文件清单无效:${profile}`);
|
|
184
|
+
}
|
|
185
|
+
const dependencies = record.runtimeDependencies;
|
|
186
|
+
if (dependencies.some(name => typeof name !== 'string' || !name.startsWith('@dsh-enhanced/'))
|
|
187
|
+
|| !sortedUnique(dependencies)
|
|
188
|
+
|| dependencies.some(name => !packageNames.includes(name))) {
|
|
189
|
+
fail(`辅助 cohort 包依赖闭包无效:${profile}`);
|
|
190
|
+
}
|
|
191
|
+
const files = record.files;
|
|
192
|
+
const filePaths = [];
|
|
193
|
+
for (const file of files) {
|
|
194
|
+
if (file === null || typeof file !== 'object' || Array.isArray(file))
|
|
195
|
+
fail(`辅助 cohort 文件记录无效:${profile}`);
|
|
196
|
+
const value = file;
|
|
197
|
+
if (!sameNames(Object.keys(value), ['mode', 'path', 'sha256'])
|
|
198
|
+
|| typeof value.path !== 'string' || value.path.startsWith('/')
|
|
199
|
+
|| value.path.split('/').some(part => !part || part === '.' || part === '..')
|
|
200
|
+
|| typeof value.sha256 !== 'string' || !digestPattern.test(value.sha256)
|
|
201
|
+
|| !Number.isInteger(value.mode) || value.mode < 0 || value.mode > 0o777) {
|
|
202
|
+
fail(`辅助 cohort 文件记录无效:${profile}`);
|
|
203
|
+
}
|
|
204
|
+
filePaths.push(value.path);
|
|
205
|
+
}
|
|
206
|
+
if (!sortedUnique(filePaths))
|
|
207
|
+
fail(`辅助 cohort 文件清单顺序无效:${profile}`);
|
|
208
|
+
}
|
|
209
|
+
for (const slug of [...bundles, 'assistant-policy', 'assistant-automations', 'plugin-control-plane']) {
|
|
210
|
+
if (!records.some(record => record.name === `@dsh-enhanced/${slug}` && record.bundle === true)) {
|
|
211
|
+
fail(`辅助 cohort 缺少必要 bundle:${profile}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
for (const record of records) {
|
|
215
|
+
const artifact = record.tarball;
|
|
216
|
+
if (await stableArtifactDigest(artifact, profile) !== record.sha256) {
|
|
217
|
+
fail(`辅助 cohort 制品摘要不一致:${profile}`);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/** Read-only, fail-closed recognition. Partial frozen installations must not fall into the npm updater. */
|
|
222
|
+
export async function detectFrozenOwner(dshHome) {
|
|
223
|
+
if (!isAbsolute(dshHome) || resolve(dshHome) !== dshHome) {
|
|
224
|
+
fail('DSH_HOME 必须是规范绝对路径');
|
|
225
|
+
}
|
|
226
|
+
const canonical = await realpath(dshHome).catch(error => {
|
|
227
|
+
if (error.code === 'ENOENT')
|
|
228
|
+
return undefined;
|
|
229
|
+
throw error;
|
|
230
|
+
});
|
|
231
|
+
if (canonical === undefined)
|
|
232
|
+
return undefined;
|
|
233
|
+
await ownedDirectory(canonical);
|
|
234
|
+
const cohorts = await names(join(canonical, 'rsi-local-cohorts'));
|
|
235
|
+
const localRoot = await lstat(join(canonical, 'rsi-local-cohorts')).catch(error => {
|
|
236
|
+
if (error.code === 'ENOENT')
|
|
237
|
+
return undefined;
|
|
238
|
+
throw error;
|
|
239
|
+
});
|
|
240
|
+
const markers = (await names(canonical)).filter(name => name.startsWith('.rsi-coordinator-'));
|
|
241
|
+
if (localRoot === undefined && markers.length === 0)
|
|
242
|
+
return undefined;
|
|
243
|
+
if (markers.length !== 1 || !/^\.rsi-coordinator-[a-f0-9]{16}\.json$/u.test(markers[0])) {
|
|
244
|
+
fail('只接受恰好一个冻结 target 与 coordinator marker');
|
|
245
|
+
}
|
|
246
|
+
const pair = await privateJson(join(canonical, markers[0]), 65_536);
|
|
247
|
+
const profile = pair.targetProfile;
|
|
248
|
+
if (typeof profile !== 'string' || !profilePattern.test(profile) || !cohorts.includes(profile)) {
|
|
249
|
+
fail('只接受恰好一个冻结 target 与 coordinator marker');
|
|
250
|
+
}
|
|
251
|
+
const marker = `.rsi-coordinator-${createHash('sha256').update(profile).digest('hex').slice(0, 16)}.json`;
|
|
252
|
+
if (markers[0] !== marker)
|
|
253
|
+
fail('coordinator marker 与 target 不一致');
|
|
254
|
+
await ownedDirectory(join(canonical, 'rsi-local-cohorts'));
|
|
255
|
+
await ownedDirectory(join(canonical, 'rsi-local-cohorts', profile));
|
|
256
|
+
const cohort = await privateJson(join(canonical, 'rsi-local-cohorts', profile, 'receipt.json'), 16_777_216);
|
|
257
|
+
const repository = cohort.sourceRepository;
|
|
258
|
+
if (cohort.schemaVersion !== 1 || cohort.root !== join(canonical, 'rsi-local-cohorts', profile)
|
|
259
|
+
|| typeof repository !== 'string' || !isAbsolute(repository) || resolve(repository) !== repository
|
|
260
|
+
|| await realpath(repository) !== repository || pair.schemaVersion !== 1 || pair.targetProfile !== profile
|
|
261
|
+
|| pair.sourceRepository !== repository || !profilePattern.test(String(pair.coordinatorProfile))
|
|
262
|
+
|| pair.coordinatorProfile === profile)
|
|
263
|
+
fail('冻结收据的 target、source 或 coordinator 不一致');
|
|
264
|
+
await ownedDirectory(repository);
|
|
265
|
+
for (const name of cohorts)
|
|
266
|
+
if (name !== profile)
|
|
267
|
+
await verifyAuxiliaryCohort(canonical, name, repository);
|
|
268
|
+
return { home: canonical, profile, repository };
|
|
269
|
+
}
|
|
270
|
+
export function assertFrozenUpdateArgs(input, owner) {
|
|
271
|
+
if (input.profile !== undefined && input.profile !== owner.profile)
|
|
272
|
+
fail(`目标 profile 必须是 ${owner.profile}`);
|
|
273
|
+
if (input.cliVersion !== undefined && input.cliVersion !== 'latest') {
|
|
274
|
+
fail('冻结 owner 的 --all 只允许 CLI --version latest,不能指定旧版或精确版本');
|
|
275
|
+
}
|
|
276
|
+
if (input.local !== undefined || input.passthrough.length > 0 || !input.yes) {
|
|
277
|
+
fail('冻结更新只接受 --all --yes、现有 --profile、--dsh-version、--dry-run 与 CLI --version');
|
|
278
|
+
}
|
|
279
|
+
// The host-runtime contract performs the final selector and compatibility check.
|
|
280
|
+
}
|
|
281
|
+
export function compareExactVersions(left, right) {
|
|
282
|
+
const pattern = /^(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/u;
|
|
283
|
+
const a = pattern.exec(left), b = pattern.exec(right);
|
|
284
|
+
if (a === null || b === null)
|
|
285
|
+
return undefined;
|
|
286
|
+
for (const index of [1, 2, 3]) {
|
|
287
|
+
const difference = Number(a[index]) - Number(b[index]);
|
|
288
|
+
if (!Number.isSafeInteger(Number(a[index])) || !Number.isSafeInteger(Number(b[index])))
|
|
289
|
+
return undefined;
|
|
290
|
+
if (difference !== 0)
|
|
291
|
+
return Math.sign(difference);
|
|
292
|
+
}
|
|
293
|
+
if (a[4] === undefined && b[4] === undefined)
|
|
294
|
+
return 0;
|
|
295
|
+
if (a[4] === undefined)
|
|
296
|
+
return 1;
|
|
297
|
+
if (b[4] === undefined)
|
|
298
|
+
return -1;
|
|
299
|
+
const leftParts = a[4].split('.'), rightParts = b[4].split('.');
|
|
300
|
+
for (let index = 0; index < Math.max(leftParts.length, rightParts.length); index++) {
|
|
301
|
+
const l = leftParts[index], r = rightParts[index];
|
|
302
|
+
if (l === undefined)
|
|
303
|
+
return -1;
|
|
304
|
+
if (r === undefined)
|
|
305
|
+
return 1;
|
|
306
|
+
if (l === r)
|
|
307
|
+
continue;
|
|
308
|
+
const numericLeft = /^\d+$/u.test(l), numericRight = /^\d+$/u.test(r);
|
|
309
|
+
if (numericLeft && numericRight) {
|
|
310
|
+
const delta = BigInt(l) - BigInt(r);
|
|
311
|
+
return delta < 0n ? -1 : 1;
|
|
312
|
+
}
|
|
313
|
+
if (numericLeft !== numericRight)
|
|
314
|
+
return numericLeft ? -1 : 1;
|
|
315
|
+
return l < r ? -1 : 1;
|
|
316
|
+
}
|
|
317
|
+
return 0;
|
|
318
|
+
}
|
|
319
|
+
export function assertFrozenCliUpdateVersion(installedVersion, currentVersion, alreadyCurrent) {
|
|
320
|
+
const comparison = installedVersion === undefined ? undefined : compareExactVersions(installedVersion, currentVersion);
|
|
321
|
+
if (comparison === undefined || comparison < 0 || comparison === 0 && !alreadyCurrent) {
|
|
322
|
+
fail('自升级目标 CLI 版本不能证明包含当前冻结 owner 更新协议;未继续升级 Home');
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
function execute(ports, command, args, cwd, capture = true) {
|
|
326
|
+
const result = ports.run(command, args, cwd, capture);
|
|
327
|
+
if (result.status !== 0)
|
|
328
|
+
fail(`${command} ${args[0] ?? ''} 退出码 ${result.status ?? 'signal'}`);
|
|
329
|
+
return result.stdout.trim();
|
|
330
|
+
}
|
|
331
|
+
/** Source branch update is distinct from a published npm release. */
|
|
332
|
+
async function pendingInstaller(owner) {
|
|
333
|
+
const transaction = `${owner.home}.dsh-enhanced-transaction`;
|
|
334
|
+
const entry = await lstat(transaction).catch(error => {
|
|
335
|
+
if (error.code === 'ENOENT')
|
|
336
|
+
return undefined;
|
|
337
|
+
throw error;
|
|
338
|
+
});
|
|
339
|
+
if (entry === undefined)
|
|
340
|
+
return undefined;
|
|
341
|
+
if (!entry.isDirectory() || entry.isSymbolicLink() || entry.uid !== process.getuid?.()
|
|
342
|
+
|| (entry.mode & 0o077))
|
|
343
|
+
fail('待恢复事务目录不安全');
|
|
344
|
+
const manifest = await privateJson(join(transaction, 'manifest.json'), 16_777_216);
|
|
345
|
+
const migration = manifest.hostMigration;
|
|
346
|
+
const source = migration?.localSource;
|
|
347
|
+
const ownerUpdate = source?.ownerUpdate;
|
|
348
|
+
const installer = ownerUpdate?.installer;
|
|
349
|
+
const root = installer?.root;
|
|
350
|
+
if (manifest.version !== 4 || manifest.homePath !== owner.home || manifest.profile !== owner.profile
|
|
351
|
+
|| manifest.transactionPath !== transaction || source?.protocol !== 'dsh-enhanced/host-owner-program-update/v1'
|
|
352
|
+
|| typeof root !== 'string' || root !== owner.repository) {
|
|
353
|
+
fail('待恢复事务未绑定现有 owner 源码与 profile;未更新源码');
|
|
354
|
+
}
|
|
355
|
+
if (migration?.programReadinessRecovery !== undefined) {
|
|
356
|
+
fail('该事务已绑定独立审核的就绪修复安装器;请从该审核版本运行 upgrade-program.mjs --recover-readiness。原安装器和当前 Home 已保留,未自动执行事务中提供的路径');
|
|
357
|
+
}
|
|
358
|
+
await ownedDirectory(root);
|
|
359
|
+
return root;
|
|
360
|
+
}
|
|
361
|
+
export async function runFrozenOwnerUpdate(owner, options, ports = defaultPorts) {
|
|
362
|
+
const repo = owner.repository;
|
|
363
|
+
const recoveryRoot = await pendingInstaller(owner);
|
|
364
|
+
if (recoveryRoot !== undefined) {
|
|
365
|
+
process.stdout.write(`检测到待恢复的 owner 升级事务;先使用原 installer ${recoveryRoot} 恢复,本次不拉取源码。\n`);
|
|
366
|
+
if (options.dryRun) {
|
|
367
|
+
process.stdout.write('【dry-run】计划仅执行原 installer 的 upgrade-program.mjs --recover;未修改源码或 Home。\n');
|
|
368
|
+
return 0;
|
|
369
|
+
}
|
|
370
|
+
execute(ports, process.execPath, [join(recoveryRoot, 'scripts', 'install', 'upgrade-program.mjs'),
|
|
371
|
+
'--dsh-home', owner.home, '--profile', owner.profile, '--recover'], undefined, false);
|
|
372
|
+
return 0;
|
|
373
|
+
}
|
|
374
|
+
const origin = execute(ports, 'git', ['remote', 'get-url', 'origin'], repo);
|
|
375
|
+
if (!/^(?:https:\/\/github\.com\/22-ai-00\/dsh-enhanced(?:\.git)?|git@github\.com:22-ai-00\/dsh-enhanced(?:\.git)?)$/u.test(origin)) {
|
|
376
|
+
fail('已绑定源码仓库 origin 不是官方 GitHub 地址');
|
|
377
|
+
}
|
|
378
|
+
const branch = execute(ports, 'git', ['symbolic-ref', '--quiet', '--short', 'HEAD'], repo);
|
|
379
|
+
if (branch !== 'dev' && branch !== 'main')
|
|
380
|
+
fail('源码仓库当前分支必须是 dev 或 main');
|
|
381
|
+
if (execute(ports, 'git', ['status', '--porcelain=v1', '--untracked-files=all'], repo) !== '')
|
|
382
|
+
fail('源码仓库工作树不干净');
|
|
383
|
+
const root = execute(ports, 'git', ['rev-parse', '--show-toplevel'], repo);
|
|
384
|
+
if (root !== repo)
|
|
385
|
+
fail('源码仓库根目录与绑定路径不一致');
|
|
386
|
+
process.stdout.write(`冻结 owner:沿已绑定源码仓库 ${repo} 的 ${branch} 分支升级;该源码提交可能尚未发布到 npm。\n`);
|
|
387
|
+
if (options.dryRun) {
|
|
388
|
+
process.stdout.write(`【dry-run】计划:git fetch origin ${branch};git merge --ff-only FETCH_HEAD;pnpm install --frozen-lockfile;pnpm build;upgrade-program.mjs --dsh-home ${owner.home} --profile ${owner.profile} --dsh-version ${options.dshVersion ?? 'latest'} --dry-run。未更新源码或 Home。\n`);
|
|
389
|
+
return 0;
|
|
390
|
+
}
|
|
391
|
+
execute(ports, 'git', ['fetch', 'origin', branch], repo, false);
|
|
392
|
+
execute(ports, 'git', ['merge', '--ff-only', 'FETCH_HEAD'], repo, false);
|
|
393
|
+
execute(ports, 'pnpm', ['install', '--frozen-lockfile'], repo, false);
|
|
394
|
+
execute(ports, 'pnpm', ['build'], repo, false);
|
|
395
|
+
const script = join(ports.scriptRoot ?? repo, 'scripts', 'install', 'upgrade-program.mjs');
|
|
396
|
+
execute(ports, process.execPath, [script, '--dsh-home', owner.home, '--profile', owner.profile,
|
|
397
|
+
'--dsh-version', options.dshVersion ?? 'latest'], undefined, false);
|
|
398
|
+
return 0;
|
|
399
|
+
}
|
|
400
|
+
//# sourceMappingURL=program-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program-update.js","sourceRoot":"","sources":["../src/program-update.ts"],"names":[],"mappings":"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"}
|
package/lib/update.d.ts
CHANGED
|
@@ -28,6 +28,8 @@ export interface SelfUpdateReport {
|
|
|
28
28
|
installedVersion?: string;
|
|
29
29
|
/** 已是目标版本、未执行安装。 */
|
|
30
30
|
alreadyCurrent: boolean;
|
|
31
|
+
/** 当前官方全局 CLI 新于 registry 的 latest,故保留当前版本。 */
|
|
32
|
+
retainedNewer?: boolean;
|
|
31
33
|
/**
|
|
32
34
|
* 本次是否发生了「旧包名 → 新包名」的全局迁移。
|
|
33
35
|
* 旧包 `@dsh-enhanced/rsi-cli` 提供 `dsh-rsi` bin;新包安装成功后才卸载旧包。
|
|
@@ -41,9 +43,8 @@ export interface SelfUpdateReport {
|
|
|
41
43
|
*
|
|
42
44
|
* 只做一件事:把 `@dsh-enhanced/dsh-rsi-cli@<selector>` 安装到全局;
|
|
43
45
|
* 若当前进程仍由旧包 `@dsh-enhanced/rsi-cli` 加载,则在新包安装成功后卸载旧包,
|
|
44
|
-
* 避免两个包同时提供 `dsh-rsi` bin
|
|
45
|
-
*
|
|
46
|
-
* 因此本函数执行完就返回,由用户在下一次调用中使用新版本。
|
|
46
|
+
* 避免两个包同时提供 `dsh-rsi` bin。调用方决定是否从安装后的精确新 bin 复执行;
|
|
47
|
+
* 本函数只负责自身升级与返回安装结果,不继续执行 Home 更新。
|
|
47
48
|
*
|
|
48
49
|
* 升级插件集合(cohort)不走这里:那属于安装器的 `--operation upgrade`,
|
|
49
50
|
* 由 `update --all` 薄委托过去,本模块不复制任何 cohort 升级逻辑。
|
package/lib/update.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,UAAU,CAAA;AAI5D,iCAAiC;AACjC,eAAO,MAAM,eAAe,8BAA8B,CAAA;AAC1D;;;GAGG;AACH,eAAO,MAAM,sBAAsB,0BAA0B,CAAA;AAe7D,yEAAyE;AACzE,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM7E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,CAKpF;AAED,MAAM,WAAW,gBAAgB;IAC/B,6BAA6B;IAC7B,WAAW,EAAE,MAAM,CAAA;IACnB,8CAA8C;IAC9C,QAAQ,EAAE,MAAM,CAAA;IAChB,4BAA4B;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,qDAAqD;IACrD,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,oBAAoB;IACpB,cAAc,EAAE,OAAO,CAAA;IACvB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB;;;OAGG;IACH,YAAY,EAAE,OAAO,CAAA;IACrB,qBAAqB;IACrB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,aAAa,CAAA;IACtB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAmG5B;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,CAuBxF"}
|
package/lib/update.js
CHANGED
|
@@ -3,6 +3,7 @@ import { fileURLToPath } from 'node:url';
|
|
|
3
3
|
import { PurgeError } from "./purge.js";
|
|
4
4
|
import { defaultRunner } from "./run.js";
|
|
5
5
|
import { version as VERSION } from "./version.js";
|
|
6
|
+
import { compareExactVersions } from "./program-update.js";
|
|
6
7
|
/** 全局 dsh-rsi 自身的 npm 包名(新名)。 */
|
|
7
8
|
export const RSI_CLI_PACKAGE = '@dsh-enhanced/dsh-rsi-cli';
|
|
8
9
|
/**
|
|
@@ -50,9 +51,8 @@ export function runtimePackageKind(packageRoot) {
|
|
|
50
51
|
*
|
|
51
52
|
* 只做一件事:把 `@dsh-enhanced/dsh-rsi-cli@<selector>` 安装到全局;
|
|
52
53
|
* 若当前进程仍由旧包 `@dsh-enhanced/rsi-cli` 加载,则在新包安装成功后卸载旧包,
|
|
53
|
-
* 避免两个包同时提供 `dsh-rsi` bin
|
|
54
|
-
*
|
|
55
|
-
* 因此本函数执行完就返回,由用户在下一次调用中使用新版本。
|
|
54
|
+
* 避免两个包同时提供 `dsh-rsi` bin。调用方决定是否从安装后的精确新 bin 复执行;
|
|
55
|
+
* 本函数只负责自身升级与返回安装结果,不继续执行 Home 更新。
|
|
56
56
|
*
|
|
57
57
|
* 升级插件集合(cohort)不走这里:那属于安装器的 `--operation upgrade`,
|
|
58
58
|
* 由 `update --all` 薄委托过去,本模块不复制任何 cohort 升级逻辑。
|
|
@@ -99,13 +99,29 @@ export async function runSelfUpdate(options) {
|
|
|
99
99
|
}
|
|
100
100
|
const kind = runtimePackageKind(packageRoot);
|
|
101
101
|
report.migratedFrom = kind === 'legacy';
|
|
102
|
+
// latest 是自动选择;registry 落后或无法解析时,绝不能把较新的本机 CLI 覆盖成旧版。
|
|
103
|
+
// 仅当前进程确实来自官方新全局包时,才能将其视为可保留的已安装版本。
|
|
104
|
+
if (selector === 'latest') {
|
|
105
|
+
const order = report.resolvedVersion === undefined ? undefined : compareExactVersions(report.resolvedVersion, VERSION);
|
|
106
|
+
if (order === undefined)
|
|
107
|
+
throw new PurgeError('无法确认 npm latest 的精确版本;未更改全局 CLI。');
|
|
108
|
+
if (order < 0) {
|
|
109
|
+
if (kind !== 'new')
|
|
110
|
+
throw new PurgeError('npm latest 早于当前 CLI,且当前进程不是官方新全局包;未更改全局 CLI。');
|
|
111
|
+
report.alreadyCurrent = true;
|
|
112
|
+
report.retainedNewer = true;
|
|
113
|
+
report.installedVersion = VERSION;
|
|
114
|
+
return report;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
102
117
|
// 「已是最新」只在当前已是新包时成立;旧包即使版本号相同也必须迁移一次。
|
|
103
118
|
if (report.resolvedVersion !== undefined && report.resolvedVersion === VERSION && kind === 'new') {
|
|
104
119
|
report.alreadyCurrent = true;
|
|
105
120
|
report.installedVersion = report.resolvedVersion;
|
|
106
121
|
return report;
|
|
107
122
|
}
|
|
108
|
-
|
|
123
|
+
// latest 查询后固定精确版本,避免 tag 在查询与安装之间移动而绕过版本比较。
|
|
124
|
+
const target = `${RSI_CLI_PACKAGE}@${selector === 'latest' ? report.resolvedVersion : selector}`;
|
|
109
125
|
const prefixArgs = report.globalPrefix === undefined ? [] : ['--prefix', report.globalPrefix];
|
|
110
126
|
report.actions.push(`npm install --global${report.globalPrefix === undefined ? '' : ` --prefix ${report.globalPrefix}`} ${target}`);
|
|
111
127
|
if (report.migratedFrom) {
|
|
@@ -136,7 +152,9 @@ export function formatSelfUpdateReport(report, dryRun) {
|
|
|
136
152
|
const lines = [];
|
|
137
153
|
const resolved = report.resolvedVersion ?? '(无法从 registry 解析,仍按 selector 安装)';
|
|
138
154
|
if (report.alreadyCurrent) {
|
|
139
|
-
lines.push(
|
|
155
|
+
lines.push(report.retainedNewer
|
|
156
|
+
? `dsh-rsi 当前版本 ${report.fromVersion} 新于 npm ${report.selector} 的 ${report.resolvedVersion},保留本机版本,未安装旧版。`
|
|
157
|
+
: `dsh-rsi 已是 ${report.fromVersion},与 ${report.selector} 解析结果一致,无需升级。`);
|
|
140
158
|
if (report.globalPrefix !== undefined)
|
|
141
159
|
lines.push(`全局前缀:${report.globalPrefix}`);
|
|
142
160
|
return lines.join('\n');
|
package/lib/update.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,aAAa,EAAsB,MAAM,UAAU,CAAA;AAC5D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
|
package/lib/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "0.1.
|
|
1
|
+
export declare const version = "0.1.57";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/lib/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '0.1.
|
|
1
|
+
export const version = '0.1.57';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
package/package.json
CHANGED