@deepseek-ai/dsh 0.2.0-rc.1 → 0.2.0-rc.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/README.i18n.yaml CHANGED
@@ -6,8 +6,8 @@
6
6
  en: ebdc75fa0da18801
7
7
  zh: 5c6cd2554b8f8a98
8
8
  /deepseek-ai-dsh/entry-modes:
9
- en: 093936b9e1a59bea
10
- zh: 12be7d2d931d9671
9
+ en: c4811e2012a5e919
10
+ zh: e6d20ec8238c2638
11
11
  /deepseek-ai-dsh/app-arguments:
12
12
  en: cc03e6b75206661b
13
13
  zh: 99e41f4143198352
@@ -18,5 +18,5 @@
18
18
  en: 3a40ddc44e55f79c
19
19
  zh: 8d3949132e1ef93c
20
20
  /deepseek-ai-dsh/development:
21
- en: 99a36e4f7ea3f9c7
22
- zh: 07ca2934de700caa
21
+ en: 0a289c1235869927
22
+ zh: a1f473f70036ad37
package/README.md CHANGED
@@ -17,7 +17,7 @@ The `dsh` command is the sole supported Node application launcher: profiles are
17
17
  | `dsh web` | Boot the Web profile. |
18
18
  | `dsh plugin --profile <name> <pnpm args>` | Manage a profile's plugins by forwarding to pnpm in the profile directory. |
19
19
 
20
- The invoking directory is the default workspace root. The `web`, `headless`, `sdk`, `sdk-minimal`, and `acp` profiles auto-initialize on first use from shipped templates. Create another profile at an unused, non-shipped name with `--from-default-profile`, or initialize a base-backed profile through `dsh plugin`. The `desktop` name is reserved for the Electron-owned profile, so the CLI rejects boot, config-dump, and plugin-management requests for it.
20
+ The invoking directory is the default workspace root. The `web`, `headless`, `sdk`, `sdk-minimal`, and `acp` profiles auto-initialize on first use from shipped templates. Create another profile at an unused, non-shipped name with `--from-default-profile`, or initialize a base-backed profile through `dsh plugin`. The `desktop` name is reserved for the Electron-owned profile, so the CLI rejects boot and config-dump requests for it. The npm CLI also rejects its plugin-management requests; the [Desktop-installed command](../desktop/README.md#bundled-command-runtime) can manage the initialized Desktop profile using that installation’s runtime.
21
21
 
22
22
  ## App arguments
23
23
 
@@ -59,4 +59,6 @@ Production runs require built package and frontend artifacts. From the repositor
59
59
 
60
60
  The `@deepseek-ai/dsh/profile-boot` export provides the shared profile lifecycle to the Desktop host. A resolved application profile supplies its own installation anchor for runtime package resolution while retaining the Harness home patch, proxy environment, telemetry switch, patch reload, and bounded shutdown.
61
61
 
62
+ Packaged installations call the same `runCli()` entry with their package-manager executable. The Desktop carrier also enables plugin operations for its initialized profile; npm launches omit these options. Installation-owned package environments apply only to plugin package operations; the invoking directory, ordinary profile selection, and agent-shell PATH retain their CLI meanings.
63
+
62
64
  The [Web failure matrix](tests/profiles/web/tests/web-failure-matrix.expected.e2e.ts) runs the built CLI through startup failures and native configuration HMR with `awaitWriteFinish` enabled in `test:expected`. It verifies authenticated HTTP responses, diagnostics, recovery, process exits, and disposal without model API calls; the [startup acceptance](tests/profiles/web/tests/web-best-effort-startup.expected.e2e.ts) also covers the shipped required Web dependencies and port conflicts.
package/README.zh.md CHANGED
@@ -17,7 +17,7 @@
17
17
  | `dsh web` | 启动 Web profile。 |
18
18
  | `dsh plugin --profile <name> <pnpm args>` | 通过在 profile 目录中转发给 pnpm 来管理该 profile 的插件。 |
19
19
 
20
- 运行命令时所在的目录将作为默认 workspace 根目录。`web`、`headless`、`sdk`、`sdk-minimal` 和 `acp` profile 在首次使用时会从随附模板自动初始化。使用 `--from-default-profile` 可以基于这些模板之一,在尚未使用的非内置名称处创建其他 profile;通过 `dsh plugin` 则可以初始化一个以 base 为基础的 profile。`desktop` 名称保留给 Electron 持有的 profile,因此 CLI(命令行界面)会拒绝针对它的启动、配置 dump 和插件管理请求。
20
+ 运行命令时所在的目录将作为默认 workspace 根目录。`web`、`headless`、`sdk`、`sdk-minimal` 和 `acp` profile 在首次使用时会从随附模板自动初始化。使用 `--from-default-profile` 可以基于这些模板之一,在尚未使用的非内置名称处创建其他 profile;通过 `dsh plugin` 则可以初始化一个以 base 为基础的 profile。`desktop` 名称保留给 Electron 持有的 profile,因此 CLI(命令行界面)会拒绝针对它的启动和配置 dump 请求。npm CLI 也会拒绝其插件管理请求;[Desktop 内置命令](../desktop/README.zh.md#bundled-command-runtime)可以使用该安装的运行时管理已初始化的 Desktop profile。
21
21
 
22
22
  ## 应用参数
23
23
 
@@ -59,4 +59,6 @@ profile 目录包含一个 `package.json`,其中记录树外插件依赖,以
59
59
 
60
60
  `@deepseek-ai/dsh/profile-boot` 导出向 Desktop Host 提供共享 profile 生命周期。已解析的应用 profile 为运行时包解析指定自己的安装锚点,同时沿用 Harness home patch、代理环境、遥测开关、patch 热重载和有界关闭。
61
61
 
62
+ 打包安装通过同一个 `runCli()` 入口传入包管理器可执行文件。Desktop 载体还会启用其已初始化 profile 的插件操作;npm 启动不传入这些选项。安装包提供的包管理环境仅用于插件包操作;调用目录、普通 profile 选择与 agent shell 的 PATH 保留 CLI 语义。
63
+
62
64
  [Web 失败矩阵](tests/profiles/web/tests/web-failure-matrix.expected.e2e.ts)在 `test:expected` 中通过构建后的 CLI 验证启动失败与启用 `awaitWriteFinish` 的原生配置 HMR。它不调用模型 API,而是检查经过认证的 HTTP 响应、诊断、恢复、进程退出与 dispose;[启动验收测试](tests/profiles/web/tests/web-best-effort-startup.expected.e2e.ts)还覆盖随附 Web 的必需依赖与端口冲突。
package/lib/bin.js CHANGED
@@ -95,9 +95,10 @@ function resolveBoot(program, profile, options, args) {
95
95
  * error.
96
96
  * @param argv - arguments after the Node binary and script.
97
97
  * @param version - version string printed by `--version`.
98
+ * @param manageDesktopProfile - permit Desktop's installed carrier to manage its reserved profile's plugins.
98
99
  * @returns the resolved invocation.
99
100
  */
100
- function parseDshArgs(argv, version) {
101
+ function parseDshArgs(argv, version, manageDesktopProfile = false) {
101
102
  const first = argv[0];
102
103
  let resolved;
103
104
  const program = new Command();
@@ -115,11 +116,11 @@ function parseDshArgs(argv, version) {
115
116
  const plugin = program.command("plugin").description("manage a profile's plugins by forwarding the remaining arguments to pnpm in the profile directory");
116
117
  plugin.requiredOption("--profile <name>", "the profile whose plugins to manage (initialized on first use)", selectProfile).allowUnknownOption().argument("[args...]", "pnpm arguments, forwarded verbatim (add <pkg>, remove <pkg>, why <pkg>, ...)").action((args, options) => {
117
118
  if (options.profile === "") program.error("error: --profile needs a name");
118
- rejectElectronProfile(plugin, options.profile);
119
+ if (!manageDesktopProfile) rejectElectronProfile(plugin, options.profile);
119
120
  if (args.length === 0) program.error("error: plugin needs pnpm arguments to forward (e.g. add <package>)");
120
121
  resolved = {
121
122
  mode: "plugin",
122
- profile: options.profile,
123
+ profile: options.profile.toLowerCase() === "desktop" ? "desktop" : options.profile,
123
124
  args
124
125
  };
125
126
  });
@@ -200,11 +201,13 @@ async function reportStartupFailure(error, context, write = writeStderr) {
200
201
  /* v8 ignore file -- built-bin acceptance exercises this self-executing dispatch. */
201
202
  /**
202
203
  * Run the public dsh command-line interface.
204
+ * @param options - Package runtime and Desktop profile access supplied by the installation.
203
205
  * @returns a promise that settles when the selected command mode finishes.
204
206
  */
205
- async function runCli() {
207
+ async function runCli(options = {}) {
206
208
  const version = getDshRuntimeVersion();
207
- const invocation = parseDshArgs(process.argv.slice(2), version);
209
+ const { manageDesktopProfile, ...profileOptions } = options;
210
+ const invocation = parseDshArgs(process.argv.slice(2), version, manageDesktopProfile);
208
211
  switch (invocation.mode) {
209
212
  case "profile": {
210
213
  const { runProfile } = await import("./profile-boot.js");
@@ -214,7 +217,8 @@ async function runCli() {
214
217
  profile: invocation.profile,
215
218
  fromDefaultProfile: invocation.fromDefaultProfile,
216
219
  patchFiles: invocation.patches,
217
- args: invocation.args
220
+ args: invocation.args,
221
+ ...profileOptions
218
222
  });
219
223
  } catch (error) {
220
224
  if (!(error instanceof StartupError)) throw error;
@@ -228,8 +232,8 @@ async function runCli() {
228
232
  break;
229
233
  }
230
234
  case "plugin": {
231
- const { runPlugin } = await import("./plugin-DkYIj96-.js");
232
- process.exit(await runPlugin(invocation.profile, invocation.args));
235
+ const { runPlugin } = await import("./plugin-BGnVfe_D.js");
236
+ process.exit(await runPlugin(invocation.profile, invocation.args, options.packageManager));
233
237
  break;
234
238
  }
235
239
  case "dump-config": {
@@ -3,10 +3,13 @@ import { DEFAULT_PROFILE_BUNDLES, PROFILE_TEMPLATES, initProfile, readProfileCom
3
3
  import { mkdir } from "node:fs/promises";
4
4
  import { join } from "node:path";
5
5
  import { existsSync } from "node:fs";
6
- import { runPluginCommand, setProfileVersionExemption } from "@deepseek-ai/dsh-plugin-manager/operations";
6
+ import { runPluginCommand, runProfilePnpm, setProfileVersionExemption } from "@deepseek-ai/dsh-plugin-manager/operations";
7
7
  import { withFileLock } from "@deepseek-ai/dsh-atomic-write";
8
8
  //#region lib/types/plugin.js
9
9
  /** Profile package management and explicit, exact-version compatibility approvals. */
10
+ function requireDesktopProfile(dir) {
11
+ if (!existsSync(join(dir, "package.json"))) throw new Error("Open DeepSeek Harness Desktop once to initialize its profile, then fully quit it before running dsh plugin --profile desktop.");
12
+ }
10
13
  /** Parse only DSH-owned commands; all other arguments remain pnpm's responsibility. */
11
14
  async function versionCommand(profile, args) {
12
15
  const [command, ...rest] = args;
@@ -32,9 +35,10 @@ async function versionCommand(profile, args) {
32
35
  }
33
36
  if (command === "allow-version") process.stderr.write("dsh: warning: allowing incompatible plugin versions can break the application or corrupt data. Approval applies only to the exact package and DSH versions.\n");
34
37
  const dir = resolveProfileDir(profile);
35
- await mkdir(dir, { recursive: true });
38
+ if (profile !== "desktop") await mkdir(dir, { recursive: true });
36
39
  await withFileLock(join(dir, "package.json"), async () => {
37
- if (!existsSync(join(dir, "package.json"))) initProfile(dir, PROFILE_TEMPLATES[profile]?.bundles ?? DEFAULT_PROFILE_BUNDLES);
40
+ if (profile === "desktop") requireDesktopProfile(dir);
41
+ else if (!existsSync(join(dir, "package.json"))) initProfile(dir, PROFILE_TEMPLATES[profile]?.bundles ?? DEFAULT_PROFILE_BUNDLES);
38
42
  if (request === void 0) {
39
43
  const { exemptions, warnings } = readProfileCompatibility(dir);
40
44
  for (const warning of warnings) process.stderr.write(`dsh: warning: ${warning}\n`);
@@ -51,20 +55,30 @@ async function versionCommand(profile, args) {
51
55
  }
52
56
  }
53
57
  /** Run package management for a profile.
54
- * @param profile Profile name.
58
+ * @param profile Profile name; Desktop's reserved profile must already be initialized by the application.
55
59
  * @param args DSH exemption command or pnpm arguments relative to the invoking directory.
60
+ * @param packageManager Installation-owned executable and environment for pnpm operations.
56
61
  * @returns Zero on success; nonzero on invalid approval or package-manager failure.
57
62
  */
58
- async function runPlugin(profile, args) {
63
+ async function runPlugin(profile, args, packageManager) {
64
+ if (profile === "desktop") try {
65
+ requireDesktopProfile(resolveProfileDir(profile));
66
+ } catch (error) {
67
+ process.stderr.write(`dsh: ${String(error)}\n`);
68
+ return 1;
69
+ }
59
70
  const versionResult = await versionCommand(profile, args);
60
71
  if (versionResult !== void 0) return versionResult;
61
72
  const dir = resolveProfileDir(profile);
62
73
  if (existsSync(join(dir, "package.json"))) for (const warning of readProfileCompatibility(dir).warnings) process.stderr.write(`dsh: warning: ${warning}\n`);
63
- const result = await runPluginCommand({
74
+ const context = {
64
75
  profile,
76
+ dir,
65
77
  installAnchor: INSTALL_ANCHOR,
66
78
  cwd: process.cwd()
67
- }, args, {
79
+ };
80
+ const options = {
81
+ ...packageManager,
68
82
  execution: "cli",
69
83
  outputBytes: 16384,
70
84
  lockWaitMs: 12e4,
@@ -72,7 +86,11 @@ async function runPlugin(profile, args) {
72
86
  onOutput: (text, stream) => {
73
87
  process[stream].write(text);
74
88
  }
75
- });
89
+ };
90
+ const result = profile === "desktop" ? await withFileLock(join(dir, "package.json"), async () => {
91
+ requireDesktopProfile(dir);
92
+ return runProfilePnpm(context, args, options);
93
+ }, { waitMs: 12e4 }) : await runPluginCommand(context, args, options);
76
94
  if (result.exitCode === 127) process.stderr.write("dsh: pnpm was not found; install pnpm and make it available on PATH.\n");
77
95
  for (const { name, version, runtimeVersion } of result.incompatible ?? []) process.stderr.write(`dsh: to accept the risk, run: dsh plugin --profile ${profile} allow-version ${name}@${version} --dsh-version ${runtimeVersion} --accept-risk\n`);
78
96
  if (result.exitCode !== 0) process.stderr.write(`dsh: plugin command failed; diagnostics: ${result.logPath}\n`);
@@ -57,8 +57,9 @@ export type DshInvocation = ProfileInvocation | DumpConfigInvocation | DumpConfi
57
57
  * error.
58
58
  * @param argv - arguments after the Node binary and script.
59
59
  * @param version - version string printed by `--version`.
60
+ * @param manageDesktopProfile - permit Desktop's installed carrier to manage its reserved profile's plugins.
60
61
  * @returns the resolved invocation.
61
62
  */
62
- export declare function parseDshArgs(argv: readonly string[], version: string): DshInvocation;
63
+ export declare function parseDshArgs(argv: readonly string[], version: string, manageDesktopProfile?: boolean): DshInvocation;
63
64
  export {};
64
65
  //# sourceMappingURL=args.d.ts.map
@@ -3,9 +3,16 @@
3
3
  * Command-line entry for dsh.
4
4
  * @module @deepseek-ai/dsh/bin
5
5
  */
6
+ import type { RunProfileOptions } from './profile-boot.ts';
7
+ /** Installation-owned dependencies supplied by a packaged CLI launcher. */
8
+ export type RunCliOptions = Pick<RunProfileOptions, 'packageManager'> & {
9
+ /** Permit plugin commands for Desktop's existing profile; reserved for its installed carrier. */
10
+ manageDesktopProfile?: boolean;
11
+ };
6
12
  /**
7
13
  * Run the public dsh command-line interface.
14
+ * @param options - Package runtime and Desktop profile access supplied by the installation.
8
15
  * @returns a promise that settles when the selected command mode finishes.
9
16
  */
10
- export declare function runCli(): Promise<void>;
17
+ export declare function runCli(options?: RunCliOptions): Promise<void>;
11
18
  //# sourceMappingURL=bin.d.ts.map
@@ -1,7 +1,9 @@
1
+ import { type ProfileContext } from '@deepseek-ai/dsh-app-boot';
1
2
  /** Run package management for a profile.
2
- * @param profile Profile name.
3
+ * @param profile Profile name; Desktop's reserved profile must already be initialized by the application.
3
4
  * @param args DSH exemption command or pnpm arguments relative to the invoking directory.
5
+ * @param packageManager Installation-owned executable and environment for pnpm operations.
4
6
  * @returns Zero on success; nonzero on invalid approval or package-manager failure.
5
7
  */
6
- export declare function runPlugin(profile: string, args: readonly string[]): Promise<number>;
8
+ export declare function runPlugin(profile: string, args: readonly string[], packageManager?: ProfileContext['packageManager']): Promise<number>;
7
9
  //# sourceMappingURL=plugin.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh",
3
3
  "description": "dsh CLI: profile launch, plugin management, and configuration inspection",
4
- "version": "0.2.0-rc.1",
4
+ "version": "0.2.0-rc.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -23,85 +23,85 @@
23
23
  "commander": "^15.0.0",
24
24
  "js-yaml": "^4.2.0",
25
25
  "node-addon-require-builtin": "^0.1.6",
26
- "@deepseek-ai/cordis": "~4.0.4",
27
- "@deepseek-ai/dsh-hmr": "0.2.0-rc.1",
26
+ "@deepseek-ai/dsh-hmr": "0.2.0-rc.2",
28
27
  "@deepseek-ai/cordis-plugin-include": "~1.0.9",
29
28
  "@deepseek-ai/cordis-plugin-loader": "~1.0.5",
30
29
  "@deepseek-ai/cordis-plugin-timer": "~1.1.6",
31
- "@deepseek-ai/dsh-acp-app": "0.2.0-rc.1",
32
- "@deepseek-ai/dsh-agent-instructions": "0.2.0-rc.1",
33
- "@deepseek-ai/dsh-agent-tool-presentation": "0.2.0-rc.1",
34
- "@deepseek-ai/dsh-app-boot": "0.2.0-rc.1",
35
- "@deepseek-ai/dsh-base": "0.2.0-rc.1",
36
- "@deepseek-ai/dsh-client-ui-agent-preset": "0.2.0-rc.1",
37
- "@deepseek-ai/dsh-client-ui-cordis": "0.2.0-rc.1",
38
- "@deepseek-ai/dsh-cmdline": "0.2.0-rc.1",
39
- "@deepseek-ai/dsh-command-compact": "0.2.0-rc.1",
40
- "@deepseek-ai/dsh-command-goal": "0.2.0-rc.1",
41
- "@deepseek-ai/dsh-cordis-client-runner": "0.2.0-rc.1",
42
- "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.2.0-rc.1",
43
- "@deepseek-ai/dsh-experimental-agent-team-profile": "0.2.0-rc.1",
44
- "@deepseek-ai/dsh-experimental-schedule-bundle": "0.2.0-rc.1",
45
- "@deepseek-ai/dsh-fs-local": "0.2.0-rc.1",
46
- "@deepseek-ai/dsh-goal": "0.2.0-rc.1",
47
- "@deepseek-ai/dsh-goal-round-driver": "0.2.0-rc.1",
48
- "@deepseek-ai/dsh-headless": "0.2.0-rc.1",
49
- "@deepseek-ai/dsh-home-paths": "0.2.0-rc.1",
50
- "@deepseek-ai/dsh-hooks-claude-code": "0.2.0-rc.1",
51
- "@deepseek-ai/dsh-compaction-basic": "0.2.0-rc.1",
52
- "@deepseek-ai/dsh-hooks-codex": "0.2.0-rc.1",
53
- "@deepseek-ai/dsh-launch-environment": "0.2.0-rc.1",
54
- "@deepseek-ai/dsh-mcp-client": "0.2.0-rc.1",
55
- "@deepseek-ai/dsh-persona": "0.2.0-rc.1",
56
- "@deepseek-ai/dsh-plan-mode": "0.2.0-rc.1",
57
- "@deepseek-ai/dsh-pwsh-local": "0.2.0-rc.1",
58
- "@deepseek-ai/dsh-pwsh-sandbox": "0.2.0-rc.1",
59
- "@deepseek-ai/dsh-schedule": "0.2.0-rc.1",
60
- "@deepseek-ai/dsh-sdk-app": "0.2.0-rc.1",
61
- "@deepseek-ai/dsh-sdk-minimal": "0.2.0-rc.1",
62
- "@deepseek-ai/dsh-session-projection": "0.2.0-rc.1",
63
- "@deepseek-ai/dsh-session-reference": "0.2.0-rc.1",
64
- "@deepseek-ai/dsh-skill": "0.2.0-rc.1",
65
- "@deepseek-ai/dsh-skill-office": "0.2.0-rc.1",
66
- "@deepseek-ai/dsh-tool-workspace-dependencies": "0.2.0-rc.1",
67
- "@deepseek-ai/dsh-terminal": "0.2.0-rc.1",
68
- "@deepseek-ai/dsh-terminal-bash": "0.2.0-rc.1",
69
- "@deepseek-ai/dsh-time-context": "0.2.0-rc.1",
70
- "@deepseek-ai/dsh-tmux-context": "0.2.0-rc.1",
71
- "@deepseek-ai/dsh-skill-filesystem": "0.2.0-rc.1",
72
- "@deepseek-ai/dsh-tool-bash": "0.2.0-rc.1",
73
- "@deepseek-ai/dsh-tool-bash-persistent": "0.2.0-rc.1",
74
- "@deepseek-ai/dsh-tool-cordis": "0.2.0-rc.1",
75
- "@deepseek-ai/dsh-tool-present": "0.2.0-rc.1",
76
- "@deepseek-ai/dsh-tool-ask-user": "0.2.0-rc.1",
77
- "@deepseek-ai/dsh-token-meter": "0.2.0-rc.1",
78
- "@deepseek-ai/dsh-tool-fs": "0.2.0-rc.1",
79
- "@deepseek-ai/dsh-tool-fs-search": "0.2.0-rc.1",
80
- "@deepseek-ai/dsh-tool-goal": "0.2.0-rc.1",
81
- "@deepseek-ai/dsh-tool-jobs": "0.2.0-rc.1",
82
- "@deepseek-ai/dsh-tool-pwsh": "0.2.0-rc.1",
83
- "@deepseek-ai/dsh-jobs-local": "0.2.0-rc.1",
84
- "@deepseek-ai/dsh-tool-pwsh-persistent": "0.2.0-rc.1",
85
- "@deepseek-ai/dsh-tool-ralph": "0.2.0-rc.1",
86
- "@deepseek-ai/dsh-tool-skill": "0.2.0-rc.1",
87
- "@deepseek-ai/dsh-tool-subagent": "0.2.0-rc.1",
88
- "@deepseek-ai/dsh-tool-subagent-control": "0.2.0-rc.1",
89
- "@deepseek-ai/dsh-tool-todo": "0.2.0-rc.1",
90
- "@deepseek-ai/dsh-tool-web": "0.2.0-rc.1",
91
- "@deepseek-ai/dsh-tool-workflow": "0.2.0-rc.1",
92
- "@deepseek-ai/dsh-web-app": "0.2.0-rc.1",
93
- "@deepseek-ai/dsh-webhook": "0.2.0-rc.1",
94
- "@deepseek-ai/dsh-webhook-github": "0.2.0-rc.1",
95
- "@deepseek-ai/dsh-workflow-ptc": "0.2.0-rc.1",
96
- "@deepseek-ai/dsh-tool-str-replace-editor": "0.2.0-rc.1",
30
+ "@deepseek-ai/dsh-acp-app": "0.2.0-rc.2",
31
+ "@deepseek-ai/cordis": "~4.0.4",
32
+ "@deepseek-ai/dsh-agent-tool-presentation": "0.2.0-rc.2",
33
+ "@deepseek-ai/dsh-app-boot": "0.2.0-rc.2",
34
+ "@deepseek-ai/dsh-base": "0.2.0-rc.2",
35
+ "@deepseek-ai/dsh-client-ui-agent-preset": "0.2.0-rc.2",
36
+ "@deepseek-ai/dsh-agent-instructions": "0.2.0-rc.2",
37
+ "@deepseek-ai/dsh-client-ui-cordis": "0.2.0-rc.2",
38
+ "@deepseek-ai/dsh-command-compact": "0.2.0-rc.2",
39
+ "@deepseek-ai/dsh-command-goal": "0.2.0-rc.2",
40
+ "@deepseek-ai/dsh-compaction-basic": "0.2.0-rc.2",
41
+ "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.2.0-rc.2",
42
+ "@deepseek-ai/dsh-cordis-client-runner": "0.2.0-rc.2",
43
+ "@deepseek-ai/dsh-experimental-agent-team-profile": "0.2.0-rc.2",
44
+ "@deepseek-ai/dsh-cmdline": "0.2.0-rc.2",
45
+ "@deepseek-ai/dsh-experimental-schedule-bundle": "0.2.0-rc.2",
46
+ "@deepseek-ai/dsh-fs-local": "0.2.0-rc.2",
47
+ "@deepseek-ai/dsh-goal": "0.2.0-rc.2",
48
+ "@deepseek-ai/dsh-headless": "0.2.0-rc.2",
49
+ "@deepseek-ai/dsh-home-paths": "0.2.0-rc.2",
50
+ "@deepseek-ai/dsh-goal-round-driver": "0.2.0-rc.2",
51
+ "@deepseek-ai/dsh-hooks-claude-code": "0.2.0-rc.2",
52
+ "@deepseek-ai/dsh-jobs-local": "0.2.0-rc.2",
53
+ "@deepseek-ai/dsh-launch-environment": "0.2.0-rc.2",
54
+ "@deepseek-ai/dsh-mcp-client": "0.2.0-rc.2",
55
+ "@deepseek-ai/dsh-persona": "0.2.0-rc.2",
56
+ "@deepseek-ai/dsh-plan-mode": "0.2.0-rc.2",
57
+ "@deepseek-ai/dsh-pwsh-local": "0.2.0-rc.2",
58
+ "@deepseek-ai/dsh-hooks-codex": "0.2.0-rc.2",
59
+ "@deepseek-ai/dsh-schedule": "0.2.0-rc.2",
60
+ "@deepseek-ai/dsh-sdk-app": "0.2.0-rc.2",
61
+ "@deepseek-ai/dsh-sdk-minimal": "0.2.0-rc.2",
62
+ "@deepseek-ai/dsh-session-projection": "0.2.0-rc.2",
63
+ "@deepseek-ai/dsh-session-reference": "0.2.0-rc.2",
64
+ "@deepseek-ai/dsh-skill": "0.2.0-rc.2",
65
+ "@deepseek-ai/dsh-pwsh-sandbox": "0.2.0-rc.2",
66
+ "@deepseek-ai/dsh-skill-filesystem": "0.2.0-rc.2",
67
+ "@deepseek-ai/dsh-tool-workspace-dependencies": "0.2.0-rc.2",
68
+ "@deepseek-ai/dsh-terminal": "0.2.0-rc.2",
69
+ "@deepseek-ai/dsh-terminal-bash": "0.2.0-rc.2",
70
+ "@deepseek-ai/dsh-time-context": "0.2.0-rc.2",
71
+ "@deepseek-ai/dsh-tmux-context": "0.2.0-rc.2",
72
+ "@deepseek-ai/dsh-token-meter": "0.2.0-rc.2",
73
+ "@deepseek-ai/dsh-skill-office": "0.2.0-rc.2",
74
+ "@deepseek-ai/dsh-tool-ask-user": "0.2.0-rc.2",
75
+ "@deepseek-ai/dsh-tool-bash": "0.2.0-rc.2",
76
+ "@deepseek-ai/dsh-tool-bash-persistent": "0.2.0-rc.2",
77
+ "@deepseek-ai/dsh-tool-cordis": "0.2.0-rc.2",
78
+ "@deepseek-ai/dsh-tool-present": "0.2.0-rc.2",
79
+ "@deepseek-ai/dsh-tool-fs-search": "0.2.0-rc.2",
80
+ "@deepseek-ai/dsh-tool-goal": "0.2.0-rc.2",
81
+ "@deepseek-ai/dsh-tool-jobs": "0.2.0-rc.2",
82
+ "@deepseek-ai/dsh-tool-pwsh-persistent": "0.2.0-rc.2",
83
+ "@deepseek-ai/dsh-tool-ralph": "0.2.0-rc.2",
84
+ "@deepseek-ai/dsh-tool-fs": "0.2.0-rc.2",
85
+ "@deepseek-ai/dsh-tool-skill": "0.2.0-rc.2",
86
+ "@deepseek-ai/dsh-tool-pwsh": "0.2.0-rc.2",
87
+ "@deepseek-ai/dsh-tool-str-replace-editor": "0.2.0-rc.2",
88
+ "@deepseek-ai/dsh-tool-subagent": "0.2.0-rc.2",
89
+ "@deepseek-ai/dsh-tool-subagent-control": "0.2.0-rc.2",
90
+ "@deepseek-ai/dsh-tool-todo": "0.2.0-rc.2",
91
+ "@deepseek-ai/dsh-tool-workflow": "0.2.0-rc.2",
92
+ "@deepseek-ai/dsh-web-app": "0.2.0-rc.2",
93
+ "@deepseek-ai/dsh-webhook": "0.2.0-rc.2",
94
+ "@deepseek-ai/dsh-webhook-github": "0.2.0-rc.2",
95
+ "@deepseek-ai/dsh-tool-web": "0.2.0-rc.2",
96
+ "@deepseek-ai/dsh-workflow-ptc": "0.2.0-rc.2",
97
97
  "@deepseek-ai/schemastery": "~3.18.4",
98
- "@deepseek-ai/dsh-mcp-resources": "0.2.0-rc.1",
99
- "@deepseek-ai/dsh-http-proxy": "0.2.0-rc.1",
100
- "@deepseek-ai/dsh-plugin-manager": "0.2.0-rc.1",
101
- "@deepseek-ai/dsh-atomic-write": "0.2.0-rc.1",
102
- "@deepseek-ai/dsh-agent-preset": "0.2.0-rc.1",
103
- "@deepseek-ai/dsh-experimental-voice-input-bundle": "0.2.0-rc.1",
104
- "@deepseek-ai/dsh-experimental-auto-review": "0.2.0-rc.1"
98
+ "@deepseek-ai/dsh-mcp-resources": "0.2.0-rc.2",
99
+ "@deepseek-ai/dsh-http-proxy": "0.2.0-rc.2",
100
+ "@deepseek-ai/dsh-plugin-manager": "0.2.0-rc.2",
101
+ "@deepseek-ai/dsh-agent-preset": "0.2.0-rc.2",
102
+ "@deepseek-ai/dsh-atomic-write": "0.2.0-rc.2",
103
+ "@deepseek-ai/dsh-experimental-voice-input-bundle": "0.2.0-rc.2",
104
+ "@deepseek-ai/dsh-experimental-auto-review": "0.2.0-rc.2"
105
105
  },
106
106
  "devDependencies": {
107
107
  "@agentclientprotocol/sdk": "1.4.0",
@@ -110,47 +110,47 @@
110
110
  "ajv": "^8.20.0",
111
111
  "execa": "^10.0.0",
112
112
  "ws": "8.21.0",
113
- "@deepseek-ai/dsh-agent": "0.2.0-rc.1",
114
- "@deepseek-ai/dsh-acp": "0.2.0-rc.1",
115
- "@deepseek-ai/dsh-agent-loop": "0.2.0-rc.1",
116
- "@deepseek-ai/dsh-agent-loop-testkit": "0.2.0-rc.1",
117
- "@deepseek-ai/dsh-attachment-local": "0.2.0-rc.1",
118
- "@deepseek-ai/dsh-bash-local": "0.2.0-rc.1",
119
- "@deepseek-ai/dsh-credentials-local": "0.2.0-rc.1",
120
- "@deepseek-ai/dsh-deepseek-llm-api-extensions": "0.2.0-rc.1",
121
- "@deepseek-ai/dsh-experimental-agent-team": "0.2.0-rc.1",
122
- "@deepseek-ai/dsh-fs-observation-policy": "0.2.0-rc.1",
123
- "@deepseek-ai/dsh-fs-sandbox": "0.2.0-rc.1",
124
- "@deepseek-ai/dsh-host-frontend-static": "0.2.0-rc.1",
125
- "@deepseek-ai/dsh-host-webserver": "0.2.0-rc.1",
126
- "@deepseek-ai/dsh-llm": "0.2.0-rc.1",
127
- "@deepseek-ai/dsh-llm-deepseek": "0.2.0-rc.1",
128
- "@deepseek-ai/dsh-llm-deepseek-api-key": "0.2.0-rc.1",
129
- "@deepseek-ai/dsh-experimental-tool-agent-team": "0.2.0-rc.1",
130
- "@deepseek-ai/dsh-llm-deepseek-account": "0.2.0-rc.1",
131
- "@deepseek-ai/dsh-experimental-ptc-runtime-python": "0.2.0-rc.1",
132
- "@deepseek-ai/dsh-llm-mock-server": "0.2.0-rc.1",
133
- "@deepseek-ai/dsh-llm-pi-ai": "0.2.0-rc.1",
134
- "@deepseek-ai/dsh-llm-replay": "0.2.0-rc.1",
135
- "@deepseek-ai/dsh-loader-smoke": "0.2.0-rc.1",
136
- "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "0.2.0-rc.1",
137
- "@deepseek-ai/dsh-sandbox-policy": "0.2.0-rc.1",
138
- "@deepseek-ai/dsh-sdk-client": "0.2.0-rc.1",
139
- "@deepseek-ai/dsh-session": "0.2.0-rc.1",
140
- "@deepseek-ai/dsh-session-checkpoint-policy": "0.2.0-rc.1",
141
- "@deepseek-ai/dsh-session-log-deepseek": "0.2.0-rc.1",
142
- "@deepseek-ai/dsh-sandbox-local": "0.2.0-rc.1",
143
- "@deepseek-ai/dsh-session-persistence-jsonl": "0.2.0-rc.1",
144
- "@deepseek-ai/dsh-shell-env": "0.2.0-rc.1",
145
- "@deepseek-ai/dsh-settings": "0.2.0-rc.1",
146
- "@deepseek-ai/dsh-subagent": "0.2.0-rc.1",
147
- "@deepseek-ai/dsh-subagent-fork-in-process": "0.2.0-rc.1",
148
- "@deepseek-ai/dsh-subagent-spawn-in-process": "0.2.0-rc.1",
149
- "@deepseek-ai/dsh-subprocess-local": "0.2.0-rc.1",
150
- "@deepseek-ai/dsh-system-prompt": "0.2.0-rc.1",
151
- "@deepseek-ai/dsh-session-query": "0.2.0-rc.1",
152
- "@deepseek-ai/dsh-user-approval": "0.2.0-rc.1",
153
- "@deepseek-ai/dsh-tools": "0.2.0-rc.1"
113
+ "@deepseek-ai/dsh-acp": "0.2.0-rc.2",
114
+ "@deepseek-ai/dsh-agent": "0.2.0-rc.2",
115
+ "@deepseek-ai/dsh-attachment-local": "0.2.0-rc.2",
116
+ "@deepseek-ai/dsh-bash-local": "0.2.0-rc.2",
117
+ "@deepseek-ai/dsh-credentials-local": "0.2.0-rc.2",
118
+ "@deepseek-ai/dsh-deepseek-llm-api-extensions": "0.2.0-rc.2",
119
+ "@deepseek-ai/dsh-experimental-agent-team": "0.2.0-rc.2",
120
+ "@deepseek-ai/dsh-agent-loop-testkit": "0.2.0-rc.2",
121
+ "@deepseek-ai/dsh-experimental-ptc-runtime-python": "0.2.0-rc.2",
122
+ "@deepseek-ai/dsh-agent-loop": "0.2.0-rc.2",
123
+ "@deepseek-ai/dsh-experimental-tool-agent-team": "0.2.0-rc.2",
124
+ "@deepseek-ai/dsh-host-frontend-static": "0.2.0-rc.2",
125
+ "@deepseek-ai/dsh-host-webserver": "0.2.0-rc.2",
126
+ "@deepseek-ai/dsh-llm": "0.2.0-rc.2",
127
+ "@deepseek-ai/dsh-llm-deepseek": "0.2.0-rc.2",
128
+ "@deepseek-ai/dsh-llm-deepseek-api-key": "0.2.0-rc.2",
129
+ "@deepseek-ai/dsh-llm-deepseek-account": "0.2.0-rc.2",
130
+ "@deepseek-ai/dsh-fs-observation-policy": "0.2.0-rc.2",
131
+ "@deepseek-ai/dsh-fs-sandbox": "0.2.0-rc.2",
132
+ "@deepseek-ai/dsh-llm-mock-server": "0.2.0-rc.2",
133
+ "@deepseek-ai/dsh-llm-pi-ai": "0.2.0-rc.2",
134
+ "@deepseek-ai/dsh-llm-replay": "0.2.0-rc.2",
135
+ "@deepseek-ai/dsh-loader-smoke": "0.2.0-rc.2",
136
+ "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "0.2.0-rc.2",
137
+ "@deepseek-ai/dsh-sandbox-local": "0.2.0-rc.2",
138
+ "@deepseek-ai/dsh-sandbox-policy": "0.2.0-rc.2",
139
+ "@deepseek-ai/dsh-sdk-client": "0.2.0-rc.2",
140
+ "@deepseek-ai/dsh-session": "0.2.0-rc.2",
141
+ "@deepseek-ai/dsh-session-log-deepseek": "0.2.0-rc.2",
142
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.2.0-rc.2",
143
+ "@deepseek-ai/dsh-session-query": "0.2.0-rc.2",
144
+ "@deepseek-ai/dsh-session-checkpoint-policy": "0.2.0-rc.2",
145
+ "@deepseek-ai/dsh-shell-env": "0.2.0-rc.2",
146
+ "@deepseek-ai/dsh-subagent": "0.2.0-rc.2",
147
+ "@deepseek-ai/dsh-subagent-fork-in-process": "0.2.0-rc.2",
148
+ "@deepseek-ai/dsh-subagent-spawn-in-process": "0.2.0-rc.2",
149
+ "@deepseek-ai/dsh-subprocess-local": "0.2.0-rc.2",
150
+ "@deepseek-ai/dsh-system-prompt": "0.2.0-rc.2",
151
+ "@deepseek-ai/dsh-tools": "0.2.0-rc.2",
152
+ "@deepseek-ai/dsh-settings": "0.2.0-rc.2",
153
+ "@deepseek-ai/dsh-user-approval": "0.2.0-rc.2"
154
154
  },
155
155
  "exports": {
156
156
  "./profile-boot": {