@cofy-x/dsh-console 0.1.0-alpha.15 → 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.5-rc.1` through `0.1.5-rc.2`, and needs a working DSH provider configuration. This release is verified against both compatibility endpoints; 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,23 @@ 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
+
20
+ ## [0.1.0-alpha.16] - 2026-09-15
21
+
22
+ ### Changed
23
+
24
+ - Require DeepSeek Harness `0.1.6-alpha.1` from its audited immutable release commit, follow the Host-owned Agent preset selection policy through the public roster API, and retire pre-format-3 Session compatibility fallbacks.
25
+
9
26
  ## [0.1.0-alpha.15] - 2026-09-12
10
27
 
11
28
  ### Added
@@ -193,7 +210,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
193
210
  - Keep debug diagnostics aligned within the existing footer row and preserve structured logs in the debug console.
194
211
  - Address initial CodeQL findings, dependency advisories, CI concurrency issues, and release build ordering.
195
212
 
196
- [Unreleased]: https://github.com/cofy-x/dsh-console/compare/v0.1.0-alpha.15...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
215
+ [0.1.0-alpha.16]: https://github.com/cofy-x/dsh-console/compare/v0.1.0-alpha.15...v0.1.0-alpha.16
197
216
  [0.1.0-alpha.15]: https://github.com/cofy-x/dsh-console/compare/v0.1.0-alpha.14...v0.1.0-alpha.15
198
217
  [0.1.0-alpha.14]: https://github.com/cofy-x/dsh-console/compare/v0.1.0-alpha.13...v0.1.0-alpha.14
199
218
  [0.1.0-alpha.13]: https://github.com/cofy-x/dsh-console/compare/v0.1.0-alpha.12...v0.1.0-alpha.13
@@ -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 = "541246d";
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";
@@ -22647,22 +22647,29 @@ var presetCommand = {
22647
22647
  kind: "built-in" /* BUILT_IN */,
22648
22648
  autoExecute: true,
22649
22649
  action: async (context, args) => {
22650
- if (context.services.sideConversation?.getWorkspaceSnapshot().sideSessionId !== void 0) {
22650
+ const runtime = context.services.agentPreset;
22651
+ if (runtime === void 0) {
22651
22652
  return {
22652
22653
  type: "message",
22653
22654
  messageType: "error",
22654
- content: "Close the Side conversation before changing the Main Agent preset. Use /side, then Ctrl+C."
22655
+ content: "DSH Agent presets are unavailable."
22655
22656
  };
22656
22657
  }
22657
- const runtime = context.services.agentPreset;
22658
- if (runtime === void 0) {
22658
+ await runtime.prepare(context.invocation.signal);
22659
+ if (!runtime.getSnapshot().modeSelectionEnabled) {
22660
+ return {
22661
+ type: "message",
22662
+ messageType: "info",
22663
+ content: "Agent preset selection is disabled by the DSH host."
22664
+ };
22665
+ }
22666
+ if (context.services.sideConversation?.getWorkspaceSnapshot().sideSessionId !== void 0) {
22659
22667
  return {
22660
22668
  type: "message",
22661
22669
  messageType: "error",
22662
- content: "DSH Agent presets are unavailable."
22670
+ content: "Close the Side conversation before changing the Main Agent preset. Use /side, then Ctrl+C."
22663
22671
  };
22664
22672
  }
22665
- await runtime.prepare(context.invocation.signal);
22666
22673
  const value = args.trim();
22667
22674
  if (value === "") {
22668
22675
  return {
@@ -22700,6 +22707,7 @@ var presetCommand = {
22700
22707
  await runtime.prepare();
22701
22708
  const prefix = partialArg.trimStart();
22702
22709
  const snapshot = runtime.getSnapshot();
22710
+ if (!snapshot.modeSelectionEnabled) return [];
22703
22711
  return snapshot.options.filter(
22704
22712
  (option) => option.broken === void 0 && option.id.startsWith(prefix)
22705
22713
  ).map((option) => {
@@ -28798,11 +28806,14 @@ var DshToolCatalogRuntime = class {
28798
28806
  };
28799
28807
 
28800
28808
  // src/dsh/permission-selection-runtime.ts
28801
- import { CUSTOM_PRESET } from "@deepseek-ai/dsh-permission-presets";
28809
+ import {
28810
+ CUSTOM_PRESET
28811
+ } from "@deepseek-ai/dsh-permission-presets";
28802
28812
  var FULL_ACCESS_PRESET = "danger-full-access";
28803
28813
  var DshPermissionSelectionRuntime = class {
28804
- constructor(projections, commands, activeAgent) {
28814
+ constructor(projections, permissionPresets, commands, activeAgent, subscribeCatalog) {
28805
28815
  this.projections = projections;
28816
+ this.permissionPresets = permissionPresets;
28806
28817
  this.commands = commands;
28807
28818
  this.activeAgent = activeAgent;
28808
28819
  this.snapshot = this.readSnapshot(false);
@@ -28812,10 +28823,12 @@ var DshPermissionSelectionRuntime = class {
28812
28823
  return;
28813
28824
  this.refresh();
28814
28825
  });
28826
+ this.offCatalog = subscribeCatalog(() => this.refresh());
28815
28827
  }
28816
28828
  listeners = /* @__PURE__ */ new Set();
28817
28829
  snapshot;
28818
28830
  offProjection;
28831
+ offCatalog;
28819
28832
  getSnapshot = () => this.snapshot;
28820
28833
  subscribe = (listener) => {
28821
28834
  this.listeners.add(listener);
@@ -28865,6 +28878,7 @@ var DshPermissionSelectionRuntime = class {
28865
28878
  }
28866
28879
  dispose() {
28867
28880
  this.offProjection();
28881
+ this.offCatalog();
28868
28882
  this.listeners.clear();
28869
28883
  }
28870
28884
  readSnapshot(busy) {
@@ -28888,7 +28902,7 @@ var DshPermissionSelectionRuntime = class {
28888
28902
  available: true,
28889
28903
  currentValue: selection.currentValue,
28890
28904
  options: Object.freeze(
28891
- selection.options.filter((option) => option.value !== CUSTOM_PRESET).map(
28905
+ this.permissionPresets.catalog().options.filter((option) => option.value !== CUSTOM_PRESET).map(
28892
28906
  (option) => Object.freeze({
28893
28907
  value: option.value,
28894
28908
  name: option.name,
@@ -29542,6 +29556,7 @@ var DshAgentPresetRuntime = class {
29542
29556
  this.onSelected = onSelected;
29543
29557
  this.snapshot = Object.freeze({
29544
29558
  status: "idle",
29559
+ modeSelectionEnabled: false,
29545
29560
  currentId: this.currentId(),
29546
29561
  options: EMPTY_OPTIONS,
29547
29562
  busy: false
@@ -29577,6 +29592,9 @@ var DshAgentPresetRuntime = class {
29577
29592
  async select(id, signal) {
29578
29593
  await this.prepare(signal);
29579
29594
  signal?.throwIfAborted();
29595
+ if (!this.snapshot.modeSelectionEnabled) {
29596
+ throw new Error("Agent preset selection is disabled by the DSH host.");
29597
+ }
29580
29598
  const option = this.snapshot.options.find(
29581
29599
  (candidate) => candidate.id === id
29582
29600
  );
@@ -29628,7 +29646,8 @@ var DshAgentPresetRuntime = class {
29628
29646
  });
29629
29647
  this.emit();
29630
29648
  try {
29631
- const options = (await this.presets.list()).map(
29649
+ const roster = await this.presets.remoteExportList();
29650
+ const options = roster.presets.map(
29632
29651
  (preset) => Object.freeze({
29633
29652
  id: preset.id,
29634
29653
  name: preset.name ?? preset.id,
@@ -29640,6 +29659,7 @@ var DshAgentPresetRuntime = class {
29640
29659
  );
29641
29660
  this.snapshot = Object.freeze({
29642
29661
  status: "ready",
29662
+ modeSelectionEnabled: roster.modeSelectionEnabled,
29643
29663
  currentId: this.currentId(),
29644
29664
  options: Object.freeze(options),
29645
29665
  busy: this.snapshot.busy
@@ -30171,24 +30191,17 @@ var DshSessionExplorerRuntime = class {
30171
30191
 
30172
30192
  // src/dsh/session-events.ts
30173
30193
  import {
30174
- SESSION_FORMAT_VERSION,
30175
30194
  SessionLogOffset
30176
30195
  } from "@deepseek-ai/dsh-session";
30177
30196
  function snapshotSessionEvents(session) {
30178
- const compatible = session;
30179
- if (compatible.snapshotEvents !== void 0)
30180
- return compatible.snapshotEvents();
30181
- if (compatible.events !== void 0) return compatible.events;
30182
- throw new Error(
30183
- `DSH Session ${String(session.id)} does not expose an event snapshot API.`
30184
- );
30197
+ return session.snapshotEvents();
30185
30198
  }
30186
30199
  function forkSeedOptions(seed) {
30187
- return Number(SESSION_FORMAT_VERSION) >= 3 ? {
30200
+ return {
30188
30201
  seed,
30189
30202
  inheritedEventCount: SessionLogOffset(seed.length),
30190
30203
  meta: { isSeeded: true }
30191
- } : { seed, meta: { seedLength: seed.length } };
30204
+ };
30192
30205
  }
30193
30206
 
30194
30207
  // src/dsh/index.ts
@@ -30203,6 +30216,7 @@ var inject = [
30203
30216
  "attachments",
30204
30217
  "llm",
30205
30218
  "approval",
30219
+ "permissionPresets",
30206
30220
  "userQuestions",
30207
30221
  "commands",
30208
30222
  "sessionProjections",
@@ -30470,8 +30484,10 @@ async function start(ctx, config) {
30470
30484
  );
30471
30485
  const permissionSelectionRuntime = new DshPermissionSelectionRuntime(
30472
30486
  sessionProjections,
30487
+ ctx.permissionPresets,
30473
30488
  commandRuntime,
30474
- currentInteractiveAgent
30489
+ currentInteractiveAgent,
30490
+ (listener) => ctx.on("permission-presets/catalog-changed", listener)
30475
30491
  );
30476
30492
  const planSelectionRuntime = new DshPlanSelectionRuntime(
30477
30493
  sessionProjections,
package/dist/dsh/index.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  apply,
4
4
  inject,
5
5
  name
6
- } from "../chunk-CKHL6XDS.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-CKHL6XDS.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.15",
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.5-rc.1",
62
- "maximumTested": "0.1.5-rc.2"
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.5-rc.1",
100
- "@deepseek-ai/dsh-agent": "0.1.5-rc.1",
101
- "@deepseek-ai/dsh-agent-default-model": "0.1.5-rc.1",
102
- "@deepseek-ai/dsh-agent-presets": "0.1.5-rc.1",
103
- "@deepseek-ai/dsh-session-projection-cache": "0.1.5-rc.1",
104
- "@deepseek-ai/dsh-attachment": "0.1.5-rc.1",
105
- "@deepseek-ai/dsh-commands": "0.1.5-rc.1",
106
- "@deepseek-ai/dsh-credentials": "0.1.5-rc.1",
107
- "@deepseek-ai/dsh-llm": "0.1.5-rc.1",
108
- "@deepseek-ai/dsh-permission-presets": "0.1.5-rc.1",
109
- "@deepseek-ai/dsh-plan-mode": "0.1.5-rc.1",
110
- "@deepseek-ai/dsh-session": "0.1.5-rc.1",
111
- "@deepseek-ai/dsh-session-projection": "0.1.5-rc.1",
112
- "@deepseek-ai/dsh-session-query": "0.1.5-rc.1",
113
- "@deepseek-ai/dsh-skill": "0.1.5-rc.1",
114
- "@deepseek-ai/dsh-settings": "0.1.5-rc.1",
115
- "@deepseek-ai/dsh-subagent": "0.1.5-rc.1",
116
- "@deepseek-ai/dsh-tool-subagent": "0.1.5-rc.1",
117
- "@deepseek-ai/dsh-tool-todo": "0.1.5-rc.1",
118
- "@deepseek-ai/dsh-tools": "0.1.5-rc.1",
119
- "@deepseek-ai/dsh-user-approval": "0.1.5-rc.1",
120
- "@deepseek-ai/dsh-user-questions": "0.1.5-rc.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.5-rc.1",
130
- "@deepseek-ai/dsh-goal": "0.1.5-rc.1",
131
- "@deepseek-ai/dsh-session-title": "0.1.5-rc.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.5-rc.1 <=0.1.5-rc.2",
140
- "@deepseek-ai/dsh-agent": ">=0.1.5-rc.1 <=0.1.5-rc.2",
141
- "@deepseek-ai/dsh-agent-default-model": ">=0.1.5-rc.1 <=0.1.5-rc.2",
142
- "@deepseek-ai/dsh-agent-presets": ">=0.1.5-rc.1 <=0.1.5-rc.2",
143
- "@deepseek-ai/dsh-session-projection-cache": ">=0.1.5-rc.1 <=0.1.5-rc.2",
144
- "@deepseek-ai/dsh-attachment": ">=0.1.5-rc.1 <=0.1.5-rc.2",
145
- "@deepseek-ai/dsh-commands": ">=0.1.5-rc.1 <=0.1.5-rc.2",
146
- "@deepseek-ai/dsh-credentials": ">=0.1.5-rc.1 <=0.1.5-rc.2",
147
- "@deepseek-ai/dsh-llm": ">=0.1.5-rc.1 <=0.1.5-rc.2",
148
- "@deepseek-ai/dsh-permission-presets": ">=0.1.5-rc.1 <=0.1.5-rc.2",
149
- "@deepseek-ai/dsh-plan-mode": ">=0.1.5-rc.1 <=0.1.5-rc.2",
150
- "@deepseek-ai/dsh-session": ">=0.1.5-rc.1 <=0.1.5-rc.2",
151
- "@deepseek-ai/dsh-session-projection": ">=0.1.5-rc.1 <=0.1.5-rc.2",
152
- "@deepseek-ai/dsh-session-query": ">=0.1.5-rc.1 <=0.1.5-rc.2",
153
- "@deepseek-ai/dsh-skill": ">=0.1.5-rc.1 <=0.1.5-rc.2",
154
- "@deepseek-ai/dsh-settings": ">=0.1.5-rc.1 <=0.1.5-rc.2",
155
- "@deepseek-ai/dsh-subagent": ">=0.1.5-rc.1 <=0.1.5-rc.2",
156
- "@deepseek-ai/dsh-tool-subagent": ">=0.1.5-rc.1 <=0.1.5-rc.2",
157
- "@deepseek-ai/dsh-tool-todo": ">=0.1.5-rc.1 <=0.1.5-rc.2",
158
- "@deepseek-ai/dsh-tools": ">=0.1.5-rc.1 <=0.1.5-rc.2",
159
- "@deepseek-ai/dsh-user-approval": ">=0.1.5-rc.1 <=0.1.5-rc.2",
160
- "@deepseek-ai/dsh-user-questions": ">=0.1.5-rc.1 <=0.1.5-rc.2",
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.5-rc.1 <=0.1.5-rc.2",
163
- "@deepseek-ai/dsh-goal": ">=0.1.5-rc.1 <=0.1.5-rc.2",
164
- "@deepseek-ai/dsh-session-title": ">=0.1.5-rc.1 <=0.1.5-rc.2"
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": {