@deepseek-ai/dsh 0.1.7-alpha.2 → 0.1.7-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
@@ -1,6 +1,22 @@
1
- # Bilingual-pair consistency record (docs/i18n/README.md): the git blob hash of each
2
- # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
- # after editing either side, bring the other along and re-record with:
1
+ # Bilingual-pair consistency record for README.md (docs/i18n/README.md): per heading
2
+ # section, a hash of its English and Chinese blocks outside code blocks and generated regions.
3
+ # After editing either side, bring the other along and re-record with:
4
4
  # pnpm run verify-translation-pairing --write apps/cli/README.md
5
- README.md: 4eb113a6155433cb69f949d9e461ccfbd0142e7c
6
- README.zh.md: 6a0e8a38a70d2ad551b4e91619545b3def09f2ec
5
+ /deepseek-ai-dsh:
6
+ en: ebdc75fa0da18801
7
+ zh: 5c6cd2554b8f8a98
8
+ /deepseek-ai-dsh/entry-modes:
9
+ en: 093936b9e1a59bea
10
+ zh: 12be7d2d931d9671
11
+ /deepseek-ai-dsh/app-arguments:
12
+ en: cc03e6b75206661b
13
+ zh: 99e41f4143198352
14
+ /deepseek-ai-dsh/profiles:
15
+ en: 79cad979b0f7895c
16
+ zh: b0f922a4b43accf8
17
+ /deepseek-ai-dsh/optional-overlays:
18
+ en: 3a40ddc44e55f79c
19
+ zh: 8d3949132e1ef93c
20
+ /deepseek-ai-dsh/development:
21
+ en: 99a36e4f7ea3f9c7
22
+ zh: 07ca2934de700caa
package/README.md CHANGED
@@ -36,6 +36,8 @@ dsh --help # the launcher's own help
36
36
 
37
37
  A profile directory holds a `package.json` (out-of-tree plugin dependencies plus the profile manifest `dsh.profile` with its ordered `bundles` list) and a `cordis.patch.yml` (the user's own patch layer). `dsh-hmr`, when enabled in YAML, watches the profile manifest and both profile and home patch files, then recomposes all layers through one serialized reload. Without HMR, changes apply on restart. Edits arriving during watcher registration use the same nonfatal reload reporting as later edits. [Plugin Manager](../../packages/boot/plugin-manager/README.md) shares package operations and the profile write lock with `dsh plugin`; package updates retain disabled bundle selections. CLI package commands inherit authentication variables and terminal descriptors, including interactive build approval; service calls retain their scrubbed environment and captured diagnostics.
38
38
 
39
+ Installation and profile startup enforce declared DSH peer ranges against the same runtime version shown by `dsh --version`. Incompatible plugins require an explicitly acknowledged exact-version exemption. The [plugin manager's compatibility reference](../../packages/boot/plugin-manager/README.md#version-compatibility-and-exemptions) documents `version-exemptions`, `allow-version`, `revoke-version`, persistence, and risks.
40
+
39
41
  The tree composes over an empty root:
40
42
  - each bundle's patch in `dsh.profile.bundles` order
41
43
  - then the profile's `cordis.patch.yml`, then the home-level `$DSH_HOME/cordis.patch.yml`
@@ -49,7 +51,7 @@ The [CLI behavior reference](reference/README.md) owns exact layer precedence, f
49
51
 
50
52
  ## Optional overlays
51
53
 
52
- `config/examples/` ships opt-in overlays for GitHub review webhooks, session-local Schedule, memory MCP servers, and runtime Cordis tools. They are never part of a default profile; the [user guides](../../docs/user/guide/index.md) and [developer practice guides](../../docs/user/develop/practice/index.md) own setup and safety instructions.
54
+ `config/examples/` ships opt-in overlays for GitHub review webhooks, memory MCP servers, and runtime Cordis tools. They are never part of a default profile; the [user guides](../../docs/user/guide/index.md) and [developer practice guides](../../docs/user/develop/practice/index.md) own setup and safety instructions.
53
55
 
54
56
  ## Development
55
57
 
package/README.zh.md CHANGED
@@ -36,6 +36,8 @@ dsh --help # the launcher's own help
36
36
 
37
37
  profile 目录包含一个 `package.json`,其中记录树外插件依赖,以及 profile manifest(元数据清单)`dsh.profile`、其中按顺序排列的 `bundles` 列表;还包含一个 `cordis.patch.yml`,其中保存用户自己的 patch 层。在 YAML 中启用的 `dsh-hmr` 监视 profile manifest、profile 与 home 级 patch 文件,再通过统一串行重载重新组合所有层。未启用 HMR 时,更改在重启后生效。监听器注册期间发生的编辑与后续编辑使用相同的非致命重载错误报告。[插件管理器](../../packages/boot/plugin-manager/README.zh.md) 与 `dsh plugin` 共享包操作和 profile 写锁;更新依赖会保留已停用的组合包选择。CLI 包操作继承认证环境和终端描述符,支持交互式构建批准;service 调用保留清理后的环境并捕获诊断。
38
38
 
39
+ 安装和 profile 启动会按声明的 DSH peer 范围,检查与 `dsh --version` 显示值相同的运行时版本。不兼容插件需要用户明确确认精确版本豁免。[插件管理器的兼容性参考](../../packages/boot/plugin-manager/README.zh.md#version-compatibility-and-exemptions)说明 `version-exemptions`、`allow-version`、`revoke-version`、持久化规则与风险。
40
+
39
41
  配置树以空根为起点,依次叠加以下配置层:
40
42
  - `dsh.profile.bundles` 中各组合包的 patch
41
43
  - profile 自身的 `cordis.patch.yml`,然后是 home 级的 `$DSH_HOME/cordis.patch.yml`
@@ -49,7 +51,7 @@ profile 目录包含一个 `package.json`,其中记录树外插件依赖,以
49
51
 
50
52
  ## 可选覆盖层
51
53
 
52
- `config/examples/` 交付 GitHub 评审 webhook、会话内 Schedule、记忆 MCP 服务器与运行时 Cordis 工具的可选覆盖层。它们绝不属于默认 profile;设置与安全说明由[用户指南](../../docs/user/guide/index.zh.md)和[开发实战指南](../../docs/user/develop/practice/index.zh.md)负责。
54
+ `config/examples/` 交付 GitHub 评审 webhook、记忆 MCP 服务器与运行时 Cordis 工具的可选覆盖层。它们绝不属于默认 profile;设置与安全说明由[用户指南](../../docs/user/guide/index.zh.md)和[开发实战指南](../../docs/user/develop/practice/index.zh.md)负责。
53
55
 
54
56
  ## 开发
55
57
 
package/lib/bin.js CHANGED
@@ -1,7 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { readFileSync } from "node:fs";
3
- import { fileURLToPath } from "node:url";
4
- import { StartupError, loadLayeredEnv } from "@deepseek-ai/dsh-app-boot";
2
+ import { StartupError, getDshRuntimeVersion, loadLayeredEnv } from "@deepseek-ai/dsh-app-boot";
5
3
  import { resolveDshHome } from "@deepseek-ai/dsh-home-paths";
6
4
  import { Command, CommanderError, InvalidArgumentError } from "commander";
7
5
  import { randomUUID } from "node:crypto";
@@ -200,16 +198,12 @@ async function reportStartupFailure(error, context, write = writeStderr) {
200
198
  * @module @deepseek-ai/dsh/bin
201
199
  */
202
200
  /* v8 ignore file -- built-bin acceptance exercises this self-executing dispatch. */
203
- function readVersion() {
204
- const manifest = JSON.parse(readFileSync(fileURLToPath(new URL("../package.json", import.meta.url)), "utf8"));
205
- return typeof manifest.version === "string" ? manifest.version : "0.0.0";
206
- }
207
201
  /**
208
202
  * Run the public dsh command-line interface.
209
203
  * @returns a promise that settles when the selected command mode finishes.
210
204
  */
211
205
  async function runCli() {
212
- const version = readVersion();
206
+ const version = getDshRuntimeVersion();
213
207
  const invocation = parseDshArgs(process.argv.slice(2), version);
214
208
  switch (invocation.mode) {
215
209
  case "profile": {
@@ -234,17 +228,17 @@ async function runCli() {
234
228
  break;
235
229
  }
236
230
  case "plugin": {
237
- const { runPlugin } = await import("./plugin-CnNK4cws.js");
231
+ const { runPlugin } = await import("./plugin-DkYIj96-.js");
238
232
  process.exit(await runPlugin(invocation.profile, invocation.args));
239
233
  break;
240
234
  }
241
235
  case "dump-config": {
242
- const { runDumpConfig } = await import("./dump-config-DaAE0NHG.js");
236
+ const { runDumpConfig } = await import("./dump-config-crgOY3tW.js");
243
237
  runDumpConfig(invocation.profile, invocation.defaultOnly, invocation.patches, invocation.fromDefaultProfile);
244
238
  break;
245
239
  }
246
240
  case "dump-config-schema": {
247
- const { runDumpConfigSchema } = await import("./dump-config-schema-BgEU7VYz.js");
241
+ const { runDumpConfigSchema } = await import("./dump-config-schema-DhhNOaro.js");
248
242
  await runDumpConfigSchema(invocation.profile, invocation.patches, invocation.fromDefaultProfile);
249
243
  break;
250
244
  }
@@ -1,7 +1,7 @@
1
- import { a as prepareProfile, n as PROFILE_ROOT_FILENAME, r as homePatchPath } from "./profile-boot-DIiro1p-.js";
2
- import { existsSync } from "node:fs";
1
+ import { a as prepareProfile, n as PROFILE_ROOT_FILENAME, r as homePatchPath } from "./profile-boot-BZ2ZjNWi.js";
3
2
  import { loadOptionalPatches, loadOverlayPatches, renderConfigDump } from "@deepseek-ai/dsh-app-boot";
4
3
  import { join, resolve } from "node:path";
4
+ import { existsSync } from "node:fs";
5
5
  //#region lib/types/dump-config.js
6
6
  /**
7
7
  * Config-dump entry for `dsh --profile <name> --dump-config`: compose the
@@ -0,0 +1,2 @@
1
+ import { n as runDumpConfig } from "./dump-config-BEDI-dNY.js";
2
+ export { runDumpConfig };
@@ -1,5 +1,5 @@
1
- import { a as prepareProfile, t as INSTALL_ANCHOR } from "./profile-boot-DIiro1p-.js";
2
- import { t as collectConfigDumpLayers } from "./dump-config-C-0P1h0W.js";
1
+ import { a as prepareProfile, t as INSTALL_ANCHOR } from "./profile-boot-BZ2ZjNWi.js";
2
+ import { t as collectConfigDumpLayers } from "./dump-config-BEDI-dNY.js";
3
3
  import { generateConfigSchema } from "@deepseek-ai/dsh-app-boot";
4
4
  //#region lib/types/dump-config-schema.js
5
5
  /**
@@ -26,7 +26,7 @@ async function runDumpConfigSchema(profile, patches, fromDefaultProfile) {
26
26
  let dump;
27
27
  process.stdout.write = process.stderr.write.bind(process.stderr);
28
28
  try {
29
- dump = await generateConfigSchema(NAME, loaded, layers.map((layer) => layer.patches), INSTALL_ANCHOR);
29
+ dump = await generateConfigSchema(loaded, layers.map((layer) => layer.patches), INSTALL_ANCHOR);
30
30
  } finally {
31
31
  process.stdout.write = stdoutWrite;
32
32
  }
@@ -0,0 +1,83 @@
1
+ import { t as INSTALL_ANCHOR } from "./profile-boot-BZ2ZjNWi.js";
2
+ import { DEFAULT_PROFILE_BUNDLES, PROFILE_TEMPLATES, initProfile, readProfileCompatibility, resolveProfileDir } from "@deepseek-ai/dsh-app-boot";
3
+ import { mkdir } from "node:fs/promises";
4
+ import { join } from "node:path";
5
+ import { existsSync } from "node:fs";
6
+ import { runPluginCommand, setProfileVersionExemption } from "@deepseek-ai/dsh-plugin-manager/operations";
7
+ import { withFileLock } from "@deepseek-ai/dsh-atomic-write";
8
+ //#region lib/types/plugin.js
9
+ /** Profile package management and explicit, exact-version compatibility approvals. */
10
+ /** Parse only DSH-owned commands; all other arguments remain pnpm's responsibility. */
11
+ async function versionCommand(profile, args) {
12
+ const [command, ...rest] = args;
13
+ if (command !== "allow-version" && command !== "revoke-version" && command !== "version-exemptions") return void 0;
14
+ try {
15
+ let packageVersion;
16
+ let runtimeVersion;
17
+ let acceptRisk = false;
18
+ const argumentsIterator = rest.values();
19
+ for (const argument of argumentsIterator) if (argument === "--accept-risk" && command === "allow-version" && !acceptRisk) acceptRisk = true;
20
+ else if (argument === "--dsh-version" && runtimeVersion === void 0) runtimeVersion = argumentsIterator.next().value;
21
+ else if (argument.startsWith("--dsh-version=") && runtimeVersion === void 0) runtimeVersion = argument.slice(14);
22
+ else if (!argument.startsWith("-") && packageVersion === void 0) packageVersion = argument;
23
+ else throw new Error(`unexpected argument ${JSON.stringify(argument)}`);
24
+ if (command === "version-exemptions" && rest.length > 0) throw new Error("usage: dsh plugin version-exemptions");
25
+ let request;
26
+ if (command !== "version-exemptions") {
27
+ if (packageVersion === void 0 || runtimeVersion === void 0) throw new Error(`usage: dsh plugin ${command} <package@version> --dsh-version <exact>${command === "allow-version" ? " --accept-risk" : ""}`);
28
+ request = {
29
+ packageVersion,
30
+ runtimeVersion
31
+ };
32
+ }
33
+ 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
+ const dir = resolveProfileDir(profile);
35
+ await mkdir(dir, { recursive: true });
36
+ await withFileLock(join(dir, "package.json"), async () => {
37
+ if (!existsSync(join(dir, "package.json"))) initProfile(dir, PROFILE_TEMPLATES[profile]?.bundles ?? DEFAULT_PROFILE_BUNDLES);
38
+ if (request === void 0) {
39
+ const { exemptions, warnings } = readProfileCompatibility(dir);
40
+ for (const warning of warnings) process.stderr.write(`dsh: warning: ${warning}\n`);
41
+ process.stdout.write(JSON.stringify(exemptions, void 0, 2) + "\n");
42
+ } else {
43
+ await setProfileVersionExemption(dir, request.packageVersion, request.runtimeVersion, command === "allow-version", acceptRisk);
44
+ process.stdout.write(`dsh: ${command === "allow-version" ? "allowed" : "revoked"} ${request.packageVersion} for DSH ${request.runtimeVersion}\n`);
45
+ }
46
+ }, { waitMs: 12e4 });
47
+ return 0;
48
+ } catch (error) {
49
+ process.stderr.write(`dsh: ${String(error)}\n`);
50
+ return 1;
51
+ }
52
+ }
53
+ /** Run package management for a profile.
54
+ * @param profile Profile name.
55
+ * @param args DSH exemption command or pnpm arguments relative to the invoking directory.
56
+ * @returns Zero on success; nonzero on invalid approval or package-manager failure.
57
+ */
58
+ async function runPlugin(profile, args) {
59
+ const versionResult = await versionCommand(profile, args);
60
+ if (versionResult !== void 0) return versionResult;
61
+ const dir = resolveProfileDir(profile);
62
+ 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({
64
+ profile,
65
+ installAnchor: INSTALL_ANCHOR,
66
+ cwd: process.cwd()
67
+ }, args, {
68
+ execution: "cli",
69
+ outputBytes: 16384,
70
+ lockWaitMs: 12e4,
71
+ lookupTimeoutMs: 12e4,
72
+ onOutput: (text, stream) => {
73
+ process[stream].write(text);
74
+ }
75
+ });
76
+ if (result.exitCode === 127) process.stderr.write("dsh: pnpm was not found; install pnpm and make it available on PATH.\n");
77
+ 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
+ if (result.exitCode !== 0) process.stderr.write(`dsh: plugin command failed; diagnostics: ${result.logPath}\n`);
79
+ if (result.exitCode !== 0 && args.some((argument) => /^git\+|^github:|\.git(?:#|$)/.test(argument))) process.stderr.write(`dsh: git-hosted plugins build on install via their prepare script, which pnpm blocks until allowed — add the exact key pnpm printed above under allowBuilds in ${join(resolveProfileDir(profile), "pnpm-workspace.yaml")}, then re-run\n`);
80
+ return result.exitCode;
81
+ }
82
+ //#endregion
83
+ export { runPlugin };
@@ -1,8 +1,8 @@
1
- import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
2
- import { fileURLToPath } from "node:url";
3
- import { PROFILE_PATCH_FILENAME, PROFILE_TEMPLATES, PluginPackages, boot, createRuntimeResolution, initProfile, installFailLoud, loadOverlayPatches, loadProfile, readProfilePatches, resolveProfileDir } from "@deepseek-ai/dsh-app-boot";
1
+ import { PROFILE_PATCH_FILENAME, PROFILE_TEMPLATES, PluginPackages, boot, createRuntimeResolution, initProfile, installFailLoud, loadOverlayPatches, loadProfile, readProfilePatches, reportSkippedBundles, resolveProfileDir } from "@deepseek-ai/dsh-app-boot";
4
2
  import { resolveDshHome } from "@deepseek-ai/dsh-home-paths";
5
3
  import { dirname, join, resolve } from "node:path";
4
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
5
+ import { fileURLToPath } from "node:url";
6
6
  import { installProxyFromEnvironment } from "@deepseek-ai/dsh-http-proxy";
7
7
  import { DSH_LAUNCH_ENVIRONMENT_KEY } from "@deepseek-ai/dsh-launch-environment";
8
8
  import { provideCmdline } from "@deepseek-ai/dsh-cmdline";
@@ -185,6 +185,7 @@ function initializeProfileFromDefault(name, fromDefaultProfile, home = resolveDs
185
185
  function prepareProfile(name, userLayer = true, fromDefaultProfile) {
186
186
  if (fromDefaultProfile !== void 0) initializeProfileFromDefault(name, fromDefaultProfile);
187
187
  const profile = loadProfile(NAME, name, INSTALL_ANCHOR, void 0, { userLayer });
188
+ reportSkippedBundles(NAME, profile);
188
189
  writeFileSync(join(profile.dir, PROFILE_ROOT_FILENAME), PROFILE_ROOT_CONFIG);
189
190
  return profile;
190
191
  }
@@ -1,2 +1,2 @@
1
- import { a as prepareProfile, i as initializeProfileFromDefault, n as PROFILE_ROOT_FILENAME, o as runProfile, r as homePatchPath, t as INSTALL_ANCHOR } from "./profile-boot-DIiro1p-.js";
1
+ import { a as prepareProfile, i as initializeProfileFromDefault, n as PROFILE_ROOT_FILENAME, o as runProfile, r as homePatchPath, t as INSTALL_ANCHOR } from "./profile-boot-BZ2ZjNWi.js";
2
2
  export { INSTALL_ANCHOR, PROFILE_ROOT_FILENAME, homePatchPath, initializeProfileFromDefault, prepareProfile, runProfile };
@@ -1,7 +1,7 @@
1
1
  /** Run package management for a profile.
2
2
  * @param profile Profile name.
3
- * @param args Pnpm arguments relative to the invoking directory.
4
- * @returns Pnpm exit code.
3
+ * @param args DSH exemption command or pnpm arguments relative to the invoking directory.
4
+ * @returns Zero on success; nonzero on invalid approval or package-manager failure.
5
5
  */
6
6
  export declare function runPlugin(profile: string, args: readonly string[]): Promise<number>;
7
7
  //# 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.1.7-alpha.2",
4
+ "version": "0.1.7-rc.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -24,82 +24,83 @@
24
24
  "js-yaml": "^4.2.0",
25
25
  "node-addon-require-builtin": "^0.1.6",
26
26
  "@deepseek-ai/cordis": "~4.0.4",
27
- "@deepseek-ai/cordis-plugin-include": "~1.0.9",
27
+ "@deepseek-ai/dsh-hmr": "0.1.7-rc.2",
28
28
  "@deepseek-ai/cordis-plugin-loader": "~1.0.5",
29
+ "@deepseek-ai/cordis-plugin-include": "~1.0.9",
29
30
  "@deepseek-ai/cordis-plugin-timer": "~1.1.6",
30
- "@deepseek-ai/dsh-acp-app": "0.1.7-alpha.2",
31
- "@deepseek-ai/dsh-hmr": "0.1.7-alpha.2",
32
- "@deepseek-ai/dsh-agent-instructions": "0.1.7-alpha.2",
33
- "@deepseek-ai/dsh-app-boot": "0.1.7-alpha.2",
34
- "@deepseek-ai/dsh-client-ui-agent-preset": "0.1.7-alpha.2",
35
- "@deepseek-ai/dsh-client-ui-cordis": "0.1.7-alpha.2",
36
- "@deepseek-ai/dsh-cmdline": "0.1.7-alpha.2",
37
- "@deepseek-ai/dsh-agent-tool-presentation": "0.1.7-alpha.2",
38
- "@deepseek-ai/dsh-command-compact": "0.1.7-alpha.2",
39
- "@deepseek-ai/dsh-command-goal": "0.1.7-alpha.2",
40
- "@deepseek-ai/dsh-compaction-basic": "0.1.7-alpha.2",
41
- "@deepseek-ai/dsh-base": "0.1.7-alpha.2",
42
- "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.1.7-alpha.2",
43
- "@deepseek-ai/dsh-cordis-client-runner": "0.1.7-alpha.2",
44
- "@deepseek-ai/dsh-goal-round-driver": "0.1.7-alpha.2",
45
- "@deepseek-ai/dsh-headless": "0.1.7-alpha.2",
46
- "@deepseek-ai/dsh-home-paths": "0.1.7-alpha.2",
47
- "@deepseek-ai/dsh-hooks-claude-code": "0.1.7-alpha.2",
48
- "@deepseek-ai/dsh-hooks-codex": "0.1.7-alpha.2",
49
- "@deepseek-ai/dsh-jobs-local": "0.1.7-alpha.2",
50
- "@deepseek-ai/dsh-launch-environment": "0.1.7-alpha.2",
51
- "@deepseek-ai/dsh-fs-local": "0.1.7-alpha.2",
52
- "@deepseek-ai/dsh-goal": "0.1.7-alpha.2",
53
- "@deepseek-ai/dsh-mcp-client": "0.1.7-alpha.2",
54
- "@deepseek-ai/dsh-persona": "0.1.7-alpha.2",
55
- "@deepseek-ai/dsh-plan-mode": "0.1.7-alpha.2",
56
- "@deepseek-ai/dsh-pwsh-local": "0.1.7-alpha.2",
57
- "@deepseek-ai/dsh-pwsh-sandbox": "0.1.7-alpha.2",
58
- "@deepseek-ai/dsh-sdk-app": "0.1.7-alpha.2",
59
- "@deepseek-ai/dsh-sdk-minimal": "0.1.7-alpha.2",
60
- "@deepseek-ai/dsh-session-projection": "0.1.7-alpha.2",
61
- "@deepseek-ai/dsh-session-reference": "0.1.7-alpha.2",
62
- "@deepseek-ai/dsh-skill": "0.1.7-alpha.2",
63
- "@deepseek-ai/dsh-schedule": "0.1.7-alpha.2",
64
- "@deepseek-ai/dsh-skill-filesystem": "0.1.7-alpha.2",
65
- "@deepseek-ai/dsh-skill-office": "0.1.7-alpha.2",
66
- "@deepseek-ai/dsh-tool-workspace-dependencies": "0.1.7-alpha.2",
67
- "@deepseek-ai/dsh-terminal": "0.1.7-alpha.2",
68
- "@deepseek-ai/dsh-terminal-bash": "0.1.7-alpha.2",
69
- "@deepseek-ai/dsh-time-context": "0.1.7-alpha.2",
70
- "@deepseek-ai/dsh-tmux-context": "0.1.7-alpha.2",
71
- "@deepseek-ai/dsh-token-meter": "0.1.7-alpha.2",
72
- "@deepseek-ai/dsh-tool-ask-user": "0.1.7-alpha.2",
73
- "@deepseek-ai/dsh-tool-bash": "0.1.7-alpha.2",
74
- "@deepseek-ai/dsh-tool-bash-persistent": "0.1.7-alpha.2",
75
- "@deepseek-ai/dsh-tool-cordis": "0.1.7-alpha.2",
76
- "@deepseek-ai/dsh-tool-fs-search": "0.1.7-alpha.2",
77
- "@deepseek-ai/dsh-experimental-agent-team-profile": "0.1.7-alpha.2",
78
- "@deepseek-ai/dsh-tool-goal": "0.1.7-alpha.2",
79
- "@deepseek-ai/dsh-tool-jobs": "0.1.7-alpha.2",
80
- "@deepseek-ai/dsh-tool-pwsh": "0.1.7-alpha.2",
81
- "@deepseek-ai/dsh-tool-pwsh-persistent": "0.1.7-alpha.2",
82
- "@deepseek-ai/dsh-tool-ralph": "0.1.7-alpha.2",
83
- "@deepseek-ai/dsh-tool-skill": "0.1.7-alpha.2",
84
- "@deepseek-ai/dsh-tool-str-replace-editor": "0.1.7-alpha.2",
85
- "@deepseek-ai/dsh-tool-subagent": "0.1.7-alpha.2",
86
- "@deepseek-ai/dsh-tool-subagent-control": "0.1.7-alpha.2",
87
- "@deepseek-ai/dsh-tool-todo": "0.1.7-alpha.2",
88
- "@deepseek-ai/dsh-tool-web": "0.1.7-alpha.2",
89
- "@deepseek-ai/dsh-tool-workflow": "0.1.7-alpha.2",
90
- "@deepseek-ai/dsh-web-app": "0.1.7-alpha.2",
91
- "@deepseek-ai/dsh-webhook": "0.1.7-alpha.2",
92
- "@deepseek-ai/dsh-webhook-github": "0.1.7-alpha.2",
93
- "@deepseek-ai/dsh-workflow-ptc": "0.1.7-alpha.2",
31
+ "@deepseek-ai/dsh-acp-app": "0.1.7-rc.2",
32
+ "@deepseek-ai/dsh-agent-instructions": "0.1.7-rc.2",
33
+ "@deepseek-ai/dsh-agent-tool-presentation": "0.1.7-rc.2",
34
+ "@deepseek-ai/dsh-app-boot": "0.1.7-rc.2",
35
+ "@deepseek-ai/dsh-base": "0.1.7-rc.2",
36
+ "@deepseek-ai/dsh-client-ui-agent-preset": "0.1.7-rc.2",
37
+ "@deepseek-ai/dsh-client-ui-cordis": "0.1.7-rc.2",
38
+ "@deepseek-ai/dsh-command-goal": "0.1.7-rc.2",
39
+ "@deepseek-ai/dsh-cmdline": "0.1.7-rc.2",
40
+ "@deepseek-ai/dsh-compaction-basic": "0.1.7-rc.2",
41
+ "@deepseek-ai/dsh-compaction-tool-result-pruner": "0.1.7-rc.2",
42
+ "@deepseek-ai/dsh-command-compact": "0.1.7-rc.2",
43
+ "@deepseek-ai/dsh-cordis-client-runner": "0.1.7-rc.2",
44
+ "@deepseek-ai/dsh-fs-local": "0.1.7-rc.2",
45
+ "@deepseek-ai/dsh-goal": "0.1.7-rc.2",
46
+ "@deepseek-ai/dsh-headless": "0.1.7-rc.2",
47
+ "@deepseek-ai/dsh-goal-round-driver": "0.1.7-rc.2",
48
+ "@deepseek-ai/dsh-home-paths": "0.1.7-rc.2",
49
+ "@deepseek-ai/dsh-hooks-claude-code": "0.1.7-rc.2",
50
+ "@deepseek-ai/dsh-hooks-codex": "0.1.7-rc.2",
51
+ "@deepseek-ai/dsh-jobs-local": "0.1.7-rc.2",
52
+ "@deepseek-ai/dsh-launch-environment": "0.1.7-rc.2",
53
+ "@deepseek-ai/dsh-persona": "0.1.7-rc.2",
54
+ "@deepseek-ai/dsh-experimental-agent-team-profile": "0.1.7-rc.2",
55
+ "@deepseek-ai/dsh-mcp-client": "0.1.7-rc.2",
56
+ "@deepseek-ai/dsh-pwsh-local": "0.1.7-rc.2",
57
+ "@deepseek-ai/dsh-plan-mode": "0.1.7-rc.2",
58
+ "@deepseek-ai/dsh-pwsh-sandbox": "0.1.7-rc.2",
59
+ "@deepseek-ai/dsh-schedule": "0.1.7-rc.2",
60
+ "@deepseek-ai/dsh-sdk-app": "0.1.7-rc.2",
61
+ "@deepseek-ai/dsh-session-projection": "0.1.7-rc.2",
62
+ "@deepseek-ai/dsh-sdk-minimal": "0.1.7-rc.2",
63
+ "@deepseek-ai/dsh-session-reference": "0.1.7-rc.2",
64
+ "@deepseek-ai/dsh-skill-filesystem": "0.1.7-rc.2",
65
+ "@deepseek-ai/dsh-skill-office": "0.1.7-rc.2",
66
+ "@deepseek-ai/dsh-tool-workspace-dependencies": "0.1.7-rc.2",
67
+ "@deepseek-ai/dsh-terminal-bash": "0.1.7-rc.2",
68
+ "@deepseek-ai/dsh-time-context": "0.1.7-rc.2",
69
+ "@deepseek-ai/dsh-tmux-context": "0.1.7-rc.2",
70
+ "@deepseek-ai/dsh-skill": "0.1.7-rc.2",
71
+ "@deepseek-ai/dsh-token-meter": "0.1.7-rc.2",
72
+ "@deepseek-ai/dsh-tool-ask-user": "0.1.7-rc.2",
73
+ "@deepseek-ai/dsh-tool-bash": "0.1.7-rc.2",
74
+ "@deepseek-ai/dsh-tool-bash-persistent": "0.1.7-rc.2",
75
+ "@deepseek-ai/dsh-terminal": "0.1.7-rc.2",
76
+ "@deepseek-ai/dsh-tool-fs": "0.1.7-rc.2",
77
+ "@deepseek-ai/dsh-tool-fs-search": "0.1.7-rc.2",
78
+ "@deepseek-ai/dsh-tool-present": "0.1.7-rc.2",
79
+ "@deepseek-ai/dsh-tool-cordis": "0.1.7-rc.2",
80
+ "@deepseek-ai/dsh-tool-goal": "0.1.7-rc.2",
81
+ "@deepseek-ai/dsh-tool-jobs": "0.1.7-rc.2",
82
+ "@deepseek-ai/dsh-tool-pwsh": "0.1.7-rc.2",
83
+ "@deepseek-ai/dsh-tool-skill": "0.1.7-rc.2",
84
+ "@deepseek-ai/dsh-tool-ralph": "0.1.7-rc.2",
85
+ "@deepseek-ai/dsh-tool-str-replace-editor": "0.1.7-rc.2",
86
+ "@deepseek-ai/dsh-tool-subagent-control": "0.1.7-rc.2",
87
+ "@deepseek-ai/dsh-tool-web": "0.1.7-rc.2",
88
+ "@deepseek-ai/dsh-tool-todo": "0.1.7-rc.2",
89
+ "@deepseek-ai/dsh-tool-pwsh-persistent": "0.1.7-rc.2",
90
+ "@deepseek-ai/dsh-tool-subagent": "0.1.7-rc.2",
91
+ "@deepseek-ai/dsh-tool-workflow": "0.1.7-rc.2",
92
+ "@deepseek-ai/dsh-web-app": "0.1.7-rc.2",
93
+ "@deepseek-ai/dsh-webhook-github": "0.1.7-rc.2",
94
+ "@deepseek-ai/dsh-workflow-ptc": "0.1.7-rc.2",
94
95
  "@deepseek-ai/schemastery": "~3.18.4",
95
- "@deepseek-ai/dsh-mcp-resources": "0.1.7-alpha.2",
96
- "@deepseek-ai/dsh-tool-fs": "0.1.7-alpha.2",
97
- "@deepseek-ai/dsh-plugin-manager": "0.1.7-alpha.2",
98
- "@deepseek-ai/dsh-atomic-write": "0.1.7-alpha.2",
99
- "@deepseek-ai/dsh-agent-preset": "0.1.7-alpha.2",
100
- "@deepseek-ai/dsh-experimental-voice-input-bundle": "0.1.7-alpha.2",
101
- "@deepseek-ai/dsh-tool-present": "0.1.7-alpha.2",
102
- "@deepseek-ai/dsh-http-proxy": "0.1.7-alpha.2"
96
+ "@deepseek-ai/dsh-http-proxy": "0.1.7-rc.2",
97
+ "@deepseek-ai/dsh-webhook": "0.1.7-rc.2",
98
+ "@deepseek-ai/dsh-mcp-resources": "0.1.7-rc.2",
99
+ "@deepseek-ai/dsh-plugin-manager": "0.1.7-rc.2",
100
+ "@deepseek-ai/dsh-atomic-write": "0.1.7-rc.2",
101
+ "@deepseek-ai/dsh-experimental-voice-input-bundle": "0.1.7-rc.2",
102
+ "@deepseek-ai/dsh-agent-preset": "0.1.7-rc.2",
103
+ "@deepseek-ai/dsh-experimental-auto-review": "0.1.7-rc.2"
103
104
  },
104
105
  "devDependencies": {
105
106
  "@agentclientprotocol/sdk": "1.4.0",
@@ -108,44 +109,47 @@
108
109
  "ajv": "^8.20.0",
109
110
  "execa": "^10.0.0",
110
111
  "ws": "8.21.0",
111
- "@deepseek-ai/dsh-acp": "0.1.7-alpha.2",
112
- "@deepseek-ai/dsh-agent": "0.1.7-alpha.2",
113
- "@deepseek-ai/dsh-agent-loop": "0.1.7-alpha.2",
114
- "@deepseek-ai/dsh-agent-loop-testkit": "0.1.7-alpha.2",
115
- "@deepseek-ai/dsh-attachment-local": "0.1.7-alpha.2",
116
- "@deepseek-ai/dsh-credentials-local": "0.1.7-alpha.2",
117
- "@deepseek-ai/dsh-bash-local": "0.1.7-alpha.2",
118
- "@deepseek-ai/dsh-deepseek-llm-api-extensions": "0.1.7-alpha.2",
119
- "@deepseek-ai/dsh-experimental-agent-team": "0.1.7-alpha.2",
120
- "@deepseek-ai/dsh-experimental-ptc-runtime-python": "0.1.7-alpha.2",
121
- "@deepseek-ai/dsh-experimental-tool-agent-team": "0.1.7-alpha.2",
122
- "@deepseek-ai/dsh-fs-sandbox": "0.1.7-alpha.2",
123
- "@deepseek-ai/dsh-fs-observation-policy": "0.1.7-alpha.2",
124
- "@deepseek-ai/dsh-host-frontend-static": "0.1.7-alpha.2",
125
- "@deepseek-ai/dsh-llm": "0.1.7-alpha.2",
126
- "@deepseek-ai/dsh-host-webserver": "0.1.7-alpha.2",
127
- "@deepseek-ai/dsh-llm-deepseek": "0.1.7-alpha.2",
128
- "@deepseek-ai/dsh-llm-pi-ai": "0.1.7-alpha.2",
129
- "@deepseek-ai/dsh-llm-mock-server": "0.1.7-alpha.2",
130
- "@deepseek-ai/dsh-llm-replay": "0.1.7-alpha.2",
131
- "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "0.1.7-alpha.2",
132
- "@deepseek-ai/dsh-sandbox-local": "0.1.7-alpha.2",
133
- "@deepseek-ai/dsh-sandbox-policy": "0.1.7-alpha.2",
134
- "@deepseek-ai/dsh-session": "0.1.7-alpha.2",
135
- "@deepseek-ai/dsh-session-checkpoint-policy": "0.1.7-alpha.2",
136
- "@deepseek-ai/dsh-session-log-deepseek": "0.1.7-alpha.2",
137
- "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.7-alpha.2",
138
- "@deepseek-ai/dsh-session-query": "0.1.7-alpha.2",
139
- "@deepseek-ai/dsh-settings": "0.1.7-alpha.2",
140
- "@deepseek-ai/dsh-subagent": "0.1.7-alpha.2",
141
- "@deepseek-ai/dsh-loader-smoke": "0.1.7-alpha.2",
142
- "@deepseek-ai/dsh-subagent-spawn-in-process": "0.1.7-alpha.2",
143
- "@deepseek-ai/dsh-subprocess-local": "0.1.7-alpha.2",
144
- "@deepseek-ai/dsh-system-prompt": "0.1.7-alpha.2",
145
- "@deepseek-ai/dsh-tools": "0.1.7-alpha.2",
146
- "@deepseek-ai/dsh-shell-env": "0.1.7-alpha.2",
147
- "@deepseek-ai/dsh-subagent-fork-in-process": "0.1.7-alpha.2",
148
- "@deepseek-ai/dsh-user-approval": "0.1.7-alpha.2"
112
+ "@deepseek-ai/dsh-agent-loop": "0.1.7-rc.2",
113
+ "@deepseek-ai/dsh-agent-loop-testkit": "0.1.7-rc.2",
114
+ "@deepseek-ai/dsh-attachment-local": "0.1.7-rc.2",
115
+ "@deepseek-ai/dsh-bash-local": "0.1.7-rc.2",
116
+ "@deepseek-ai/dsh-agent": "0.1.7-rc.2",
117
+ "@deepseek-ai/dsh-deepseek-llm-api-extensions": "0.1.7-rc.2",
118
+ "@deepseek-ai/dsh-credentials-local": "0.1.7-rc.2",
119
+ "@deepseek-ai/dsh-experimental-agent-team": "0.1.7-rc.2",
120
+ "@deepseek-ai/dsh-acp": "0.1.7-rc.2",
121
+ "@deepseek-ai/dsh-fs-sandbox": "0.1.7-rc.2",
122
+ "@deepseek-ai/dsh-experimental-tool-agent-team": "0.1.7-rc.2",
123
+ "@deepseek-ai/dsh-host-webserver": "0.1.7-rc.2",
124
+ "@deepseek-ai/dsh-experimental-ptc-runtime-python": "0.1.7-rc.2",
125
+ "@deepseek-ai/dsh-llm-deepseek": "0.1.7-rc.2",
126
+ "@deepseek-ai/dsh-host-frontend-static": "0.1.7-rc.2",
127
+ "@deepseek-ai/dsh-fs-observation-policy": "0.1.7-rc.2",
128
+ "@deepseek-ai/dsh-llm-deepseek-account": "0.1.7-rc.2",
129
+ "@deepseek-ai/dsh-llm-mock-server": "0.1.7-rc.2",
130
+ "@deepseek-ai/dsh-llm-pi-ai": "0.1.7-rc.2",
131
+ "@deepseek-ai/dsh-llm-replay": "0.1.7-rc.2",
132
+ "@deepseek-ai/dsh-llm-deepseek-api-key": "0.1.7-rc.2",
133
+ "@deepseek-ai/dsh-loader-smoke": "0.1.7-rc.2",
134
+ "@deepseek-ai/dsh-llm": "0.1.7-rc.2",
135
+ "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "0.1.7-rc.2",
136
+ "@deepseek-ai/dsh-sandbox-local": "0.1.7-rc.2",
137
+ "@deepseek-ai/dsh-sandbox-policy": "0.1.7-rc.2",
138
+ "@deepseek-ai/dsh-sdk-client": "0.1.7-rc.2",
139
+ "@deepseek-ai/dsh-session": "0.1.7-rc.2",
140
+ "@deepseek-ai/dsh-session-query": "0.1.7-rc.2",
141
+ "@deepseek-ai/dsh-session-persistence-jsonl": "0.1.7-rc.2",
142
+ "@deepseek-ai/dsh-session-log-deepseek": "0.1.7-rc.2",
143
+ "@deepseek-ai/dsh-shell-env": "0.1.7-rc.2",
144
+ "@deepseek-ai/dsh-settings": "0.1.7-rc.2",
145
+ "@deepseek-ai/dsh-subagent": "0.1.7-rc.2",
146
+ "@deepseek-ai/dsh-session-checkpoint-policy": "0.1.7-rc.2",
147
+ "@deepseek-ai/dsh-subagent-fork-in-process": "0.1.7-rc.2",
148
+ "@deepseek-ai/dsh-subagent-spawn-in-process": "0.1.7-rc.2",
149
+ "@deepseek-ai/dsh-subprocess-local": "0.1.7-rc.2",
150
+ "@deepseek-ai/dsh-system-prompt": "0.1.7-rc.2",
151
+ "@deepseek-ai/dsh-tools": "0.1.7-rc.2",
152
+ "@deepseek-ai/dsh-user-approval": "0.1.7-rc.2"
149
153
  },
150
154
  "exports": {
151
155
  "./profile-boot": {
@@ -1,2 +0,0 @@
1
- import { n as runDumpConfig } from "./dump-config-C-0P1h0W.js";
2
- export { runDumpConfig };
@@ -1,31 +0,0 @@
1
- import { t as INSTALL_ANCHOR } from "./profile-boot-DIiro1p-.js";
2
- import { resolveProfileDir } from "@deepseek-ai/dsh-app-boot";
3
- import { join } from "node:path";
4
- import { runPluginCommand } from "@deepseek-ai/dsh-plugin-manager/operations";
5
- //#region lib/types/plugin.js
6
- /** dsh plugin forwards pnpm through the shared profile package operations. */
7
- /** Run package management for a profile.
8
- * @param profile Profile name.
9
- * @param args Pnpm arguments relative to the invoking directory.
10
- * @returns Pnpm exit code.
11
- */
12
- async function runPlugin(profile, args) {
13
- const result = await runPluginCommand({
14
- profile,
15
- installAnchor: INSTALL_ANCHOR,
16
- cwd: process.cwd()
17
- }, args, {
18
- execution: "cli",
19
- outputBytes: 16384,
20
- lockWaitMs: 12e4,
21
- onOutput: (text, stream) => {
22
- process[stream].write(text);
23
- }
24
- });
25
- if (result.exitCode === 127) process.stderr.write("dsh: pnpm was not found; install pnpm and make it available on PATH.\n");
26
- if (result.exitCode !== 0) process.stderr.write(`dsh: pnpm failed; diagnostics: ${result.logPath}\n`);
27
- if (result.exitCode !== 0 && args.some((argument) => /^git\+|^github:|\.git(?:#|$)/.test(argument))) process.stderr.write(`dsh: git-hosted plugins build on install via their prepare script, which pnpm blocks until allowed — add the exact key pnpm printed above under allowBuilds in ${join(resolveProfileDir(profile), "pnpm-workspace.yaml")}, then re-run\n`);
28
- return result.exitCode;
29
- }
30
- //#endregion
31
- export { runPlugin };