@sparkelf/dsh-plus 0.2.2-alpha.2.1 → 0.2.2-alpha.2.2
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/bin.js +65 -18
- package/lib/types/standalone-cli.js +40 -3
- package/lib/types/standalone-profile.js +48 -17
- package/package.json +20 -43
package/lib/bin.js
CHANGED
|
@@ -900,11 +900,12 @@ function isWithin(candidate, parent, platform = process.platform) {
|
|
|
900
900
|
* @returns absolute path to the installed distribution.
|
|
901
901
|
*/
|
|
902
902
|
function resolveDistributionDirectory(anchor) {
|
|
903
|
+
const ownDirectory = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
903
904
|
let resolved;
|
|
904
905
|
try {
|
|
905
906
|
resolved = dirname(createRequire(anchor).resolve("@sparkelf/dsh-plus/package.json"));
|
|
906
907
|
} catch {
|
|
907
|
-
|
|
908
|
+
return ownDirectory;
|
|
908
909
|
}
|
|
909
910
|
let current = resolve(dirname(anchor));
|
|
910
911
|
for (;;) {
|
|
@@ -913,7 +914,7 @@ function resolveDistributionDirectory(anchor) {
|
|
|
913
914
|
if (parent === current) break;
|
|
914
915
|
current = parent;
|
|
915
916
|
}
|
|
916
|
-
|
|
917
|
+
return ownDirectory;
|
|
917
918
|
}
|
|
918
919
|
function readDistributionProfile(distributionDirectory) {
|
|
919
920
|
const manifest = requireRecord(JSON.parse(readFileSync(join(distributionDirectory, "package.json"), "utf8")), "Plus distribution manifest");
|
|
@@ -982,7 +983,11 @@ function requireDependencyMap(value, label) {
|
|
|
982
983
|
* @param consumerDirectory - directory whose `node_modules` holds the installation.
|
|
983
984
|
*/
|
|
984
985
|
function installProfilePackages(paths, consumerDirectory) {
|
|
985
|
-
if (!existsSync(join(consumerDirectory, "node_modules")))
|
|
986
|
+
if (!existsSync(join(consumerDirectory, "node_modules"))) {
|
|
987
|
+
installWithRegistryFallback(paths);
|
|
988
|
+
alignReplacedPackageNames(join(paths.profileDirectory, "node_modules"));
|
|
989
|
+
return;
|
|
990
|
+
}
|
|
986
991
|
const profileModules = join(paths.profileDirectory, "node_modules");
|
|
987
992
|
if (existsSync(profileModules)) {
|
|
988
993
|
linkNestedBundles(paths, profileModules);
|
|
@@ -1184,20 +1189,32 @@ function ensureProfile(paths, consumerDirectory, edition) {
|
|
|
1184
1189
|
const offered = Object.keys(distribution.editions);
|
|
1185
1190
|
throw new Error("unknown edition \"" + edition + "\"; this release offers " + (offered.length === 0 ? "(none)" : offered.join(", ")));
|
|
1186
1191
|
}
|
|
1187
|
-
const
|
|
1188
|
-
const
|
|
1192
|
+
for (const name of Object.keys(composition?.packages ?? {})) if (name.startsWith("@deepseek-ai/")) throw new Error("edition \"" + String(edition) + "\" lists the official package " + name + "; editions contain only third-party or self-developed plugins");
|
|
1193
|
+
const runtime = distribution.dshRange.replace(/^>=?/u, "");
|
|
1194
|
+
const baseBundles = composition === void 0 ? distribution.bundles : distribution.bundles.filter((bundle) => bundle.startsWith("@deepseek-ai/") || bundle === "@sparkelf/dsh-plus");
|
|
1195
|
+
const basePackages = composition === void 0 ? distribution.dependencies : {
|
|
1196
|
+
"@deepseek-ai/dsh": distribution.dshRange,
|
|
1197
|
+
"@sparkelf/dsh-plus": distribution.version,
|
|
1198
|
+
...Object.fromEntries(baseBundles.filter((bundle) => bundle.startsWith("@deepseek-ai/dsh-")).map((bundle) => [bundle, runtime]))
|
|
1199
|
+
};
|
|
1200
|
+
const compositionPackages = composition === void 0 ? basePackages : {
|
|
1201
|
+
...basePackages,
|
|
1202
|
+
...composition.packages
|
|
1203
|
+
};
|
|
1204
|
+
const compositionBundles = composition === void 0 ? baseBundles : [...baseBundles, ...composition.bundles];
|
|
1189
1205
|
if (existsSync(manifestPath)) {
|
|
1190
1206
|
if (composition !== void 0) {
|
|
1191
1207
|
const manifest = requireRecord(JSON.parse(readFileSync(manifestPath, "utf8")), "Plus profile manifest");
|
|
1192
1208
|
manifest.dependencies = {
|
|
1193
1209
|
...manifest.dependencies,
|
|
1194
|
-
...
|
|
1210
|
+
...compositionPackages
|
|
1195
1211
|
};
|
|
1196
1212
|
manifest.dsh = {
|
|
1197
1213
|
...manifest.dsh,
|
|
1198
1214
|
profile: {
|
|
1199
1215
|
...manifest.dsh?.profile,
|
|
1200
|
-
bundles: [...
|
|
1216
|
+
bundles: [...compositionBundles],
|
|
1217
|
+
...edition === void 0 ? {} : { plusEdition: edition }
|
|
1201
1218
|
}
|
|
1202
1219
|
};
|
|
1203
1220
|
writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n");
|
|
@@ -1211,15 +1228,11 @@ function ensureProfile(paths, consumerDirectory, edition) {
|
|
|
1211
1228
|
name: "dsh-profile-plus",
|
|
1212
1229
|
private: true,
|
|
1213
1230
|
type: "module",
|
|
1214
|
-
dependencies:
|
|
1215
|
-
"@sparkelf/dsh-plus": distribution.version,
|
|
1216
|
-
"@deepseek-ai/dsh": distribution.dshRange,
|
|
1217
|
-
...distribution.dependencies,
|
|
1218
|
-
...editionPackages
|
|
1219
|
-
},
|
|
1231
|
+
dependencies: compositionPackages,
|
|
1220
1232
|
dsh: { profile: {
|
|
1221
|
-
bundles: [...
|
|
1222
|
-
patchReload: "live"
|
|
1233
|
+
bundles: [...compositionBundles],
|
|
1234
|
+
patchReload: "live",
|
|
1235
|
+
...edition === void 0 ? {} : { plusEdition: edition }
|
|
1223
1236
|
} }
|
|
1224
1237
|
};
|
|
1225
1238
|
writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n");
|
|
@@ -1483,6 +1496,7 @@ function runForeground(entry, profileName, port, host, open) {
|
|
|
1483
1496
|
/** Parse the install command's edition selection. */
|
|
1484
1497
|
function parseInstallOptions(argv) {
|
|
1485
1498
|
let edition;
|
|
1499
|
+
let profile;
|
|
1486
1500
|
for (let index = 0; index < argv.length; index += 1) {
|
|
1487
1501
|
const token = argv[index];
|
|
1488
1502
|
if (token === "--edition") {
|
|
@@ -1492,10 +1506,20 @@ function parseInstallOptions(argv) {
|
|
|
1492
1506
|
index += 1;
|
|
1493
1507
|
continue;
|
|
1494
1508
|
}
|
|
1509
|
+
if (token === "--profile") {
|
|
1510
|
+
const value = argv[index + 1];
|
|
1511
|
+
if (value === void 0 || value === "") throw new Error("--profile requires a value");
|
|
1512
|
+
profile = value;
|
|
1513
|
+
index += 1;
|
|
1514
|
+
continue;
|
|
1515
|
+
}
|
|
1495
1516
|
throw new Error("unknown option: " + String(token));
|
|
1496
1517
|
}
|
|
1497
1518
|
if (edition === void 0) throw new Error("install requires --edition personal or --edition team");
|
|
1498
|
-
return {
|
|
1519
|
+
return {
|
|
1520
|
+
edition,
|
|
1521
|
+
profile
|
|
1522
|
+
};
|
|
1499
1523
|
}
|
|
1500
1524
|
/**
|
|
1501
1525
|
* Install one edition's package manifest into the profile.
|
|
@@ -1508,8 +1532,13 @@ function parseInstallOptions(argv) {
|
|
|
1508
1532
|
* @returns the process exit code.
|
|
1509
1533
|
*/
|
|
1510
1534
|
function install(argv) {
|
|
1511
|
-
const { edition } = parseInstallOptions(argv);
|
|
1512
|
-
const
|
|
1535
|
+
const { edition, profile } = parseInstallOptions(argv);
|
|
1536
|
+
const base = resolvePaths(declarationAnchor());
|
|
1537
|
+
const paths = profile === void 0 ? base : {
|
|
1538
|
+
...base,
|
|
1539
|
+
profileName: profile,
|
|
1540
|
+
profileDirectory: join(base.home, "profiles", profile)
|
|
1541
|
+
};
|
|
1513
1542
|
ensureProfile(paths, installationRoot(), edition);
|
|
1514
1543
|
console.log("Installed the " + edition + " edition into " + paths.profileDirectory);
|
|
1515
1544
|
return 0;
|
|
@@ -1892,6 +1921,23 @@ async function doctor() {
|
|
|
1892
1921
|
const record = readCapabilityRecord(paths.home);
|
|
1893
1922
|
const drifted = record === void 0 ? [] : CAPABILITIES.filter((capability) => record.enabled.includes(capability.id) !== actual.mounted.includes(capability.id));
|
|
1894
1923
|
check(drifted.length === 0, drifted.length === 0 ? "capabilities: " + (actual.mounted.length === 0 ? "(none enabled)" : actual.mounted.join(", ")) : "capabilities disagree with capabilities.json: " + drifted.map((capability) => capability.id).join(", ") + " (run dsh-plus capabilities)");
|
|
1924
|
+
const profileManifestPath = join(paths.profileDirectory, "package.json");
|
|
1925
|
+
if (existsSync(profileManifestPath)) {
|
|
1926
|
+
const profileManifest = JSON.parse(readFileSync(profileManifestPath, "utf8"));
|
|
1927
|
+
const editionId = profileManifest.dsh?.profile?.plusEdition;
|
|
1928
|
+
if (editionId !== void 0) {
|
|
1929
|
+
const edition = readDistributionProfile(paths.distributionDirectory).editions[editionId];
|
|
1930
|
+
if (edition === void 0) check(false, "edition \"" + editionId + "\" is not declared by this distribution");
|
|
1931
|
+
else {
|
|
1932
|
+
const bundles = new Set(profileManifest.dsh?.profile?.bundles ?? []);
|
|
1933
|
+
const missingBundles = edition.bundles.filter((bundle) => !bundles.has(bundle));
|
|
1934
|
+
const packageNames = Object.keys(edition.packages);
|
|
1935
|
+
const missingPackages = packageNames.filter((name) => !existsSync(join(paths.profileDirectory, "node_modules", ...name.split("/"), "package.json")));
|
|
1936
|
+
check(missingBundles.length === 0, "edition " + editionId + ": " + String(edition.bundles.length - missingBundles.length) + "/" + String(edition.bundles.length) + " bundles mounted" + (missingBundles.length === 0 ? "" : " (missing " + missingBundles.join(", ") + ")"));
|
|
1937
|
+
check(missingPackages.length === 0, "edition " + editionId + ": " + String(packageNames.length - missingPackages.length) + "/" + String(packageNames.length) + " packages installed" + (missingPackages.length === 0 ? "" : " (missing " + missingPackages.join(", ") + ")"));
|
|
1938
|
+
}
|
|
1939
|
+
}
|
|
1940
|
+
}
|
|
1895
1941
|
console.log(failures === 0 ? "No problems found." : String(failures) + " problem(s) found.");
|
|
1896
1942
|
return failures === 0 ? 0 : 1;
|
|
1897
1943
|
}
|
|
@@ -1916,6 +1962,7 @@ const USAGE = [
|
|
|
1916
1962
|
"",
|
|
1917
1963
|
"install options:",
|
|
1918
1964
|
" --edition <id> package manifest to install (personal or team)",
|
|
1965
|
+
" --profile <n> profile name to install into (default: this installation)",
|
|
1919
1966
|
"",
|
|
1920
1967
|
"capabilities options:",
|
|
1921
1968
|
" --enable <ids> enable the comma-separated capability ids",
|
|
@@ -169,6 +169,7 @@ function runForeground(entry, profileName, port, host, open) {
|
|
|
169
169
|
/** Parse the install command's edition selection. */
|
|
170
170
|
function parseInstallOptions(argv) {
|
|
171
171
|
let edition;
|
|
172
|
+
let profile;
|
|
172
173
|
for (let index = 0; index < argv.length; index += 1) {
|
|
173
174
|
const token = argv[index];
|
|
174
175
|
if (token === '--edition') {
|
|
@@ -179,11 +180,19 @@ function parseInstallOptions(argv) {
|
|
|
179
180
|
index += 1;
|
|
180
181
|
continue;
|
|
181
182
|
}
|
|
183
|
+
if (token === '--profile') {
|
|
184
|
+
const value = argv[index + 1];
|
|
185
|
+
if (value === undefined || value === '')
|
|
186
|
+
throw new Error('--profile requires a value');
|
|
187
|
+
profile = value;
|
|
188
|
+
index += 1;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
182
191
|
throw new Error('unknown option: ' + String(token));
|
|
183
192
|
}
|
|
184
193
|
if (edition === undefined)
|
|
185
194
|
throw new Error('install requires --edition personal or --edition team');
|
|
186
|
-
return { edition };
|
|
195
|
+
return { edition, profile };
|
|
187
196
|
}
|
|
188
197
|
/**
|
|
189
198
|
* Install one edition's package manifest into the profile.
|
|
@@ -196,8 +205,11 @@ function parseInstallOptions(argv) {
|
|
|
196
205
|
* @returns the process exit code.
|
|
197
206
|
*/
|
|
198
207
|
function install(argv) {
|
|
199
|
-
const { edition } = parseInstallOptions(argv);
|
|
200
|
-
const
|
|
208
|
+
const { edition, profile } = parseInstallOptions(argv);
|
|
209
|
+
const base = resolvePaths(declarationAnchor());
|
|
210
|
+
const paths = profile === undefined
|
|
211
|
+
? base
|
|
212
|
+
: { ...base, profileName: profile, profileDirectory: join(base.home, 'profiles', profile) };
|
|
201
213
|
ensureProfile(paths, installationRoot(), edition);
|
|
202
214
|
console.log('Installed the ' + edition + ' edition into ' + paths.profileDirectory);
|
|
203
215
|
return 0;
|
|
@@ -628,6 +640,30 @@ async function doctor() {
|
|
|
628
640
|
? 'capabilities: ' + (actual.mounted.length === 0 ? '(none enabled)' : actual.mounted.join(', '))
|
|
629
641
|
: 'capabilities disagree with ' + CAPABILITY_RECORD + ': ' + drifted.map(capability => capability.id).join(', ')
|
|
630
642
|
+ ' (run dsh-plus capabilities)');
|
|
643
|
+
const profileManifestPath = join(paths.profileDirectory, 'package.json');
|
|
644
|
+
if (existsSync(profileManifestPath)) {
|
|
645
|
+
const profileManifest = JSON.parse(readFileSync(profileManifestPath, 'utf8'));
|
|
646
|
+
const editionId = profileManifest.dsh?.profile?.plusEdition;
|
|
647
|
+
if (editionId !== undefined) {
|
|
648
|
+
const distribution = readDistributionProfile(paths.distributionDirectory);
|
|
649
|
+
const edition = distribution.editions[editionId];
|
|
650
|
+
if (edition === undefined) {
|
|
651
|
+
check(false, 'edition "' + editionId + '" is not declared by this distribution');
|
|
652
|
+
}
|
|
653
|
+
else {
|
|
654
|
+
const bundles = new Set(profileManifest.dsh?.profile?.bundles ?? []);
|
|
655
|
+
const missingBundles = edition.bundles.filter(bundle => !bundles.has(bundle));
|
|
656
|
+
const packageNames = Object.keys(edition.packages);
|
|
657
|
+
const missingPackages = packageNames.filter(name => !existsSync(join(paths.profileDirectory, 'node_modules', ...name.split('/'), 'package.json')));
|
|
658
|
+
check(missingBundles.length === 0, 'edition ' + editionId + ': ' + String(edition.bundles.length - missingBundles.length) + '/'
|
|
659
|
+
+ String(edition.bundles.length) + ' bundles mounted'
|
|
660
|
+
+ (missingBundles.length === 0 ? '' : ' (missing ' + missingBundles.join(', ') + ')'));
|
|
661
|
+
check(missingPackages.length === 0, 'edition ' + editionId + ': ' + String(packageNames.length - missingPackages.length) + '/'
|
|
662
|
+
+ String(packageNames.length) + ' packages installed'
|
|
663
|
+
+ (missingPackages.length === 0 ? '' : ' (missing ' + missingPackages.join(', ') + ')'));
|
|
664
|
+
}
|
|
665
|
+
}
|
|
666
|
+
}
|
|
631
667
|
console.log(failures === 0 ? 'No problems found.' : String(failures) + ' problem(s) found.');
|
|
632
668
|
return failures === 0 ? 0 : 1;
|
|
633
669
|
}
|
|
@@ -652,6 +688,7 @@ const USAGE = [
|
|
|
652
688
|
'',
|
|
653
689
|
'install options:',
|
|
654
690
|
' --edition <id> package manifest to install (personal or team)',
|
|
691
|
+
' --profile <n> profile name to install into (default: this installation)',
|
|
655
692
|
'',
|
|
656
693
|
'capabilities options:',
|
|
657
694
|
' --enable <ids> enable the comma-separated capability ids',
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
import { spawnSync } from 'node:child_process';
|
|
12
12
|
import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, symlinkSync, writeFileSync } from 'node:fs';
|
|
13
13
|
import { createRequire } from 'node:module';
|
|
14
|
+
import { fileURLToPath } from 'node:url';
|
|
14
15
|
import { homedir } from 'node:os';
|
|
15
16
|
import { dirname, join, posix, resolve, win32 } from 'node:path';
|
|
16
17
|
import { parseDocument } from 'yaml';
|
|
@@ -142,12 +143,15 @@ export function isWithin(candidate, parent, platform = process.platform) {
|
|
|
142
143
|
* @returns absolute path to the installed distribution.
|
|
143
144
|
*/
|
|
144
145
|
export function resolveDistributionDirectory(anchor) {
|
|
146
|
+
const ownDirectory = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
145
147
|
let resolved;
|
|
146
148
|
try {
|
|
147
149
|
resolved = dirname(createRequire(anchor).resolve('@sparkelf/dsh-plus/package.json'));
|
|
148
150
|
}
|
|
149
151
|
catch {
|
|
150
|
-
|
|
152
|
+
// `npx @sparkelf/dsh-plus ...` runs the CLI from a temporary install, so the consumer
|
|
153
|
+
// tree has no copy to resolve. The running module's own package is the distribution.
|
|
154
|
+
return ownDirectory;
|
|
151
155
|
}
|
|
152
156
|
// A resolution that leaves the consumer tree means the module answered from its own
|
|
153
157
|
// installation, which reports health for a distribution the consumer never installed.
|
|
@@ -163,7 +167,7 @@ export function resolveDistributionDirectory(anchor) {
|
|
|
163
167
|
break;
|
|
164
168
|
current = parent;
|
|
165
169
|
}
|
|
166
|
-
|
|
170
|
+
return ownDirectory;
|
|
167
171
|
}
|
|
168
172
|
export function readDistributionProfile(distributionDirectory) {
|
|
169
173
|
const manifest = requireRecord(JSON.parse(readFileSync(join(distributionDirectory, 'package.json'), 'utf8')), 'Plus distribution manifest');
|
|
@@ -242,7 +246,12 @@ function requireDependencyMap(value, label) {
|
|
|
242
246
|
export function installProfilePackages(paths, consumerDirectory) {
|
|
243
247
|
const consumerModules = join(consumerDirectory, 'node_modules');
|
|
244
248
|
if (!existsSync(consumerModules)) {
|
|
245
|
-
|
|
249
|
+
// `npx @sparkelf/dsh-plus` runs from a temporary package tree that has no launcher
|
|
250
|
+
// beside it. The profile installs its own tree, so there is nothing to link from
|
|
251
|
+
// the caller; only the profile's packages matter.
|
|
252
|
+
installWithRegistryFallback(paths);
|
|
253
|
+
alignReplacedPackageNames(join(paths.profileDirectory, 'node_modules'));
|
|
254
|
+
return;
|
|
246
255
|
}
|
|
247
256
|
const profileModules = join(paths.profileDirectory, 'node_modules');
|
|
248
257
|
if (existsSync(profileModules)) {
|
|
@@ -466,17 +475,46 @@ export function ensureProfile(paths, consumerDirectory, edition) {
|
|
|
466
475
|
throw new Error('unknown edition "' + edition + '"; this release offers '
|
|
467
476
|
+ (offered.length === 0 ? '(none)' : offered.join(', ')));
|
|
468
477
|
}
|
|
469
|
-
|
|
470
|
-
|
|
478
|
+
// An edition lists only third-party, fork, and self-developed plugins. The official
|
|
479
|
+
// runtime is the CLI's responsibility and must not be duplicated in that list.
|
|
480
|
+
for (const name of Object.keys(composition?.packages ?? {})) {
|
|
481
|
+
if (name.startsWith('@deepseek-ai/')) {
|
|
482
|
+
throw new Error('edition "' + String(edition) + '" lists the official package ' + name
|
|
483
|
+
+ '; editions contain only third-party or self-developed plugins');
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
const runtime = distribution.dshRange.replace(/^>=?/u, '');
|
|
487
|
+
const baseBundles = composition === undefined
|
|
488
|
+
? distribution.bundles
|
|
489
|
+
: distribution.bundles.filter(bundle => bundle.startsWith('@deepseek-ai/') || bundle === '@sparkelf/dsh-plus');
|
|
490
|
+
const basePackages = composition === undefined
|
|
491
|
+
? distribution.dependencies
|
|
492
|
+
: {
|
|
493
|
+
'@deepseek-ai/dsh': distribution.dshRange,
|
|
494
|
+
'@sparkelf/dsh-plus': distribution.version,
|
|
495
|
+
...Object.fromEntries(baseBundles
|
|
496
|
+
.filter(bundle => bundle.startsWith('@deepseek-ai/dsh-'))
|
|
497
|
+
.map(bundle => [bundle, runtime])),
|
|
498
|
+
};
|
|
499
|
+
const compositionPackages = composition === undefined
|
|
500
|
+
? basePackages
|
|
501
|
+
: { ...basePackages, ...composition.packages };
|
|
502
|
+
const compositionBundles = composition === undefined
|
|
503
|
+
? baseBundles
|
|
504
|
+
: [...baseBundles, ...composition.bundles];
|
|
471
505
|
if (existsSync(manifestPath)) {
|
|
472
506
|
// A selected edition is an explicit install choice, so its packages and bundle order
|
|
473
507
|
// replace the profile's rather than being ignored. Other profile decisions stay.
|
|
474
508
|
if (composition !== undefined) {
|
|
475
509
|
const manifest = requireRecord(JSON.parse(readFileSync(manifestPath, 'utf8')), 'Plus profile manifest');
|
|
476
|
-
manifest.dependencies = { ...manifest.dependencies, ...
|
|
510
|
+
manifest.dependencies = { ...manifest.dependencies, ...compositionPackages };
|
|
477
511
|
manifest.dsh = {
|
|
478
512
|
...manifest.dsh,
|
|
479
|
-
profile: {
|
|
513
|
+
profile: {
|
|
514
|
+
...manifest.dsh?.profile,
|
|
515
|
+
bundles: [...compositionBundles],
|
|
516
|
+
...(edition === undefined ? {} : { plusEdition: edition }),
|
|
517
|
+
},
|
|
480
518
|
};
|
|
481
519
|
writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
|
|
482
520
|
}
|
|
@@ -493,19 +531,12 @@ export function ensureProfile(paths, consumerDirectory, edition) {
|
|
|
493
531
|
name: 'dsh-profile-' + STANDALONE_PROFILE,
|
|
494
532
|
private: true,
|
|
495
533
|
type: 'module',
|
|
496
|
-
dependencies:
|
|
497
|
-
'@sparkelf/dsh-plus': distribution.version,
|
|
498
|
-
// The launcher's own tree supplies every service package the bundles mount. A
|
|
499
|
-
// profile that lists only the distribution's plugins installs a partial tree and
|
|
500
|
-
// fails at load with a module the launcher would have carried.
|
|
501
|
-
'@deepseek-ai/dsh': distribution.dshRange,
|
|
502
|
-
...distribution.dependencies,
|
|
503
|
-
...editionPackages,
|
|
504
|
-
},
|
|
534
|
+
dependencies: compositionPackages,
|
|
505
535
|
dsh: {
|
|
506
536
|
profile: {
|
|
507
|
-
bundles: [...
|
|
537
|
+
bundles: [...compositionBundles],
|
|
508
538
|
patchReload: 'live',
|
|
539
|
+
...(edition === undefined ? {} : { plusEdition: edition }),
|
|
509
540
|
},
|
|
510
541
|
},
|
|
511
542
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sparkelf/dsh-plus",
|
|
3
3
|
"description": "DeepSeek Harness Plus official-base Web distribution profile and ranged compatibility patchset",
|
|
4
|
-
"version": "0.2.2-alpha.2.
|
|
4
|
+
"version": "0.2.2-alpha.2.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -553,10 +553,6 @@
|
|
|
553
553
|
"personal": {
|
|
554
554
|
"label": "个人版",
|
|
555
555
|
"bundles": [
|
|
556
|
-
"@deepseek-ai/dsh-base",
|
|
557
|
-
"@deepseek-ai/dsh-experimental-agent-team-profile",
|
|
558
|
-
"@deepseek-ai/dsh-web-app",
|
|
559
|
-
"@deepseek-ai/dsh-experimental-auto-review",
|
|
560
556
|
"@sparkelf/dsh-mineru",
|
|
561
557
|
"@sparkelf/dsh-officecli",
|
|
562
558
|
"dshmarket",
|
|
@@ -565,7 +561,6 @@
|
|
|
565
561
|
"dsh-video-preview",
|
|
566
562
|
"@sparkelf/dsh-genui",
|
|
567
563
|
"@sparkelf/dsh-plugin-supervisor",
|
|
568
|
-
"@sparkelf/dsh-plus",
|
|
569
564
|
"dsh-sql-workbench",
|
|
570
565
|
"@sparkelf/dsh-ssh-manager",
|
|
571
566
|
"@sparkelf/dsh-api-client",
|
|
@@ -575,10 +570,6 @@
|
|
|
575
570
|
"@sparkelf/dsh-client-ui-diagram-viewer"
|
|
576
571
|
],
|
|
577
572
|
"packages": {
|
|
578
|
-
"@deepseek-ai/dsh": "0.2.2-alpha.2",
|
|
579
|
-
"@deepseek-ai/dsh-base": "0.2.2-alpha.2",
|
|
580
|
-
"@deepseek-ai/dsh-web-app": "0.2.2-alpha.2",
|
|
581
|
-
"@sparkelf/dsh-plus": "0.2.2-alpha.2.1",
|
|
582
573
|
"@sparkelf/dsh-mineru": "0.1.4",
|
|
583
574
|
"@sparkelf/dsh-officecli": "0.1.4",
|
|
584
575
|
"@sparkelf/dsh-plugin-supervisor": "0.1.9",
|
|
@@ -590,10 +581,8 @@
|
|
|
590
581
|
"@sparkelf/dsh-office-viewer-fonts": "0.1.5",
|
|
591
582
|
"dsh-video-preview": "0.1.4",
|
|
592
583
|
"dsh-right-bg-anim": "1.1.0",
|
|
593
|
-
"@deepseek-ai/dsh-experimental-agent-team-profile": ">=0.2.2-alpha.2",
|
|
594
584
|
"@sparkelf/dsh-mobile-bridge": "0.2.18",
|
|
595
585
|
"@sparkelf/dsh-quant": "0.91.0-sparkelf.13",
|
|
596
|
-
"@deepseek-ai/dsh-experimental-auto-review": "0.2.2-alpha.2",
|
|
597
586
|
"@sparkelf/dsh-genui": "0.13.0-sparkelf.3",
|
|
598
587
|
"@sparkelf/dsh-client-ui-diagram-viewer": "0.2.1-alpha.28"
|
|
599
588
|
}
|
|
@@ -601,63 +590,51 @@
|
|
|
601
590
|
"team": {
|
|
602
591
|
"label": "团队版",
|
|
603
592
|
"bundles": [
|
|
604
|
-
"@deepseek-ai/dsh-base",
|
|
605
|
-
"@deepseek-ai/dsh-experimental-agent-team-profile",
|
|
606
|
-
"@deepseek-ai/dsh-web-app",
|
|
607
|
-
"@deepseek-ai/dsh-experimental-auto-review",
|
|
608
593
|
"@sparkelf/dsh-mineru",
|
|
609
594
|
"@sparkelf/dsh-officecli",
|
|
610
595
|
"dshmarket",
|
|
611
|
-
"dsh-better-sidebar",
|
|
612
596
|
"@sparkelf/dsh-office-viewer-fonts",
|
|
613
597
|
"@sparkelf/dsh-genui",
|
|
614
598
|
"@sparkelf/dsh-plugin-supervisor",
|
|
615
|
-
"@sparkelf/dsh-
|
|
616
|
-
"dsh-sql-workbench",
|
|
599
|
+
"@sparkelf/dsh-sql-workbench",
|
|
617
600
|
"@sparkelf/dsh-ssh-manager",
|
|
618
601
|
"@sparkelf/dsh-api-client",
|
|
619
602
|
"dsh-right-bg-anim",
|
|
620
603
|
"@sparkelf/dsh-client-ui-diagram-viewer",
|
|
621
604
|
"@sparkelf/dsh-dataops-managed",
|
|
622
605
|
"@sparkelf/dsh-query-result-analysis",
|
|
623
|
-
"@sparkelf/dsh-
|
|
606
|
+
"@sparkelf/dsh-better-sidebar",
|
|
624
607
|
"@sparkelf/dsh-credential-manager",
|
|
608
|
+
"@sparkelf/dsh-knowledge-base",
|
|
625
609
|
"@sparkelf/dsh-group-chat",
|
|
610
|
+
"@sparkelf/dsh-ocr",
|
|
611
|
+
"@sparkelf/dsh-dataops-account",
|
|
626
612
|
"@sparkelf/dsh-kb-citation",
|
|
627
613
|
"@sparkelf/dsh-task-bus"
|
|
628
614
|
],
|
|
629
615
|
"packages": {
|
|
630
|
-
"@
|
|
631
|
-
"@sparkelf/dsh-
|
|
616
|
+
"@sparkelf/dsh-api-client": "0.5.3",
|
|
617
|
+
"@sparkelf/dsh-client-ui-diagram-viewer": "0.2.1-alpha.28",
|
|
618
|
+
"@sparkelf/dsh-dataops-managed": "0.3.21",
|
|
619
|
+
"@sparkelf/dsh-genui": "0.15.0-sparkelf.1",
|
|
620
|
+
"@sparkelf/dsh-knowledge-base": "0.1.21",
|
|
632
621
|
"@sparkelf/dsh-mineru": "0.1.4",
|
|
622
|
+
"@sparkelf/dsh-office-viewer-fonts": "0.1.6",
|
|
633
623
|
"@sparkelf/dsh-officecli": "0.1.4",
|
|
634
624
|
"@sparkelf/dsh-plugin-supervisor": "0.1.9",
|
|
635
|
-
"dsh-
|
|
625
|
+
"@sparkelf/dsh-ssh-manager": "0.7.5",
|
|
636
626
|
"@sparkelf/dsh-workbench-vault": "0.1.2",
|
|
637
|
-
"@sparkelf/dsh-ssh-manager": "0.7.4",
|
|
638
|
-
"@sparkelf/dsh-api-client": "0.5.3",
|
|
639
|
-
"dsh-better-sidebar": "0.28.0",
|
|
640
|
-
"@sparkelf/dsh-office-viewer-fonts": "0.1.5",
|
|
641
627
|
"dsh-right-bg-anim": "1.1.0",
|
|
642
|
-
"@
|
|
643
|
-
"@deepseek-ai/dsh-experimental-auto-review": "0.2.2-alpha.2",
|
|
644
|
-
"@sparkelf/dsh-genui": "0.13.0-sparkelf.3",
|
|
645
|
-
"@sparkelf/dsh-client-ui-diagram-viewer": "0.2.1-alpha.28",
|
|
646
|
-
"@deepseek-ai/dsh-tool-session-query": "0.2.2-alpha.2",
|
|
647
|
-
"@sparkelf/dsh-client-ui-skill-center": "0.2.1-rc.2.4",
|
|
648
|
-
"@sparkelf/dsh-image-hoist": ">=0.1.3",
|
|
649
|
-
"@sparkelf/dsh-plugin-backup": "0.2.1-rc.2.4",
|
|
650
|
-
"@sparkelf/dsh-plugin-mcp-credentials": "0.2.1-rc.2.6",
|
|
651
|
-
"dshmarket": ">=1.66.7",
|
|
652
|
-
"semver": ">=7.7.3",
|
|
653
|
-
"yaml": ">=2.9.0",
|
|
654
|
-
"@sparkelf/dsh-dataops-managed": "0.3.21",
|
|
655
|
-
"@sparkelf/dsh-query-result-analysis": "0.1.4",
|
|
656
|
-
"@sparkelf/dsh-knowledge-base": "0.1.21",
|
|
628
|
+
"@sparkelf/dsh-task-bus": "0.1.0",
|
|
657
629
|
"@sparkelf/dsh-credential-manager": "0.1.0",
|
|
630
|
+
"@sparkelf/dsh-dataops-account": "0.2.0",
|
|
658
631
|
"@sparkelf/dsh-group-chat": "0.5.1",
|
|
659
632
|
"@sparkelf/dsh-kb-citation": "0.1.3",
|
|
660
|
-
"@sparkelf/dsh-
|
|
633
|
+
"@sparkelf/dsh-ocr": "0.1.0",
|
|
634
|
+
"@sparkelf/dsh-query-result-analysis": "0.1.4",
|
|
635
|
+
"@sparkelf/dsh-better-sidebar": "0.28.0-sparkelf.grid.17",
|
|
636
|
+
"dsh-video-preview": "0.1.4",
|
|
637
|
+
"@sparkelf/dsh-sql-workbench": "0.5.4-sparkelf.1"
|
|
661
638
|
}
|
|
662
639
|
}
|
|
663
640
|
}
|