@sparkelf/dsh-plus 0.2.0-rc.2 → 0.2.0-rc.20

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.
@@ -8,12 +8,56 @@
8
8
  * the launcher mounts exactly the bundles the profile names and nothing expands a
9
9
  * bundle's own list.
10
10
  */
11
- /** Profile name a standalone installation owns. */
11
+ /** Profile name a standalone installation owns when its package declares none. */
12
12
  export declare const STANDALONE_PROFILE = "plus";
13
+ /**
14
+ * Read the profile name the installing package declares.
15
+ *
16
+ * A standalone package describes the profile it materializes, so a reduced variant can
17
+ * own a differently named profile beside the full one instead of overwriting it. The
18
+ * declaration travels with the package because npm resolves the tree long before any
19
+ * command of ours runs, and the distribution cannot name a profile for a package it
20
+ * does not own.
21
+ *
22
+ * @param anchor - path inside the installing package's tree.
23
+ * @param fallback - profile name to use when the declaration is absent.
24
+ * @returns the declared profile name, or the fallback.
25
+ */
26
+ export declare function resolveStandaloneProfile(anchor: string, fallback?: string): string;
27
+ /** What the installing package declares about the deployment it owns. */
28
+ export interface StandaloneDeclaration {
29
+ /** Profile name the launcher materializes. */
30
+ readonly profileName: string;
31
+ /**
32
+ * Capabilities the deployment must not install, as package name to override spec.
33
+ *
34
+ * npm substitutes rather than deletes, so each entry names the placeholder the
35
+ * capability is replaced with. The profile workspace applies these as overrides,
36
+ * which is where pnpm reads them.
37
+ */
38
+ readonly omittedPackages: Readonly<Record<string, string>>;
39
+ }
40
+ /**
41
+ * Read the deployment facts the installing package declares.
42
+ *
43
+ * A standalone package describes the profile it materializes and the capabilities it
44
+ * omits, so a reduced variant owns a differently named profile and a reduced install
45
+ * without the distribution naming either. The declaration travels with the package
46
+ * because npm resolves the tree long before any command of ours runs.
47
+ *
48
+ * @param anchor - path inside the installing package's tree.
49
+ * @param fallback - profile name to use when the declaration is absent.
50
+ * @returns the declared profile name and omitted capabilities.
51
+ */
52
+ export declare function readStandaloneDeclaration(anchor: string, fallback?: string): StandaloneDeclaration;
13
53
  /** Resolved locations for one standalone installation. */
14
54
  export interface StandalonePaths {
15
55
  /** DSH home holding profiles, credentials, and session data. */
16
56
  readonly home: string;
57
+ /** Profile name the launcher boots, as the installing package declares it. */
58
+ readonly profileName: string;
59
+ /** Capabilities the deployment omits, as package name to override spec. */
60
+ readonly omittedPackages: Readonly<Record<string, string>>;
17
61
  /** Profile directory the launcher boots. */
18
62
  readonly profileDirectory: string;
19
63
  /** Installed Plus distribution directory. */
@@ -14,8 +14,79 @@ import { createRequire } from 'node:module';
14
14
  import { homedir } from 'node:os';
15
15
  import { dirname, join, posix, resolve, win32 } from 'node:path';
16
16
  import { parseDocument } from 'yaml';
17
- /** Profile name a standalone installation owns. */
17
+ /** Profile name a standalone installation owns when its package declares none. */
18
18
  export const STANDALONE_PROFILE = 'plus';
19
+ /**
20
+ * Read the profile name the installing package declares.
21
+ *
22
+ * A standalone package describes the profile it materializes, so a reduced variant can
23
+ * own a differently named profile beside the full one instead of overwriting it. The
24
+ * declaration travels with the package because npm resolves the tree long before any
25
+ * command of ours runs, and the distribution cannot name a profile for a package it
26
+ * does not own.
27
+ *
28
+ * @param anchor - path inside the installing package's tree.
29
+ * @param fallback - profile name to use when the declaration is absent.
30
+ * @returns the declared profile name, or the fallback.
31
+ */
32
+ export function resolveStandaloneProfile(anchor, fallback = STANDALONE_PROFILE) {
33
+ return readStandaloneDeclaration(anchor, fallback).profileName;
34
+ }
35
+ /**
36
+ * Read the deployment facts the installing package declares.
37
+ *
38
+ * A standalone package describes the profile it materializes and the capabilities it
39
+ * omits, so a reduced variant owns a differently named profile and a reduced install
40
+ * without the distribution naming either. The declaration travels with the package
41
+ * because npm resolves the tree long before any command of ours runs.
42
+ *
43
+ * @param anchor - path inside the installing package's tree.
44
+ * @param fallback - profile name to use when the declaration is absent.
45
+ * @returns the declared profile name and omitted capabilities.
46
+ */
47
+ export function readStandaloneDeclaration(anchor, fallback = STANDALONE_PROFILE) {
48
+ // The anchor is the CLI file; walk out to the package that declares the forwarder.
49
+ let current = resolve(anchor);
50
+ for (;;) {
51
+ const manifestPath = join(current, 'package.json');
52
+ const declared = readStandaloneFacts(manifestPath);
53
+ if (declared !== undefined)
54
+ return declared;
55
+ const parent = dirname(current);
56
+ if (parent === current)
57
+ return { profileName: fallback, omittedPackages: {} };
58
+ current = parent;
59
+ }
60
+ }
61
+ /** Read one manifest's standalone declaration, or undefined when it carries none. */
62
+ function readStandaloneFacts(manifestPath) {
63
+ if (!existsSync(manifestPath))
64
+ return undefined;
65
+ let standalone;
66
+ try {
67
+ const manifest = JSON.parse(readFileSync(manifestPath, 'utf8'));
68
+ standalone = manifest.dshPlusStandalone;
69
+ }
70
+ catch {
71
+ // A package whose manifest cannot be read declares nothing; the caller keeps walking
72
+ // because the declaring package may sit above it.
73
+ return undefined;
74
+ }
75
+ const profile = standalone?.profile;
76
+ if (standalone === undefined || typeof profile !== 'string' || profile === '')
77
+ return undefined;
78
+ const rawOmitted = standalone.omittedPackages;
79
+ const omittedPackages = {};
80
+ if (rawOmitted !== undefined && typeof rawOmitted === 'object' && !Array.isArray(rawOmitted)) {
81
+ for (const [name, spec] of Object.entries(rawOmitted)) {
82
+ if (typeof spec !== 'string' || spec === '') {
83
+ throw new Error('dshPlusStandalone.omittedPackages.' + name + ' must be a non-empty string');
84
+ }
85
+ omittedPackages[name] = spec;
86
+ }
87
+ }
88
+ return { profileName: profile, omittedPackages };
89
+ }
19
90
  function requireRecord(value, label) {
20
91
  if (value === null || typeof value !== 'object' || Array.isArray(value))
21
92
  throw new Error(label + ' must be an object');
@@ -336,9 +407,12 @@ function linkBundle(consumerModules, name, source) {
336
407
  /** Resolve every path a command needs, without creating anything. */
337
408
  export function resolvePaths(anchor, env = process.env) {
338
409
  const home = resolveHome(env);
410
+ const declaration = readStandaloneDeclaration(anchor);
339
411
  return {
340
412
  home,
341
- profileDirectory: join(home, 'profiles', STANDALONE_PROFILE),
413
+ profileName: declaration.profileName,
414
+ omittedPackages: declaration.omittedPackages,
415
+ profileDirectory: join(home, 'profiles', declaration.profileName),
342
416
  distributionDirectory: resolveDistributionDirectory(anchor),
343
417
  };
344
418
  }
@@ -366,7 +440,7 @@ export function ensureProfile(paths, consumerDirectory) {
366
440
  // script allowlist — and a distribution release changes them. Rewriting on every
367
441
  // start is what lets an upgraded installation receive the new values; a profile
368
442
  // written once keeps whatever its own release decided and can never be corrected.
369
- writeProfileOverrides(paths.profileDirectory, distribution.overrides, distribution.allowBuilds);
443
+ writeProfileOverrides(paths.profileDirectory, distribution.overrides, distribution.allowBuilds, paths.omittedPackages);
370
444
  installProfilePackages(paths, consumerDirectory);
371
445
  return false;
372
446
  }
@@ -392,7 +466,7 @@ export function ensureProfile(paths, consumerDirectory) {
392
466
  };
393
467
  writeFileSync(manifestPath, JSON.stringify(manifest, null, 2) + '\n');
394
468
  // The overrides must reach the workspace before the install that reads them.
395
- writeProfileOverrides(paths.profileDirectory, distribution.overrides, distribution.allowBuilds);
469
+ writeProfileOverrides(paths.profileDirectory, distribution.overrides, distribution.allowBuilds, paths.omittedPackages);
396
470
  installProfilePackages(paths, consumerDirectory);
397
471
  return true;
398
472
  }
@@ -406,7 +480,7 @@ export function ensureProfile(paths, consumerDirectory) {
406
480
  * @param profileDirectory - the standalone profile directory.
407
481
  * @param overrides - official package name to published replacement spec.
408
482
  */
409
- function writeProfileOverrides(profileDirectory, overrides, allowBuilds) {
483
+ function writeProfileOverrides(profileDirectory, overrides, allowBuilds, omittedPackages) {
410
484
  const workspacePath = join(profileDirectory, 'pnpm-workspace.yaml');
411
485
  const document = parseDocument(existsSync(workspacePath) ? readFileSync(workspacePath, 'utf8') : '');
412
486
  const [documentError] = document.errors;
@@ -416,6 +490,11 @@ function writeProfileOverrides(profileDirectory, overrides, allowBuilds) {
416
490
  document.set('packages', ['.']);
417
491
  for (const [name, spec] of Object.entries(overrides))
418
492
  document.setIn(['overrides', name], spec);
493
+ // A capability the deployment omits is substituted rather than deleted, because npm's
494
+ // override has no removal form. Writing it here keeps the omission in the one place
495
+ // pnpm reads, so an install never receives the capability the variant excluded.
496
+ for (const [name, spec] of Object.entries(omittedPackages))
497
+ document.setIn(['overrides', name], spec);
419
498
  // pnpm refuses an install whose packages want to run build scripts until each is
420
499
  // decided, so the distribution's reviewed decisions travel with the install rather
421
500
  // than waiting for an interactive approval no start can offer.
@@ -99,8 +99,8 @@ export function spawnServer(options) {
99
99
  env: options.env,
100
100
  });
101
101
  const stream = createWriteStream(options.logPath);
102
- output.stdout?.pipe(stream);
103
- output.stderr?.pipe(stream);
102
+ output.stdout.pipe(stream);
103
+ output.stderr.pipe(stream);
104
104
  output.unref();
105
105
  if (output.pid === undefined)
106
106
  throw new Error('the server process did not start');
package/package.json CHANGED
@@ -3,24 +3,30 @@
3
3
  "dsh-plus": "lib/bin.js"
4
4
  },
5
5
  "dependencies": {
6
- "@sparkelf/dsh-mobile-bridge": ">=0.2.11",
7
- "@sparkelf/dsh-patch-better-sidebar-media-path": ">=0.1.0-rc.26",
8
- "@sparkelf/dsh-patch-browser-auth-mode": ">=0.1.0-rc.26",
9
- "@sparkelf/dsh-patch-composer-popover-boundaries": ">=0.1.0-rc.26",
10
- "@sparkelf/dsh-patch-legacy-code-preset": ">=0.1.0-rc.26",
11
- "@sparkelf/dsh-patch-mobile-journal-generation": ">=0.1.0-rc.26",
12
- "@sparkelf/dsh-patch-officecli-deliverables": ">=0.1.0-rc.26",
13
- "@sparkelf/dsh-patch-ptc-mcp-schema-types": ">=0.1.0-rc.26",
14
- "@sparkelf/dsh-patch-responses-reasoning-status": ">=0.1.0-rc.26",
15
- "@sparkelf/dsh-patch-session-export-chinese": ">=0.1.0-rc.26",
16
- "@sparkelf/dsh-patch-session-log-trajectory-toolbar": ">=0.1.0-rc.26",
17
- "@sparkelf/dsh-patch-subagent-settings-presets": ">=0.1.0-rc.26",
18
- "@sparkelf/dsh-patch-web-base-path": ">=0.1.0-rc.26",
19
- "@sparkelf/dsh-patch-workspace-storage-restore": ">=0.1.0-rc.26",
20
- "@sparkelf/dsh-plugin-backup": ">=0.1.0-rc.26",
21
- "@sparkelf/dsh-plugin-dataops": ">=0.1.0-rc.26",
22
- "@sparkelf/dsh-plugin-mcp-credentials": ">=0.1.0-rc.26",
23
- "@sparkelf/dsh-plugin-subagent-settings": ">=0.1.0-rc.26",
6
+ "@deepseek-ai/dsh-tool-session-query": ">=0.1.6-alpha.1",
7
+ "@sparkelf/dsh-client-ui-skill-center": ">=0.2.0-rc.17",
8
+ "@sparkelf/dsh-patch-better-sidebar-browser-url-seed": ">=0.2.0-rc.17",
9
+ "@sparkelf/dsh-patch-better-sidebar-html-preview-path": ">=0.2.0-rc.17",
10
+ "@sparkelf/dsh-patch-better-sidebar-main-view-session": ">=0.2.0-rc.17",
11
+ "@sparkelf/dsh-patch-better-sidebar-media-path": ">=0.2.0-rc.17",
12
+ "@sparkelf/dsh-patch-browser-auth-mode": ">=0.2.0-rc.17",
13
+ "@sparkelf/dsh-patch-composer-popover-boundaries": ">=0.2.0-rc.17",
14
+ "@sparkelf/dsh-patch-legacy-code-preset": ">=0.2.0-rc.17",
15
+ "@sparkelf/dsh-patch-mobile-journal-generation": ">=0.2.0-rc.17",
16
+ "@sparkelf/dsh-patch-officecli-deliverables": ">=0.2.0-rc.17",
17
+ "@sparkelf/dsh-patch-ptc-mcp-schema-types": ">=0.2.0-rc.17",
18
+ "@sparkelf/dsh-patch-responses-reasoning-status": ">=0.2.0-rc.17",
19
+ "@sparkelf/dsh-patch-session-export-chinese": ">=0.2.0-rc.17",
20
+ "@sparkelf/dsh-patch-session-format-legacy-restart": ">=0.2.0-rc.17",
21
+ "@sparkelf/dsh-patch-session-log-trajectory-toolbar": ">=0.2.0-rc.17",
22
+ "@sparkelf/dsh-patch-session-query-unindexable-session": ">=0.2.0-rc.17",
23
+ "@sparkelf/dsh-patch-subagent-settings-presets": ">=0.2.0-rc.17",
24
+ "@sparkelf/dsh-patch-web-base-path": ">=0.2.0-rc.17",
25
+ "@sparkelf/dsh-patch-workspace-storage-restore": ">=0.2.0-rc.17",
26
+ "@sparkelf/dsh-patch-wsl-native-open": ">=0.2.0-rc.17",
27
+ "@sparkelf/dsh-plugin-backup": ">=0.2.0-rc.17",
28
+ "@sparkelf/dsh-plugin-mcp-credentials": ">=0.2.0-rc.17",
29
+ "@sparkelf/dsh-plugin-subagent-settings": ">=0.2.0-rc.17",
24
30
  "dshmarket": ">=1.45.1",
25
31
  "semver": ">=7.7.3",
26
32
  "yaml": ">=2.9.0"
@@ -43,6 +49,8 @@
43
49
  "formatVersion": 1,
44
50
  "patchPackages": [
45
51
  "@sparkelf/dsh-patch-better-sidebar-media-path",
52
+ "@sparkelf/dsh-patch-better-sidebar-main-view-session",
53
+ "@sparkelf/dsh-patch-better-sidebar-browser-url-seed",
46
54
  "@sparkelf/dsh-patch-officecli-deliverables",
47
55
  "@sparkelf/dsh-patch-browser-auth-mode",
48
56
  "@sparkelf/dsh-patch-workspace-storage-restore",
@@ -54,6 +62,10 @@
54
62
  "@sparkelf/dsh-patch-ptc-mcp-schema-types",
55
63
  "@sparkelf/dsh-patch-web-base-path",
56
64
  "@sparkelf/dsh-patch-composer-popover-boundaries",
65
+ "@sparkelf/dsh-patch-session-format-legacy-restart",
66
+ "@sparkelf/dsh-patch-wsl-native-open",
67
+ "@sparkelf/dsh-patch-better-sidebar-html-preview-path",
68
+ "@sparkelf/dsh-patch-session-query-unindexable-session",
57
69
  "@sparkelf/dsh-patch-mobile-journal-generation"
58
70
  ],
59
71
  "profile": {
@@ -70,10 +82,11 @@
70
82
  },
71
83
  "bundles": [
72
84
  "@deepseek-ai/dsh-base",
85
+ "@deepseek-ai/dsh-experimental-agent-team-profile",
73
86
  "@deepseek-ai/dsh-web-app",
87
+ "@deepseek-ai/dsh-experimental-agent-team-web-profile",
74
88
  "@sparkelf/dsh-mineru",
75
89
  "@sparkelf/dsh-officecli",
76
- "@sparkelf/dsh-mobile-bridge",
77
90
  "dshmarket",
78
91
  "@huanlin/dsh-plugin-better-locale",
79
92
  "dsh-better-sidebar",
@@ -85,48 +98,79 @@
85
98
  "@sparkelf/dsh-plus",
86
99
  "dsh-sql-workbench",
87
100
  "@sparkelf/dsh-ssh-manager",
88
- "@sparkelf/dsh-api-client"
101
+ "@sparkelf/dsh-api-client",
102
+ "dsh-right-bg-anim"
89
103
  ],
90
104
  "dependencies": {
91
- "@changfenhuang/dsh-genui": "0.9.9",
92
- "@huanlin/dsh-plugin-better-locale": "0.4.1",
105
+ "@changfenhuang/dsh-genui": "0.11.0",
106
+ "@deepseek-ai/dsh-experimental-agent-team-profile": ">=0.1.6-alpha.1",
107
+ "@deepseek-ai/dsh-experimental-agent-team-web-profile": ">=0.1.6-alpha.1",
108
+ "@huanlin/dsh-plugin-better-locale": "0.4.3",
93
109
  "@sparkelf/dsh-api-client": "0.5.1",
94
110
  "@sparkelf/dsh-mineru": "0.1.2",
95
111
  "@sparkelf/dsh-office-viewer-fonts": "0.1.2",
96
112
  "@sparkelf/dsh-officecli": "0.1.2",
97
113
  "@sparkelf/dsh-plugin-better-sidebar-office": "0.2.1",
98
- "@sparkelf/dsh-plugin-supervisor": "0.1.5",
114
+ "@sparkelf/dsh-plugin-supervisor": "0.1.6",
99
115
  "@sparkelf/dsh-ssh-manager": "0.7.2",
100
116
  "@sparkelf/dsh-workbench-vault": "0.1.2",
101
117
  "dsh-better-sidebar": "0.19.1",
118
+ "dsh-right-bg-anim": "1.1.0",
102
119
  "dsh-sql-workbench": "0.5.1",
103
120
  "dsh-video-preview": "0.1.4"
104
121
  },
105
122
  "overrides": {
106
- "@deepseek-ai/dsh-agent-presets": "npm:@sparkelf/dsh-agent-presets@0.1.6-alpha.2",
123
+ "@deepseek-ai/dsh-agent-presets": "npm:@sparkelf/dsh-agent-presets@0.1.6-alpha.3",
107
124
  "@deepseek-ai/dsh-api-gateway": "npm:@sparkelf/dsh-api-gateway@0.1.6-alpha.2",
108
- "@deepseek-ai/dsh-api-session-controller": "npm:@sparkelf/dsh-api-session-controller@0.1.6-alpha.2",
125
+ "@deepseek-ai/dsh-api-session-controller": "npm:@sparkelf/dsh-api-session-controller@0.1.6-alpha.3",
126
+ "@deepseek-ai/dsh-api-terminal-controller": "npm:@sparkelf/dsh-api-terminal-controller@0.1.6-alpha.3",
109
127
  "@deepseek-ai/dsh-client-connection": "npm:@sparkelf/dsh-client-connection@0.1.6-alpha.2",
110
128
  "@deepseek-ai/dsh-client-ui-agent-preset": "npm:@sparkelf/dsh-client-ui-agent-preset@0.1.6-alpha.2",
111
- "@deepseek-ai/dsh-client-ui-conversation": "npm:@sparkelf/dsh-client-ui-conversation@0.1.6-alpha.2",
112
129
  "@deepseek-ai/dsh-client-ui-deliverables": "npm:@sparkelf/dsh-client-ui-deliverables@0.1.6-alpha.2",
113
130
  "@deepseek-ai/dsh-client-ui-layout": "npm:@sparkelf/dsh-client-ui-layout@0.1.6-alpha.2",
114
131
  "@deepseek-ai/dsh-client-ui-model-selection": "npm:@sparkelf/dsh-client-ui-model-selection@0.1.6-alpha.2",
132
+ "@deepseek-ai/dsh-client-ui-permission-presets": "npm:@sparkelf/dsh-client-ui-permission-presets@0.1.6-alpha.2",
115
133
  "@deepseek-ai/dsh-client-ui-primitives": "npm:@sparkelf/dsh-client-ui-primitives@0.1.6-alpha.2",
116
134
  "@deepseek-ai/dsh-client-ui-settings-models": "npm:@sparkelf/dsh-client-ui-settings-models@0.1.6-alpha.2",
117
135
  "@deepseek-ai/dsh-client-ui-trajectory": "npm:@sparkelf/dsh-client-ui-trajectory@0.1.6-alpha.2",
118
136
  "@deepseek-ai/dsh-host-frontend-static": "npm:@sparkelf/dsh-host-frontend-static@0.1.6-alpha.2",
137
+ "@deepseek-ai/dsh-host-open-in-app": "npm:@sparkelf/dsh-host-open-in-app@0.1.6-alpha.2",
119
138
  "@deepseek-ai/dsh-host-webserver": "npm:@sparkelf/dsh-host-webserver@0.1.6-alpha.2",
139
+ "@deepseek-ai/dsh-llm": "npm:@sparkelf/dsh-llm@0.1.6-alpha.2",
120
140
  "@deepseek-ai/dsh-llm-pi-ai": "npm:@sparkelf/dsh-llm-pi-ai@0.1.6-alpha.2",
141
+ "@deepseek-ai/dsh-native-command": "npm:@sparkelf/dsh-native-command@0.1.6-alpha.2",
142
+ "@deepseek-ai/dsh-session-format-v0-to-v1": "npm:@sparkelf/dsh-session-format-v0-to-v1@0.1.6-alpha.2",
121
143
  "@deepseek-ai/dsh-session-log-export": "npm:@sparkelf/dsh-session-log-export@0.1.6-alpha.2",
144
+ "@deepseek-ai/dsh-session-query-sqlite": "npm:@sparkelf/dsh-session-query-sqlite@0.1.6-alpha.2",
145
+ "@deepseek-ai/dsh-subagent": "npm:@sparkelf/dsh-subagent@0.1.6-alpha.2",
122
146
  "@deepseek-ai/dsh-tools": "npm:@sparkelf/dsh-tools@0.1.6-alpha.2",
123
147
  "@deepseek-ai/dsh-web-app": "npm:@sparkelf/dsh-web-app@0.1.6-alpha.2",
124
148
  "@deepseek-ai/dsh-web-frontend": "npm:@sparkelf/dsh-web-frontend@0.1.6-alpha.2",
125
149
  "@deepseek-ai/dsh-workspace": "npm:@sparkelf/dsh-workspace@0.1.6-alpha.2"
150
+ },
151
+ "standaloneVariants": {
152
+ "dataops": {
153
+ "excludeBundles": [],
154
+ "excludePackages": [
155
+ "@deepseek-ai/dsh-computer-use",
156
+ "@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp",
157
+ "@deepseek-ai/dsh-web-search-exa"
158
+ ],
159
+ "includeBundles": [
160
+ "@sparkelf/dsh-dataops-managed",
161
+ "@sparkelf/dsh-query-result-analysis"
162
+ ],
163
+ "includePackages": {
164
+ "@sparkelf/dsh-dataops-managed": "0.3.2",
165
+ "@sparkelf/dsh-query-result-analysis": "0.1.2"
166
+ },
167
+ "packageName": "@sparkelf/dsh-dataops-standalone",
168
+ "profile": "dataops-web"
169
+ }
126
170
  }
127
171
  },
128
172
  "sourceBase": {
129
- "revision": "0a15e36e7f82b6ed45af6fa9759f29b40dcd965d"
173
+ "revision": "ddefc45fbc7f8e46dd73185e68295696d1297887"
130
174
  }
131
175
  },
132
176
  "exports": {
@@ -152,6 +196,11 @@
152
196
  "license": "MIT",
153
197
  "main": "lib/index.js",
154
198
  "name": "@sparkelf/dsh-plus",
199
+ "optionalDependencies": {
200
+ "@deepseek-ai/dsh-computer-use": ">=0.1.6-alpha.1",
201
+ "@deepseek-ai/dsh-experimental-computer-use-cua-driver-mcp": ">=0.1.6-alpha.1",
202
+ "@deepseek-ai/dsh-web-search-exa": ">=0.1.6-alpha.1"
203
+ },
155
204
  "peerDependencies": {
156
205
  "@deepseek-ai/cordis": ">=4.0.1"
157
206
  },
@@ -165,5 +214,5 @@
165
214
  },
166
215
  "type": "module",
167
216
  "types": "lib/types/index.d.ts",
168
- "version": "0.2.0-rc.2"
217
+ "version": "0.2.0-rc.20"
169
218
  }