@sparkelf/dsh-plus 0.1.0-rc.35 → 0.1.0-rc.36
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 +44 -21
- package/lib/types/standalone-profile.d.ts +14 -10
- package/lib/types/standalone-profile.js +61 -25
- package/package.json +31 -27
package/lib/bin.js
CHANGED
|
@@ -307,7 +307,8 @@ function resolveDistributionDirectory(anchor) {
|
|
|
307
307
|
/** The reviewed bundle order and pins the installed distribution declares. */
|
|
308
308
|
function readDistributionProfile(distributionDirectory) {
|
|
309
309
|
const manifest = requireRecord(JSON.parse(readFileSync(join(distributionDirectory, "package.json"), "utf8")), "Plus distribution manifest");
|
|
310
|
-
const
|
|
310
|
+
const plus = requireRecord(manifest.dshPlus, "dshPlus");
|
|
311
|
+
const profile = requireRecord(plus.profile, "dshPlus.profile");
|
|
311
312
|
const rawDependencies = requireRecord(profile.dependencies, "dshPlus.profile.dependencies");
|
|
312
313
|
const rawAllowBuilds = requireRecord(profile.allowBuilds, "dshPlus.profile.allowBuilds");
|
|
313
314
|
const dependencies = {};
|
|
@@ -326,37 +327,53 @@ function readDistributionProfile(distributionDirectory) {
|
|
|
326
327
|
if (typeof spec !== "string" || spec === "") throw new Error("dshPlus.profile.overrides." + name + " must be a non-empty string");
|
|
327
328
|
overrides[name] = spec;
|
|
328
329
|
}
|
|
330
|
+
const compatibility = requireRecord(plus.compatibility, "dshPlus.compatibility");
|
|
329
331
|
return {
|
|
330
332
|
name: String(manifest.name),
|
|
331
333
|
bundles: requireStringArray(profile.bundles, "dshPlus.profile.bundles"),
|
|
332
334
|
dependencies,
|
|
333
335
|
allowBuilds,
|
|
334
336
|
overrides,
|
|
337
|
+
dshRange: String(compatibility.dsh),
|
|
335
338
|
version: String(manifest.version)
|
|
336
339
|
};
|
|
337
340
|
}
|
|
338
341
|
/**
|
|
339
|
-
*
|
|
342
|
+
* Give the profile its own installed tree, built from the distribution's declarations.
|
|
340
343
|
*
|
|
341
|
-
* The launcher resolves a bundle from the profile directory, so
|
|
342
|
-
* `node_modules
|
|
343
|
-
*
|
|
344
|
+
* The launcher resolves a bundle from the profile directory, so the profile needs its
|
|
345
|
+
* own `node_modules`. Pointing it at the consumer's tree was cheaper, but it made the
|
|
346
|
+
* profile inherit whatever npm had already installed — including the official packages
|
|
347
|
+
* the distribution's `overrides` exist to replace. npm applies `overrides` only from a
|
|
348
|
+
* project's own root, so a profile without its own tree cannot receive them at all, and
|
|
349
|
+
* a patch delivered that way silently never arrives.
|
|
344
350
|
*
|
|
345
|
-
*
|
|
346
|
-
*
|
|
347
|
-
*
|
|
348
|
-
*
|
|
351
|
+
* Installing here makes the profile that root: pnpm reads `overrides` from the
|
|
352
|
+
* profile's own `pnpm-workspace.yaml`, which `writeProfileOverrides` writes before this
|
|
353
|
+
* runs. The install is skipped once the tree exists so a start does not pay for it
|
|
354
|
+
* twice; `dsh-plus apply` remains the command that reinstalls after a change.
|
|
349
355
|
*
|
|
350
356
|
* @param paths - resolved standalone paths.
|
|
351
|
-
* @param consumerDirectory - directory whose `node_modules` holds the
|
|
357
|
+
* @param consumerDirectory - directory whose `node_modules` holds the installation.
|
|
352
358
|
*/
|
|
353
|
-
function
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
359
|
+
function installProfilePackages(paths, consumerDirectory) {
|
|
360
|
+
if (!existsSync(join(consumerDirectory, "node_modules"))) throw new Error("no node_modules in " + consumerDirectory + "; run npm install there first");
|
|
361
|
+
const profileModules = join(paths.profileDirectory, "node_modules");
|
|
362
|
+
if (existsSync(profileModules)) {
|
|
363
|
+
linkNestedBundles(paths, profileModules);
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
runPnpm(paths.profileDirectory, ["install", "--no-frozen-lockfile"], "pnpm install in the plus profile");
|
|
367
|
+
linkNestedBundles(paths, profileModules);
|
|
368
|
+
}
|
|
369
|
+
/** Run pnpm in one directory, inheriting its output. */
|
|
370
|
+
function runPnpm(cwd, args, label) {
|
|
371
|
+
const result = spawnSync(process.platform === "win32" ? "pnpm.cmd" : "pnpm", [...args], {
|
|
372
|
+
cwd,
|
|
373
|
+
stdio: "inherit"
|
|
374
|
+
});
|
|
375
|
+
if (result.error !== void 0) throw result.error;
|
|
376
|
+
if (result.status !== 0) throw new Error(label + " failed with exit code " + String(result.status));
|
|
360
377
|
}
|
|
361
378
|
/**
|
|
362
379
|
* Expose the distribution's nested packages at the top level the profile searches.
|
|
@@ -413,10 +430,13 @@ function resolvePaths(anchor, env = process.env) {
|
|
|
413
430
|
* @returns whether this call created the manifest.
|
|
414
431
|
*/
|
|
415
432
|
function ensureProfile(paths, consumerDirectory) {
|
|
416
|
-
linkConsumerPackages(paths, consumerDirectory);
|
|
417
433
|
const manifestPath = join(paths.profileDirectory, "package.json");
|
|
418
|
-
if (existsSync(manifestPath)) return false;
|
|
419
434
|
const distribution = readDistributionProfile(paths.distributionDirectory);
|
|
435
|
+
if (existsSync(manifestPath)) {
|
|
436
|
+
writeProfileOverrides(paths.profileDirectory, distribution.overrides, distribution.allowBuilds);
|
|
437
|
+
installProfilePackages(paths, consumerDirectory);
|
|
438
|
+
return false;
|
|
439
|
+
}
|
|
420
440
|
mkdirSync(paths.profileDirectory, { recursive: true });
|
|
421
441
|
const manifest = {
|
|
422
442
|
name: "dsh-profile-plus",
|
|
@@ -424,6 +444,7 @@ function ensureProfile(paths, consumerDirectory) {
|
|
|
424
444
|
type: "module",
|
|
425
445
|
dependencies: {
|
|
426
446
|
"@sparkelf/dsh-plus": distribution.version,
|
|
447
|
+
"@deepseek-ai/dsh": distribution.dshRange,
|
|
427
448
|
...distribution.dependencies
|
|
428
449
|
},
|
|
429
450
|
dsh: { profile: {
|
|
@@ -432,7 +453,8 @@ function ensureProfile(paths, consumerDirectory) {
|
|
|
432
453
|
} }
|
|
433
454
|
};
|
|
434
455
|
writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + "\n");
|
|
435
|
-
writeProfileOverrides(paths.profileDirectory, distribution.overrides);
|
|
456
|
+
writeProfileOverrides(paths.profileDirectory, distribution.overrides, distribution.allowBuilds);
|
|
457
|
+
installProfilePackages(paths, consumerDirectory);
|
|
436
458
|
return true;
|
|
437
459
|
}
|
|
438
460
|
/**
|
|
@@ -445,13 +467,14 @@ function ensureProfile(paths, consumerDirectory) {
|
|
|
445
467
|
* @param profileDirectory - the standalone profile directory.
|
|
446
468
|
* @param overrides - official package name to published replacement spec.
|
|
447
469
|
*/
|
|
448
|
-
function writeProfileOverrides(profileDirectory, overrides) {
|
|
470
|
+
function writeProfileOverrides(profileDirectory, overrides, allowBuilds) {
|
|
449
471
|
const workspacePath = join(profileDirectory, "pnpm-workspace.yaml");
|
|
450
472
|
const document = parseDocument(existsSync(workspacePath) ? readFileSync(workspacePath, "utf8") : "");
|
|
451
473
|
const [documentError] = document.errors;
|
|
452
474
|
if (documentError !== void 0) throw new Error("Plus profile workspace is not valid YAML", { cause: documentError });
|
|
453
475
|
if (document.get("packages") === void 0) document.set("packages", ["."]);
|
|
454
476
|
for (const [name, spec] of Object.entries(overrides)) document.setIn(["overrides", name], spec);
|
|
477
|
+
for (const [name, allowed] of Object.entries(allowBuilds)) document.setIn(["allowBuilds", name], allowed);
|
|
455
478
|
if (document.get("nodeLinker") === void 0) document.set("nodeLinker", "hoisted");
|
|
456
479
|
if (document.get("autoInstallPeers") === void 0) document.set("autoInstallPeers", false);
|
|
457
480
|
writeFileSync(workspacePath, String(document));
|
|
@@ -55,24 +55,28 @@ export declare function readDistributionProfile(distributionDirectory: string):
|
|
|
55
55
|
readonly dependencies: Readonly<Record<string, string>>;
|
|
56
56
|
readonly allowBuilds: Readonly<Record<string, boolean>>;
|
|
57
57
|
readonly overrides: Readonly<Record<string, string>>;
|
|
58
|
+
readonly dshRange: string;
|
|
58
59
|
readonly version: string;
|
|
59
60
|
};
|
|
60
61
|
/**
|
|
61
|
-
*
|
|
62
|
+
* Give the profile its own installed tree, built from the distribution's declarations.
|
|
62
63
|
*
|
|
63
|
-
* The launcher resolves a bundle from the profile directory, so
|
|
64
|
-
* `node_modules
|
|
65
|
-
*
|
|
64
|
+
* The launcher resolves a bundle from the profile directory, so the profile needs its
|
|
65
|
+
* own `node_modules`. Pointing it at the consumer's tree was cheaper, but it made the
|
|
66
|
+
* profile inherit whatever npm had already installed — including the official packages
|
|
67
|
+
* the distribution's `overrides` exist to replace. npm applies `overrides` only from a
|
|
68
|
+
* project's own root, so a profile without its own tree cannot receive them at all, and
|
|
69
|
+
* a patch delivered that way silently never arrives.
|
|
66
70
|
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
71
|
+
* Installing here makes the profile that root: pnpm reads `overrides` from the
|
|
72
|
+
* profile's own `pnpm-workspace.yaml`, which `writeProfileOverrides` writes before this
|
|
73
|
+
* runs. The install is skipped once the tree exists so a start does not pay for it
|
|
74
|
+
* twice; `dsh-plus apply` remains the command that reinstalls after a change.
|
|
71
75
|
*
|
|
72
76
|
* @param paths - resolved standalone paths.
|
|
73
|
-
* @param consumerDirectory - directory whose `node_modules` holds the
|
|
77
|
+
* @param consumerDirectory - directory whose `node_modules` holds the installation.
|
|
74
78
|
*/
|
|
75
|
-
export declare function
|
|
79
|
+
export declare function installProfilePackages(paths: StandalonePaths, consumerDirectory: string): void;
|
|
76
80
|
/** Resolve every path a command needs, without creating anything. */
|
|
77
81
|
export declare function resolvePaths(anchor: string, env?: NodeJS.ProcessEnv): StandalonePaths;
|
|
78
82
|
/**
|
|
@@ -118,42 +118,58 @@ export function readDistributionProfile(distributionDirectory) {
|
|
|
118
118
|
throw new Error('dshPlus.profile.overrides.' + name + ' must be a non-empty string');
|
|
119
119
|
overrides[name] = spec;
|
|
120
120
|
}
|
|
121
|
+
const compatibility = requireRecord(plus.compatibility, 'dshPlus.compatibility');
|
|
121
122
|
return {
|
|
122
123
|
name: String(manifest.name),
|
|
123
124
|
bundles: requireStringArray(profile.bundles, 'dshPlus.profile.bundles'),
|
|
124
125
|
dependencies,
|
|
125
126
|
allowBuilds,
|
|
126
127
|
overrides,
|
|
128
|
+
dshRange: String(compatibility.dsh),
|
|
127
129
|
version: String(manifest.version),
|
|
128
130
|
};
|
|
129
131
|
}
|
|
130
132
|
/**
|
|
131
|
-
*
|
|
133
|
+
* Give the profile its own installed tree, built from the distribution's declarations.
|
|
132
134
|
*
|
|
133
|
-
* The launcher resolves a bundle from the profile directory, so
|
|
134
|
-
* `node_modules
|
|
135
|
-
*
|
|
135
|
+
* The launcher resolves a bundle from the profile directory, so the profile needs its
|
|
136
|
+
* own `node_modules`. Pointing it at the consumer's tree was cheaper, but it made the
|
|
137
|
+
* profile inherit whatever npm had already installed — including the official packages
|
|
138
|
+
* the distribution's `overrides` exist to replace. npm applies `overrides` only from a
|
|
139
|
+
* project's own root, so a profile without its own tree cannot receive them at all, and
|
|
140
|
+
* a patch delivered that way silently never arrives.
|
|
136
141
|
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
142
|
+
* Installing here makes the profile that root: pnpm reads `overrides` from the
|
|
143
|
+
* profile's own `pnpm-workspace.yaml`, which `writeProfileOverrides` writes before this
|
|
144
|
+
* runs. The install is skipped once the tree exists so a start does not pay for it
|
|
145
|
+
* twice; `dsh-plus apply` remains the command that reinstalls after a change.
|
|
141
146
|
*
|
|
142
147
|
* @param paths - resolved standalone paths.
|
|
143
|
-
* @param consumerDirectory - directory whose `node_modules` holds the
|
|
148
|
+
* @param consumerDirectory - directory whose `node_modules` holds the installation.
|
|
144
149
|
*/
|
|
145
|
-
export function
|
|
146
|
-
const
|
|
147
|
-
if (!existsSync(
|
|
150
|
+
export function installProfilePackages(paths, consumerDirectory) {
|
|
151
|
+
const consumerModules = join(consumerDirectory, 'node_modules');
|
|
152
|
+
if (!existsSync(consumerModules)) {
|
|
148
153
|
throw new Error('no node_modules in ' + consumerDirectory + '; run npm install there first');
|
|
149
154
|
}
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
155
|
+
const profileModules = join(paths.profileDirectory, 'node_modules');
|
|
156
|
+
if (existsSync(profileModules)) {
|
|
157
|
+
// A profile installed before the distribution declared overrides still needs the
|
|
158
|
+
// packages it reaches from the consumer tree, which npm nested rather than hoisted.
|
|
159
|
+
linkNestedBundles(paths, profileModules);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
runPnpm(paths.profileDirectory, ['install', '--no-frozen-lockfile'], 'pnpm install in the plus profile');
|
|
163
|
+
linkNestedBundles(paths, profileModules);
|
|
164
|
+
}
|
|
165
|
+
/** Run pnpm in one directory, inheriting its output. */
|
|
166
|
+
function runPnpm(cwd, args, label) {
|
|
167
|
+
const command = process.platform === 'win32' ? 'pnpm.cmd' : 'pnpm';
|
|
168
|
+
const result = spawnSync(command, [...args], { cwd, stdio: 'inherit' });
|
|
169
|
+
if (result.error !== undefined)
|
|
170
|
+
throw result.error;
|
|
171
|
+
if (result.status !== 0)
|
|
172
|
+
throw new Error(label + ' failed with exit code ' + String(result.status));
|
|
157
173
|
}
|
|
158
174
|
/**
|
|
159
175
|
* Expose the distribution's nested packages at the top level the profile searches.
|
|
@@ -217,17 +233,30 @@ export function resolvePaths(anchor, env = process.env) {
|
|
|
217
233
|
* @returns whether this call created the manifest.
|
|
218
234
|
*/
|
|
219
235
|
export function ensureProfile(paths, consumerDirectory) {
|
|
220
|
-
linkConsumerPackages(paths, consumerDirectory);
|
|
221
236
|
const manifestPath = join(paths.profileDirectory, 'package.json');
|
|
222
|
-
if (existsSync(manifestPath))
|
|
223
|
-
return false;
|
|
224
237
|
const distribution = readDistributionProfile(paths.distributionDirectory);
|
|
238
|
+
if (existsSync(manifestPath)) {
|
|
239
|
+
// The workspace carries decisions the distribution owns — overrides and the build
|
|
240
|
+
// script allowlist — and a distribution release changes them. Rewriting on every
|
|
241
|
+
// start is what lets an upgraded installation receive the new values; a profile
|
|
242
|
+
// written once keeps whatever its own release decided and can never be corrected.
|
|
243
|
+
writeProfileOverrides(paths.profileDirectory, distribution.overrides, distribution.allowBuilds);
|
|
244
|
+
installProfilePackages(paths, consumerDirectory);
|
|
245
|
+
return false;
|
|
246
|
+
}
|
|
225
247
|
mkdirSync(paths.profileDirectory, { recursive: true });
|
|
226
248
|
const manifest = {
|
|
227
249
|
name: 'dsh-profile-' + STANDALONE_PROFILE,
|
|
228
250
|
private: true,
|
|
229
251
|
type: 'module',
|
|
230
|
-
dependencies: {
|
|
252
|
+
dependencies: {
|
|
253
|
+
'@sparkelf/dsh-plus': distribution.version,
|
|
254
|
+
// The launcher's own tree supplies every service package the bundles mount. A
|
|
255
|
+
// profile that lists only the distribution's plugins installs a partial tree and
|
|
256
|
+
// fails at load with a module the launcher would have carried.
|
|
257
|
+
'@deepseek-ai/dsh': distribution.dshRange,
|
|
258
|
+
...distribution.dependencies,
|
|
259
|
+
},
|
|
231
260
|
dsh: {
|
|
232
261
|
profile: {
|
|
233
262
|
bundles: distribution.bundles,
|
|
@@ -236,7 +265,9 @@ export function ensureProfile(paths, consumerDirectory) {
|
|
|
236
265
|
},
|
|
237
266
|
};
|
|
238
267
|
writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
|
|
239
|
-
|
|
268
|
+
// The overrides must reach the workspace before the install that reads them.
|
|
269
|
+
writeProfileOverrides(paths.profileDirectory, distribution.overrides, distribution.allowBuilds);
|
|
270
|
+
installProfilePackages(paths, consumerDirectory);
|
|
240
271
|
return true;
|
|
241
272
|
}
|
|
242
273
|
/**
|
|
@@ -249,7 +280,7 @@ export function ensureProfile(paths, consumerDirectory) {
|
|
|
249
280
|
* @param profileDirectory - the standalone profile directory.
|
|
250
281
|
* @param overrides - official package name to published replacement spec.
|
|
251
282
|
*/
|
|
252
|
-
function writeProfileOverrides(profileDirectory, overrides) {
|
|
283
|
+
function writeProfileOverrides(profileDirectory, overrides, allowBuilds) {
|
|
253
284
|
const workspacePath = join(profileDirectory, 'pnpm-workspace.yaml');
|
|
254
285
|
const document = parseDocument(existsSync(workspacePath) ? readFileSync(workspacePath, 'utf8') : '');
|
|
255
286
|
const [documentError] = document.errors;
|
|
@@ -259,6 +290,11 @@ function writeProfileOverrides(profileDirectory, overrides) {
|
|
|
259
290
|
document.set('packages', ['.']);
|
|
260
291
|
for (const [name, spec] of Object.entries(overrides))
|
|
261
292
|
document.setIn(['overrides', name], spec);
|
|
293
|
+
// pnpm refuses an install whose packages want to run build scripts until each is
|
|
294
|
+
// decided, so the distribution's reviewed decisions travel with the install rather
|
|
295
|
+
// than waiting for an interactive approval no start can offer.
|
|
296
|
+
for (const [name, allowed] of Object.entries(allowBuilds))
|
|
297
|
+
document.setIn(['allowBuilds', name], allowed);
|
|
262
298
|
// The profile resolves bundles from this directory, so peers the official tree would
|
|
263
299
|
// supply have to come from what the consumer installed.
|
|
264
300
|
if (document.get('nodeLinker') === undefined)
|
package/package.json
CHANGED
|
@@ -58,12 +58,16 @@
|
|
|
58
58
|
],
|
|
59
59
|
"profile": {
|
|
60
60
|
"allowBuilds": {
|
|
61
|
-
"@
|
|
62
|
-
"
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
61
|
+
"@deepseek-ai/dsh-subprocess-local@0.1.5-rc.2": true,
|
|
62
|
+
"@google/genai@1.52.0": false,
|
|
63
|
+
"@officecli/officecli@1.0.147": true,
|
|
64
|
+
"cpu-features@0.0.10": false,
|
|
65
|
+
"koffi@3.3.0": true,
|
|
66
|
+
"node-pty@1.1.0": true,
|
|
67
|
+
"node-pty@1.2.0-beta.15": true,
|
|
68
|
+
"oracledb@7.0.1": true,
|
|
69
|
+
"protobufjs@7.6.6": false,
|
|
70
|
+
"ssh2@1.17.0": true
|
|
67
71
|
},
|
|
68
72
|
"bundles": [
|
|
69
73
|
"@deepseek-ai/dsh-base",
|
|
@@ -100,26 +104,26 @@
|
|
|
100
104
|
"dsh-video-preview": "0.1.4"
|
|
101
105
|
},
|
|
102
106
|
"overrides": {
|
|
103
|
-
"@deepseek-ai/dsh-agent-presets": "npm:@sparkelf/dsh-agent-presets@0.1.5-rc.
|
|
104
|
-
"@deepseek-ai/dsh-api-gateway": "npm:@sparkelf/dsh-api-gateway@0.1.5-rc.
|
|
105
|
-
"@deepseek-ai/dsh-api-session-controller": "npm:@sparkelf/dsh-api-session-controller@0.1.5-rc.
|
|
106
|
-
"@deepseek-ai/dsh-client-connection": "npm:@sparkelf/dsh-client-connection@0.1.5-rc.
|
|
107
|
-
"@deepseek-ai/dsh-client-ui-agent-preset": "npm:@sparkelf/dsh-client-ui-agent-preset@0.1.5-rc.
|
|
108
|
-
"@deepseek-ai/dsh-client-ui-conversation": "npm:@sparkelf/dsh-client-ui-conversation@0.1.5-rc.
|
|
109
|
-
"@deepseek-ai/dsh-client-ui-deliverables": "npm:@sparkelf/dsh-client-ui-deliverables@0.1.5-rc.
|
|
110
|
-
"@deepseek-ai/dsh-client-ui-layout": "npm:@sparkelf/dsh-client-ui-layout@0.1.5-rc.
|
|
111
|
-
"@deepseek-ai/dsh-client-ui-model-selection": "npm:@sparkelf/dsh-client-ui-model-selection@0.1.5-rc.
|
|
112
|
-
"@deepseek-ai/dsh-client-ui-primitives": "npm:@sparkelf/dsh-client-ui-primitives@0.1.5-rc.
|
|
113
|
-
"@deepseek-ai/dsh-client-ui-settings-models": "npm:@sparkelf/dsh-client-ui-settings-models@0.1.5-rc.
|
|
114
|
-
"@deepseek-ai/dsh-client-ui-trajectory": "npm:@sparkelf/dsh-client-ui-trajectory@0.1.5-rc.
|
|
115
|
-
"@deepseek-ai/dsh-host-frontend-static": "npm:@sparkelf/dsh-host-frontend-static@0.1.5-rc.
|
|
116
|
-
"@deepseek-ai/dsh-host-webserver": "npm:@sparkelf/dsh-host-webserver@0.1.5-rc.
|
|
117
|
-
"@deepseek-ai/dsh-llm-pi-ai": "npm:@sparkelf/dsh-llm-pi-ai@0.1.5-rc.
|
|
118
|
-
"@deepseek-ai/dsh-session-log-export": "npm:@sparkelf/dsh-session-log-export@0.1.5-rc.
|
|
119
|
-
"@deepseek-ai/dsh-tools": "npm:@sparkelf/dsh-tools@0.1.5-rc.
|
|
120
|
-
"@deepseek-ai/dsh-web-app": "npm:@sparkelf/dsh-web-app@0.1.5-rc.
|
|
121
|
-
"@deepseek-ai/dsh-web-frontend": "npm:@sparkelf/dsh-web-frontend@0.1.5-rc.
|
|
122
|
-
"@deepseek-ai/dsh-workspace": "npm:@sparkelf/dsh-workspace@0.1.5-rc.
|
|
107
|
+
"@deepseek-ai/dsh-agent-presets": "npm:@sparkelf/dsh-agent-presets@0.1.5-rc.6",
|
|
108
|
+
"@deepseek-ai/dsh-api-gateway": "npm:@sparkelf/dsh-api-gateway@0.1.5-rc.6",
|
|
109
|
+
"@deepseek-ai/dsh-api-session-controller": "npm:@sparkelf/dsh-api-session-controller@0.1.5-rc.6",
|
|
110
|
+
"@deepseek-ai/dsh-client-connection": "npm:@sparkelf/dsh-client-connection@0.1.5-rc.6",
|
|
111
|
+
"@deepseek-ai/dsh-client-ui-agent-preset": "npm:@sparkelf/dsh-client-ui-agent-preset@0.1.5-rc.6",
|
|
112
|
+
"@deepseek-ai/dsh-client-ui-conversation": "npm:@sparkelf/dsh-client-ui-conversation@0.1.5-rc.6",
|
|
113
|
+
"@deepseek-ai/dsh-client-ui-deliverables": "npm:@sparkelf/dsh-client-ui-deliverables@0.1.5-rc.6",
|
|
114
|
+
"@deepseek-ai/dsh-client-ui-layout": "npm:@sparkelf/dsh-client-ui-layout@0.1.5-rc.6",
|
|
115
|
+
"@deepseek-ai/dsh-client-ui-model-selection": "npm:@sparkelf/dsh-client-ui-model-selection@0.1.5-rc.6",
|
|
116
|
+
"@deepseek-ai/dsh-client-ui-primitives": "npm:@sparkelf/dsh-client-ui-primitives@0.1.5-rc.6",
|
|
117
|
+
"@deepseek-ai/dsh-client-ui-settings-models": "npm:@sparkelf/dsh-client-ui-settings-models@0.1.5-rc.6",
|
|
118
|
+
"@deepseek-ai/dsh-client-ui-trajectory": "npm:@sparkelf/dsh-client-ui-trajectory@0.1.5-rc.6",
|
|
119
|
+
"@deepseek-ai/dsh-host-frontend-static": "npm:@sparkelf/dsh-host-frontend-static@0.1.5-rc.6",
|
|
120
|
+
"@deepseek-ai/dsh-host-webserver": "npm:@sparkelf/dsh-host-webserver@0.1.5-rc.6",
|
|
121
|
+
"@deepseek-ai/dsh-llm-pi-ai": "npm:@sparkelf/dsh-llm-pi-ai@0.1.5-rc.6",
|
|
122
|
+
"@deepseek-ai/dsh-session-log-export": "npm:@sparkelf/dsh-session-log-export@0.1.5-rc.6",
|
|
123
|
+
"@deepseek-ai/dsh-tools": "npm:@sparkelf/dsh-tools@0.1.5-rc.6",
|
|
124
|
+
"@deepseek-ai/dsh-web-app": "npm:@sparkelf/dsh-web-app@0.1.5-rc.6",
|
|
125
|
+
"@deepseek-ai/dsh-web-frontend": "npm:@sparkelf/dsh-web-frontend@0.1.5-rc.6",
|
|
126
|
+
"@deepseek-ai/dsh-workspace": "npm:@sparkelf/dsh-workspace@0.1.5-rc.6"
|
|
123
127
|
}
|
|
124
128
|
},
|
|
125
129
|
"sourceBase": {
|
|
@@ -162,5 +166,5 @@
|
|
|
162
166
|
},
|
|
163
167
|
"type": "module",
|
|
164
168
|
"types": "lib/types/index.d.ts",
|
|
165
|
-
"version": "0.1.0-rc.
|
|
169
|
+
"version": "0.1.0-rc.36"
|
|
166
170
|
}
|