@cofy-x/dsh-console 0.1.0-alpha.16 → 0.1.0-alpha.17

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 CHANGED
@@ -6,14 +6,16 @@
6
6
 
7
7
  ## Install
8
8
 
9
- DSH Console requires Node.js 24 or newer, supports DeepSeek Harness `0.1.6-alpha.1`, and needs a working DSH provider configuration. Compatibility is verified against the immutable Harness release commit; install DSH normally without pinning the command to a version.
9
+ DSH Console requires Node.js 24 or newer, supports DeepSeek Harness `0.1.6-alpha.2` through the maximum tested version `0.1.6-alpha.2`, and needs a working DSH provider configuration. Console follows audited DSH releases; the compatible prerelease can differ from npm `latest`, so install the exact audited pair:
10
10
 
11
11
  ```sh
12
- npm install --global @deepseek-ai/dsh @cofy-x/dsh-console
12
+ npm install --global @deepseek-ai/dsh@0.1.6-alpha.2 @cofy-x/dsh-console@0.1.0-alpha.17
13
13
  dsh-console --prompt "hello"
14
14
  ```
15
15
 
16
- Public Alpha releases retain prerelease versions while the current published Console remains available through npm's default install path.
16
+ The launcher resolves the actual `dsh` executable on `PATH` and validates its version before changing the Console profile. Check it with `dsh --version` and `command -v dsh` on macOS/Linux, `(Get-Command dsh).Source` in PowerShell, or `where dsh` in Command Prompt. Older DSH releases are blocked with the exact repair command; newer unaudited releases receive a non-blocking warning.
17
+
18
+ Public Alpha releases retain prerelease versions while the current published Console remains available through npm's default install path. The published launcher reconciles its package into the DSH profile; `pnpm start` from a source checkout resolves that checkout and is a separate development path.
17
19
 
18
20
  ## Use
19
21
 
@@ -6,11 +6,19 @@
6
6
  * SPDX-License-Identifier: Apache-2.0
7
7
  */
8
8
 
9
- import { existsSync, readFileSync, realpathSync } from 'node:fs';
9
+ import {
10
+ accessSync,
11
+ constants,
12
+ existsSync,
13
+ readFileSync,
14
+ realpathSync,
15
+ statSync,
16
+ } from 'node:fs';
10
17
  import { homedir } from 'node:os';
11
- import { dirname, join } from 'node:path';
18
+ import { delimiter, dirname, join, resolve } from 'node:path';
12
19
  import { fileURLToPath } from 'node:url';
13
20
  import crossSpawn from 'cross-spawn';
21
+ import semver from 'semver';
14
22
 
15
23
  const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
16
24
  const manifest = JSON.parse(
@@ -20,6 +28,7 @@ const packageName = '@cofy-x/dsh-console';
20
28
  const profile = 'dsh-console';
21
29
  const RESTART_EXIT_CODE = 199;
22
30
  const forwardedArgs = process.argv.slice(2);
31
+ const compatibility = manifest.dsh?.compatibility;
23
32
 
24
33
  // Package managers preserve the conventional argument separator when running
25
34
  // scripts. It separates package-manager options and is not part of the CLI's
@@ -31,6 +40,131 @@ if (forwardedArgs[0] === '--version' || forwardedArgs[0] === '-V') {
31
40
  process.exit(0);
32
41
  }
33
42
 
43
+ function fail(lines) {
44
+ process.stderr.write(`${lines.join('\n')}\n`);
45
+ process.exit(1);
46
+ }
47
+
48
+ const minimumDshVersion = semver.valid(compatibility?.minimum);
49
+ const maximumTestedDshVersion = semver.valid(compatibility?.maximumTested);
50
+ if (
51
+ !minimumDshVersion ||
52
+ !maximumTestedDshVersion ||
53
+ semver.gt(minimumDshVersion, maximumTestedDshVersion)
54
+ ) {
55
+ fail(['dsh-console: invalid DSH compatibility metadata in package.json.']);
56
+ }
57
+
58
+ const installDshCommand = `npm install --global @deepseek-ai/dsh@${minimumDshVersion}`;
59
+
60
+ function environmentValue(name) {
61
+ const entry = Object.entries(process.env).find(
62
+ ([key]) => key.toLowerCase() === name.toLowerCase(),
63
+ );
64
+ return entry?.[1];
65
+ }
66
+
67
+ function resolveDshExecutable() {
68
+ const searchPath = environmentValue('PATH');
69
+ if (!searchPath) return undefined;
70
+
71
+ const names = ['dsh'];
72
+ if (process.platform === 'win32') {
73
+ const extensions = (environmentValue('PATHEXT') || '.COM;.EXE;.BAT;.CMD')
74
+ .split(delimiter)
75
+ .filter(Boolean);
76
+ names.push(...extensions.map((extension) => `dsh${extension}`));
77
+ }
78
+
79
+ let inaccessible;
80
+ for (const directory of searchPath.split(delimiter)) {
81
+ const root = resolve(directory || process.cwd());
82
+ for (const name of names) {
83
+ const candidate = join(root, name);
84
+ try {
85
+ if (!statSync(candidate).isFile()) continue;
86
+ if (process.platform !== 'win32') accessSync(candidate, constants.X_OK);
87
+ return candidate;
88
+ } catch (error) {
89
+ if (existsSync(candidate) && error?.code === 'EACCES') {
90
+ inaccessible ||= candidate;
91
+ }
92
+ }
93
+ }
94
+ }
95
+ return inaccessible;
96
+ }
97
+
98
+ function parseDshVersion(output) {
99
+ const match = output.match(
100
+ /(?:^|[^0-9A-Za-z-])v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?)(?=$|[^0-9A-Za-z-])/,
101
+ );
102
+ return match ? semver.valid(match[1]) : null;
103
+ }
104
+
105
+ function remediation(executable = 'not found on PATH') {
106
+ return [
107
+ `DSH executable: ${executable}`,
108
+ `Minimum supported version: ${minimumDshVersion}`,
109
+ `Install the compatible release: ${installDshCommand}`,
110
+ 'Then verify: dsh --version',
111
+ ];
112
+ }
113
+
114
+ const dshExecutable = resolveDshExecutable();
115
+ if (!dshExecutable) {
116
+ fail([
117
+ 'dsh-console: DeepSeek Harness is required but dsh was not found.',
118
+ ...remediation(),
119
+ ]);
120
+ }
121
+
122
+ const versionResult = crossSpawn.sync(dshExecutable, ['--version'], {
123
+ encoding: 'utf8',
124
+ env: process.env,
125
+ stdio: ['ignore', 'pipe', 'pipe'],
126
+ });
127
+ if (versionResult.error) {
128
+ fail([
129
+ 'dsh-console: unable to execute DeepSeek Harness.',
130
+ ...remediation(dshExecutable),
131
+ `Reason: ${versionResult.error.message}`,
132
+ ]);
133
+ }
134
+ if (versionResult.signal || versionResult.status !== 0) {
135
+ fail([
136
+ 'dsh-console: dsh --version did not complete successfully.',
137
+ ...remediation(dshExecutable),
138
+ `Exit: ${versionResult.signal || String(versionResult.status)}`,
139
+ ]);
140
+ }
141
+
142
+ const versionOutput = `${versionResult.stdout || ''}\n${versionResult.stderr || ''}`;
143
+ const detectedDshVersion = parseDshVersion(versionOutput);
144
+ if (!detectedDshVersion) {
145
+ const summary = versionOutput.trim().replace(/\s+/g, ' ').slice(0, 160);
146
+ fail([
147
+ 'dsh-console: dsh --version returned an unrecognized version.',
148
+ ...remediation(dshExecutable),
149
+ `Output: ${summary ? JSON.stringify(summary) : '(empty)'}`,
150
+ ]);
151
+ }
152
+ if (semver.lt(detectedDshVersion, minimumDshVersion)) {
153
+ fail([
154
+ 'dsh-console: the selected DeepSeek Harness release is too old.',
155
+ `DSH executable: ${dshExecutable}`,
156
+ `Detected version: ${detectedDshVersion}`,
157
+ `Minimum supported version: ${minimumDshVersion}`,
158
+ `Install the compatible release: ${installDshCommand}`,
159
+ 'Then verify: dsh --version',
160
+ ]);
161
+ }
162
+ if (semver.gt(detectedDshVersion, maximumTestedDshVersion)) {
163
+ process.stderr.write(
164
+ `dsh-console: warning: DSH ${detectedDshVersion} at ${dshExecutable} is newer than the maximum tested version ${maximumTestedDshVersion}; continuing without a formal compatibility guarantee.\n`,
165
+ );
166
+ }
167
+
34
168
  const dshHome = process.env.DSH_HOME || join(homedir(), '.dsh');
35
169
  const profileRoot = join(dshHome, 'profiles', profile);
36
170
  const profileManifest = join(profileRoot, 'package.json');
@@ -93,7 +227,7 @@ const packageSpec =
93
227
  (localCheckout ? packageRoot : `${packageName}@${manifest.version}`);
94
228
 
95
229
  if (profileNeedsInstall({ explicitPackageSpec, localCheckout })) {
96
- const status = run('dsh', [
230
+ const status = run(dshExecutable, [
97
231
  'plugin',
98
232
  '--profile',
99
233
  profile,
@@ -105,6 +239,6 @@ if (profileNeedsInstall({ explicitPackageSpec, localCheckout })) {
105
239
 
106
240
  let status;
107
241
  do {
108
- status = run('dsh', ['--profile', profile, ...forwardedArgs]);
242
+ status = run(dshExecutable, ['--profile', profile, ...forwardedArgs]);
109
243
  } while (status === RESTART_EXIT_CODE);
110
244
  process.exit(status);
package/dist/CHANGELOG.md CHANGED
@@ -6,6 +6,17 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.1.0-alpha.17] - 2026-09-18
10
+
11
+ ### Added
12
+
13
+ - Validate the exact `dsh` executable selected from `PATH` against package compatibility metadata before profile changes, with actionable missing, old, invalid, and failed-version diagnostics plus a non-blocking warning for newer unaudited releases.
14
+
15
+ ### Changed
16
+
17
+ - Pin installation documentation to the audited DSH and Console prerelease pair and mechanically check those examples against the public package manifest.
18
+ - Advance the audited DeepSeek Harness baseline to `0.1.6-alpha.2` at immutable release commit `6b1808f432adfa96ab6c2f033e158ca230422e16`, retaining Host ownership of model modality, Plan review identity, and Subagent capacity policy.
19
+
9
20
  ## [0.1.0-alpha.16] - 2026-09-15
10
21
 
11
22
  ### Changed
@@ -199,7 +210,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
199
210
  - Keep debug diagnostics aligned within the existing footer row and preserve structured logs in the debug console.
200
211
  - Address initial CodeQL findings, dependency advisories, CI concurrency issues, and release build ordering.
201
212
 
202
- [Unreleased]: https://github.com/cofy-x/dsh-console/compare/v0.1.0-alpha.16...HEAD
213
+ [Unreleased]: https://github.com/cofy-x/dsh-console/compare/v0.1.0-alpha.17...HEAD
214
+ [0.1.0-alpha.17]: https://github.com/cofy-x/dsh-console/compare/v0.1.0-alpha.16...v0.1.0-alpha.17
203
215
  [0.1.0-alpha.16]: https://github.com/cofy-x/dsh-console/compare/v0.1.0-alpha.15...v0.1.0-alpha.16
204
216
  [0.1.0-alpha.15]: https://github.com/cofy-x/dsh-console/compare/v0.1.0-alpha.14...v0.1.0-alpha.15
205
217
  [0.1.0-alpha.14]: https://github.com/cofy-x/dsh-console/compare/v0.1.0-alpha.13...v0.1.0-alpha.14
@@ -6427,7 +6427,7 @@ import { Box as Box25 } from "ink";
6427
6427
  import { Box as Box21, Text as Text21 } from "ink";
6428
6428
 
6429
6429
  // src/generated/git-commit.ts
6430
- var GIT_COMMIT_INFO = "7a7aa5f";
6430
+ var GIT_COMMIT_INFO = "e561006";
6431
6431
 
6432
6432
  // src/ui/components/dialogs/about-box.tsx
6433
6433
  import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
package/dist/dsh/index.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  apply,
4
4
  inject,
5
5
  name
6
- } from "../chunk-LAJHJSL2.js";
6
+ } from "../chunk-4JD6IIIC.js";
7
7
  import "../chunk-WTD7XY24.js";
8
8
  import "../chunk-GNENCGXA.js";
9
9
  export {
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  Config,
3
3
  apply,
4
4
  name
5
- } from "./chunk-LAJHJSL2.js";
5
+ } from "./chunk-4JD6IIIC.js";
6
6
  import "./chunk-WTD7XY24.js";
7
7
  import "./chunk-GNENCGXA.js";
8
8
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cofy-x/dsh-console",
3
- "version": "0.1.0-alpha.16",
3
+ "version": "0.1.0-alpha.17",
4
4
  "description": "DSH-native terminal workbench (TUI) for DeepSeek Harness with durable sessions, structured tools, plans, subagents, and rotating Pokémon startup art.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -58,8 +58,8 @@
58
58
  "patch": "./cordis.patch.yml"
59
59
  },
60
60
  "compatibility": {
61
- "minimum": "0.1.6-alpha.1",
62
- "maximumTested": "0.1.6-alpha.1"
61
+ "minimum": "0.1.6-alpha.2",
62
+ "maximumTested": "0.1.6-alpha.2"
63
63
  }
64
64
  },
65
65
  "dependencies": {
@@ -84,6 +84,7 @@
84
84
  "mnemonist": "^0.40.3",
85
85
  "picomatch": "^4.0.7",
86
86
  "react": "^19.2.8",
87
+ "semver": "^7.8.5",
87
88
  "string-width": "^8.1.0",
88
89
  "strip-ansi": "^7.1.2",
89
90
  "strip-json-comments": "^5.0.3",
@@ -96,39 +97,40 @@
96
97
  "@cofy-x/dsh-console-test-utils": "workspace:*",
97
98
  "@deepseek-ai/cordis": "4.0.2",
98
99
  "@deepseek-ai/cordis-plugin-loader": "1.0.3",
99
- "@deepseek-ai/dsh-cmdline": "0.1.6-alpha.1",
100
- "@deepseek-ai/dsh-agent": "0.1.6-alpha.1",
101
- "@deepseek-ai/dsh-agent-default-model": "0.1.6-alpha.1",
102
- "@deepseek-ai/dsh-agent-presets": "0.1.6-alpha.1",
103
- "@deepseek-ai/dsh-session-projection-cache": "0.1.6-alpha.1",
104
- "@deepseek-ai/dsh-attachment": "0.1.6-alpha.1",
105
- "@deepseek-ai/dsh-commands": "0.1.6-alpha.1",
106
- "@deepseek-ai/dsh-credentials": "0.1.6-alpha.1",
107
- "@deepseek-ai/dsh-llm": "0.1.6-alpha.1",
108
- "@deepseek-ai/dsh-permission-presets": "0.1.6-alpha.1",
109
- "@deepseek-ai/dsh-plan-mode": "0.1.6-alpha.1",
110
- "@deepseek-ai/dsh-session": "0.1.6-alpha.1",
111
- "@deepseek-ai/dsh-session-projection": "0.1.6-alpha.1",
112
- "@deepseek-ai/dsh-session-query": "0.1.6-alpha.1",
113
- "@deepseek-ai/dsh-skill": "0.1.6-alpha.1",
114
- "@deepseek-ai/dsh-settings": "0.1.6-alpha.1",
115
- "@deepseek-ai/dsh-subagent": "0.1.6-alpha.1",
116
- "@deepseek-ai/dsh-tool-subagent": "0.1.6-alpha.1",
117
- "@deepseek-ai/dsh-tool-todo": "0.1.6-alpha.1",
118
- "@deepseek-ai/dsh-tools": "0.1.6-alpha.1",
119
- "@deepseek-ai/dsh-user-approval": "0.1.6-alpha.1",
120
- "@deepseek-ai/dsh-user-questions": "0.1.6-alpha.1",
100
+ "@deepseek-ai/dsh-cmdline": "0.1.6-alpha.2",
101
+ "@deepseek-ai/dsh-agent": "0.1.6-alpha.2",
102
+ "@deepseek-ai/dsh-agent-default-model": "0.1.6-alpha.2",
103
+ "@deepseek-ai/dsh-agent-presets": "0.1.6-alpha.2",
104
+ "@deepseek-ai/dsh-session-projection-cache": "0.1.6-alpha.2",
105
+ "@deepseek-ai/dsh-attachment": "0.1.6-alpha.2",
106
+ "@deepseek-ai/dsh-commands": "0.1.6-alpha.2",
107
+ "@deepseek-ai/dsh-credentials": "0.1.6-alpha.2",
108
+ "@deepseek-ai/dsh-llm": "0.1.6-alpha.2",
109
+ "@deepseek-ai/dsh-permission-presets": "0.1.6-alpha.2",
110
+ "@deepseek-ai/dsh-plan-mode": "0.1.6-alpha.2",
111
+ "@deepseek-ai/dsh-session": "0.1.6-alpha.2",
112
+ "@deepseek-ai/dsh-session-projection": "0.1.6-alpha.2",
113
+ "@deepseek-ai/dsh-session-query": "0.1.6-alpha.2",
114
+ "@deepseek-ai/dsh-skill": "0.1.6-alpha.2",
115
+ "@deepseek-ai/dsh-settings": "0.1.6-alpha.2",
116
+ "@deepseek-ai/dsh-subagent": "0.1.6-alpha.2",
117
+ "@deepseek-ai/dsh-tool-subagent": "0.1.6-alpha.2",
118
+ "@deepseek-ai/dsh-tool-todo": "0.1.6-alpha.2",
119
+ "@deepseek-ai/dsh-tools": "0.1.6-alpha.2",
120
+ "@deepseek-ai/dsh-user-approval": "0.1.6-alpha.2",
121
+ "@deepseek-ai/dsh-user-questions": "0.1.6-alpha.2",
121
122
  "@deepseek-ai/schemastery": "3.18.2",
122
123
  "@types/hast": "^3.0.4",
123
124
  "@types/node": "^24.10.1",
124
125
  "@types/react": "^19.2.18",
125
126
  "@types/react-dom": "^19.2.0",
127
+ "@types/semver": "^7.7.1",
126
128
  "@types/yargs": "^17.0.34",
127
129
  "esbuild": "0.27.0",
128
130
  "ink-testing-library": "^4.0.0",
129
- "@deepseek-ai/dsh-jobs": "0.1.6-alpha.1",
130
- "@deepseek-ai/dsh-goal": "0.1.6-alpha.1",
131
- "@deepseek-ai/dsh-session-title": "0.1.6-alpha.1"
131
+ "@deepseek-ai/dsh-jobs": "0.1.6-alpha.2",
132
+ "@deepseek-ai/dsh-goal": "0.1.6-alpha.2",
133
+ "@deepseek-ai/dsh-session-title": "0.1.6-alpha.2"
132
134
  },
133
135
  "engines": {
134
136
  "node": ">=24.0.0"
@@ -136,32 +138,32 @@
136
138
  "peerDependencies": {
137
139
  "@deepseek-ai/cordis": ">=4.0.2 <5.0.0",
138
140
  "@deepseek-ai/cordis-plugin-loader": ">=1.0.3 <2.0.0",
139
- "@deepseek-ai/dsh-cmdline": "0.1.6-alpha.1",
140
- "@deepseek-ai/dsh-agent": "0.1.6-alpha.1",
141
- "@deepseek-ai/dsh-agent-default-model": "0.1.6-alpha.1",
142
- "@deepseek-ai/dsh-agent-presets": "0.1.6-alpha.1",
143
- "@deepseek-ai/dsh-session-projection-cache": "0.1.6-alpha.1",
144
- "@deepseek-ai/dsh-attachment": "0.1.6-alpha.1",
145
- "@deepseek-ai/dsh-commands": "0.1.6-alpha.1",
146
- "@deepseek-ai/dsh-credentials": "0.1.6-alpha.1",
147
- "@deepseek-ai/dsh-llm": "0.1.6-alpha.1",
148
- "@deepseek-ai/dsh-permission-presets": "0.1.6-alpha.1",
149
- "@deepseek-ai/dsh-plan-mode": "0.1.6-alpha.1",
150
- "@deepseek-ai/dsh-session": "0.1.6-alpha.1",
151
- "@deepseek-ai/dsh-session-projection": "0.1.6-alpha.1",
152
- "@deepseek-ai/dsh-session-query": "0.1.6-alpha.1",
153
- "@deepseek-ai/dsh-skill": "0.1.6-alpha.1",
154
- "@deepseek-ai/dsh-settings": "0.1.6-alpha.1",
155
- "@deepseek-ai/dsh-subagent": "0.1.6-alpha.1",
156
- "@deepseek-ai/dsh-tool-subagent": "0.1.6-alpha.1",
157
- "@deepseek-ai/dsh-tool-todo": "0.1.6-alpha.1",
158
- "@deepseek-ai/dsh-tools": "0.1.6-alpha.1",
159
- "@deepseek-ai/dsh-user-approval": "0.1.6-alpha.1",
160
- "@deepseek-ai/dsh-user-questions": "0.1.6-alpha.1",
141
+ "@deepseek-ai/dsh-cmdline": "0.1.6-alpha.2",
142
+ "@deepseek-ai/dsh-agent": "0.1.6-alpha.2",
143
+ "@deepseek-ai/dsh-agent-default-model": "0.1.6-alpha.2",
144
+ "@deepseek-ai/dsh-agent-presets": "0.1.6-alpha.2",
145
+ "@deepseek-ai/dsh-session-projection-cache": "0.1.6-alpha.2",
146
+ "@deepseek-ai/dsh-attachment": "0.1.6-alpha.2",
147
+ "@deepseek-ai/dsh-commands": "0.1.6-alpha.2",
148
+ "@deepseek-ai/dsh-credentials": "0.1.6-alpha.2",
149
+ "@deepseek-ai/dsh-llm": "0.1.6-alpha.2",
150
+ "@deepseek-ai/dsh-permission-presets": "0.1.6-alpha.2",
151
+ "@deepseek-ai/dsh-plan-mode": "0.1.6-alpha.2",
152
+ "@deepseek-ai/dsh-session": "0.1.6-alpha.2",
153
+ "@deepseek-ai/dsh-session-projection": "0.1.6-alpha.2",
154
+ "@deepseek-ai/dsh-session-query": "0.1.6-alpha.2",
155
+ "@deepseek-ai/dsh-skill": "0.1.6-alpha.2",
156
+ "@deepseek-ai/dsh-settings": "0.1.6-alpha.2",
157
+ "@deepseek-ai/dsh-subagent": "0.1.6-alpha.2",
158
+ "@deepseek-ai/dsh-tool-subagent": "0.1.6-alpha.2",
159
+ "@deepseek-ai/dsh-tool-todo": "0.1.6-alpha.2",
160
+ "@deepseek-ai/dsh-tools": "0.1.6-alpha.2",
161
+ "@deepseek-ai/dsh-user-approval": "0.1.6-alpha.2",
162
+ "@deepseek-ai/dsh-user-questions": "0.1.6-alpha.2",
161
163
  "@deepseek-ai/schemastery": ">=3.18.2 <4.0.0",
162
- "@deepseek-ai/dsh-jobs": "0.1.6-alpha.1",
163
- "@deepseek-ai/dsh-goal": "0.1.6-alpha.1",
164
- "@deepseek-ai/dsh-session-title": "0.1.6-alpha.1"
164
+ "@deepseek-ai/dsh-jobs": "0.1.6-alpha.2",
165
+ "@deepseek-ai/dsh-goal": "0.1.6-alpha.2",
166
+ "@deepseek-ai/dsh-session-title": "0.1.6-alpha.2"
165
167
  },
166
168
  "peerDependenciesMeta": {
167
169
  "@deepseek-ai/cordis": {