@deepseek-ai/dsh 0.1.3-alpha.2 → 0.1.5-alpha.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
@@ -2,5 +2,5 @@
2
2
  # side as of the last confirmed-consistent state. Both languages carry equal authority;
3
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: 850a9371c1515d1e0219e9a685b638063c498ff4
6
- README.zh.md: 02de213d7a7158971b445511a00661183b37234c
5
+ README.md: 2e74ef68cf0b8487083a2e2af0f5175c78ec5212
6
+ README.zh.md: 85a75f4c025e1bfe1461b9ffdaca533d308318ba
package/README.md CHANGED
@@ -9,6 +9,7 @@ The `dsh` command is the sole supported Node application launcher: profiles are
9
9
  | Command | Purpose |
10
10
  |---|---|
11
11
  | `dsh --profile <name>` | Boot the named profile under `$DSH_HOME/profiles/<name>`. |
12
+ | `dsh --profile <name> --from-default-profile <template>` | Create a new custom profile from a shipped template, then boot it. |
12
13
  | `dsh --profile acp` | Serve automation clients over ACP stdio until disconnect. |
13
14
  | `dsh --profile headless "job"` | Run one fresh persisted session, print the final answer, and exit. |
14
15
  | `dsh --profile sdk` | Serve SDK clients over JSON-RPC stdio until shutdown or disconnect. |
@@ -16,7 +17,7 @@ The `dsh` command is the sole supported Node application launcher: profiles are
16
17
  | `dsh web` | Alias of `--profile web`. |
17
18
  | `dsh plugin --profile <name> <pnpm args>` | Manage a profile's plugins by forwarding to pnpm in the profile directory. |
18
19
 
19
- 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; any other profile must be created through `dsh plugin`.
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
21
 
21
22
  ## App arguments
22
23
 
package/README.zh.md CHANGED
@@ -9,6 +9,7 @@
9
9
  | 命令 | 用途 |
10
10
  |---|---|
11
11
  | `dsh --profile <name>` | 启动位于 `$DSH_HOME/profiles/<name>` 的指定 profile。 |
12
+ | `dsh --profile <name> --from-default-profile <template>` | 从随附模板创建新的自定义 profile,然后启动它。 |
12
13
  | `dsh --profile acp` | 通过 ACP stdio 为自动化 client 提供服务,直至断开连接。 |
13
14
  | `dsh --profile headless "job"` | 运行一个全新的持久化会话,打印最终答案并退出。 |
14
15
  | `dsh --profile sdk` | 通过 JSON-RPC stdio 为 SDK client 提供服务,直至关闭或断开连接。 |
@@ -16,7 +17,7 @@
16
17
  | `dsh web` | `--profile web` 的别名。 |
17
18
  | `dsh plugin --profile <name> <pnpm args>` | 通过在 profile 目录中转发给 pnpm 来管理该 profile 的插件。 |
18
19
 
19
- 运行命令时所在的目录将作为默认 workspace 根目录。`web`、`headless`、`sdk`、`sdk-minimal` 和 `acp` profile 在首次使用时会从随附模板自动初始化;其他任何 profile 都必须通过 `dsh plugin` 创建。
20
+ 运行命令时所在的目录将作为默认 workspace 根目录。`web`、`headless`、`sdk`、`sdk-minimal` 和 `acp` profile 在首次使用时会从随附模板自动初始化。使用 `--from-default-profile` 可以基于这些模板之一,在尚未使用的非内置名称处创建其他 profile;通过 `dsh plugin` 则可以初始化一个以 base 为基础的 profile。`desktop` 名称保留给 Electron 持有的 profile,因此 CLI 会拒绝针对它的启动、配置 dump 和插件管理请求。
20
21
 
21
22
  ## 应用参数
22
23
 
package/lib/bin.js CHANGED
@@ -25,10 +25,15 @@ import { Command, CommanderError } from "commander";
25
25
  * variadic — a variadic `--patch` would swallow the inner arguments.
26
26
  */
27
27
  const collect = (value, previous = []) => [...previous, value];
28
+ function rejectElectronProfile(program, profile) {
29
+ if (profile.toLowerCase() === "desktop") program.error("error: profile \"desktop\" is managed exclusively by the Electron application");
30
+ }
28
31
  /** The launcher's own help text; each app prints its own. */
29
32
  const HELP_EXAMPLES = `
30
33
  Examples:
31
34
  dsh --profile web boot the web profile (same as: dsh web)
35
+ dsh --profile rescue --from-default-profile web
36
+ create rescue from the shipped web template, then boot it
32
37
  dsh --profile headless "run the tests" answer one task, print the result, and exit
33
38
  dsh --profile tui --patch ./extra.yml boot a custom profile with one extra overlay
34
39
  dsh --profile tui --resume <session> arguments after the launcher flags reach the app
@@ -47,9 +52,11 @@ Examples:
47
52
  function resolveBoot(program, profile, options, args) {
48
53
  const patches = options.patch ?? [];
49
54
  if (patches.includes("")) program.error("error: --patch needs a path");
55
+ if (options.fromDefaultProfile === "") program.error("error: --from-default-profile needs a name");
50
56
  if (options.dumpConfig !== true && options.dumpDefaultConfig !== true) return {
51
57
  mode: "profile",
52
58
  profile,
59
+ fromDefaultProfile: options.fromDefaultProfile,
53
60
  patches,
54
61
  args
55
62
  };
@@ -60,6 +67,7 @@ function resolveBoot(program, profile, options, args) {
60
67
  return {
61
68
  mode: "dump-config",
62
69
  profile,
70
+ fromDefaultProfile: options.fromDefaultProfile,
63
71
  defaultOnly,
64
72
  patches
65
73
  };
@@ -74,28 +82,31 @@ function resolveBoot(program, profile, options, args) {
74
82
  function parseDshArgs(argv, version) {
75
83
  let resolved;
76
84
  const program = new Command();
77
- program.name("dsh").version(version, "-V, --version", "output the version number").description("dsh: boot a DeepSeek Harness profile — an ordered stack of plugin-bundle patch layers under your own overrides.").addHelpText("after", HELP_EXAMPLES).exitOverride().helpOption(false).allowUnknownOption().passThroughOptions().enablePositionalOptions().argument("[args...]", "arguments for the booted profile's app (see: dsh --profile <name> --help)").option("--profile <name>", "the profile under $DSH_HOME/profiles to boot").option("--patch <path>", "extra patch-list overlay applied after the profile layer (repeatable)", collect).option("--dump-config", "print the composed profile tree and exit").option("--dump-default-config", "print the profile tree without its user layer or --patch overlays and exit").action((args, options) => {
85
+ program.name("dsh").version(version, "-V, --version", "output the version number").description("dsh: boot a DeepSeek Harness profile — an ordered stack of plugin-bundle patch layers under your own overrides.").addHelpText("after", HELP_EXAMPLES).exitOverride().helpOption(false).allowUnknownOption().passThroughOptions().enablePositionalOptions().argument("[args...]", "arguments for the booted profile's app (see: dsh --profile <name> --help)").option("--profile <name>", "the profile under $DSH_HOME/profiles to boot").option("--from-default-profile <name>", "initialize a new custom profile from a shipped profile template").option("--patch <path>", "extra patch-list overlay applied after the profile layer (repeatable)", collect).option("--dump-config", "print the composed profile tree and exit").option("--dump-default-config", "print the profile tree without its user layer or --patch overlays and exit").action((args, options) => {
78
86
  if (options.profile === void 0) {
79
87
  if (args.some((argument) => argument === "-h" || argument === "--help")) program.help();
80
88
  program.error("error: --profile <name> is required");
81
89
  }
82
90
  const profile = options.profile;
83
91
  if (profile === "") program.error("error: --profile needs a name");
92
+ rejectElectronProfile(program, profile);
84
93
  resolved = resolveBoot(program, profile, options, args);
85
94
  });
86
95
  /** Reject parent options supplied before a subcommand. */
87
96
  const rejectParentOptions = (command) => {
88
97
  const parent = program.opts();
89
- if (parent.profile !== void 0 || parent.patch !== void 0 || parent.dumpConfig !== void 0 || parent.dumpDefaultConfig !== void 0) program.error(`error: ${command} takes none of parent --profile, --patch, --dump-config, or --dump-default-config`);
98
+ if (parent.profile !== void 0 || parent.patch !== void 0 || parent.dumpConfig !== void 0 || parent.dumpDefaultConfig !== void 0 || parent.fromDefaultProfile !== void 0) program.error(`error: ${command} takes none of parent --profile, --from-default-profile, --patch, --dump-config, or --dump-default-config`);
90
99
  };
91
100
  const web = program.command("web").description("boot the web profile (alias of --profile web); the web app's own flags follow");
92
101
  web.helpOption(false).allowUnknownOption().passThroughOptions().enablePositionalOptions().argument("[args...]", "arguments for the web app (see: dsh web --help)").option("--patch <path>", "extra patch-list overlay applied after the profile layer (repeatable)", collect).option("--dump-config", "print the composed web-profile tree (with the user layer and any --patch) and exit").option("--dump-default-config", "print the web profile's bundle layers (no user layer) and exit").action((args, options) => {
93
102
  rejectParentOptions("web");
94
103
  resolved = resolveBoot(web, "web", options, args);
95
104
  });
96
- program.command("plugin").description("manage a profile's plugins by forwarding the remaining arguments to pnpm in the profile directory").requiredOption("--profile <name>", "the profile whose plugins to manage (initialized on first use)").allowUnknownOption().argument("[args...]", "pnpm arguments, forwarded verbatim (add <pkg>, remove <pkg>, why <pkg>, ...)").action((args, options) => {
105
+ const plugin = program.command("plugin").description("manage a profile's plugins by forwarding the remaining arguments to pnpm in the profile directory");
106
+ plugin.requiredOption("--profile <name>", "the profile whose plugins to manage (initialized on first use)").allowUnknownOption().argument("[args...]", "pnpm arguments, forwarded verbatim (add <pkg>, remove <pkg>, why <pkg>, ...)").action((args, options) => {
97
107
  rejectParentOptions("plugin");
98
108
  if (options.profile === "") program.error("error: --profile needs a name");
109
+ rejectElectronProfile(plugin, options.profile);
99
110
  if (args.length === 0) program.error("error: plugin needs pnpm arguments to forward (e.g. add <package>)");
100
111
  resolved = {
101
112
  mode: "plugin",
@@ -131,23 +142,24 @@ async function runCli() {
131
142
  const invocation = parseDshArgs(process.argv.slice(2), readVersion());
132
143
  switch (invocation.mode) {
133
144
  case "profile": {
134
- const { runProfile } = await import("./profile-boot-CMEGRIuU.js");
145
+ const { runProfile } = await import("./profile-boot-BP_C0vpU.js");
135
146
  await runProfile({
136
147
  environment: loadLayeredEnv("dsh"),
137
148
  profile: invocation.profile,
149
+ fromDefaultProfile: invocation.fromDefaultProfile,
138
150
  patchFiles: invocation.patches,
139
151
  args: invocation.args
140
152
  });
141
153
  break;
142
154
  }
143
155
  case "plugin": {
144
- const { runPlugin } = await import("./plugin-WDISvmGc.js");
156
+ const { runPlugin } = await import("./plugin-Ddi42qoW.js");
145
157
  process.exit(runPlugin(invocation.profile, invocation.args));
146
158
  break;
147
159
  }
148
160
  case "dump-config": {
149
- const { runDumpConfig } = await import("./dump-config-oo1v7itl.js");
150
- runDumpConfig(invocation.profile, invocation.defaultOnly, invocation.patches);
161
+ const { runDumpConfig } = await import("./dump-config-lFgMwK8i.js");
162
+ runDumpConfig(invocation.profile, invocation.defaultOnly, invocation.patches, invocation.fromDefaultProfile);
151
163
  break;
152
164
  }
153
165
  default: throw new Error(`dsh: unhandled invocation mode ${JSON.stringify(invocation)}`);
@@ -1,4 +1,4 @@
1
- import { i as prepareProfile, n as PROFILE_ROOT_FILENAME, r as homePatchPath } from "./profile-boot-BBDiUnZs.js";
1
+ import { a as prepareProfile, n as PROFILE_ROOT_FILENAME, r as homePatchPath } from "./profile-boot-Dk-7KqJc.js";
2
2
  import { existsSync } from "node:fs";
3
3
  import { loadOptionalPatches, loadOverlayPatches, renderConfigDump } from "@deepseek-ai/dsh-app-boot";
4
4
  import { join, resolve } from "node:path";
@@ -19,9 +19,10 @@ const NAME = "dsh";
19
19
  * (the recovery diagnostic for a broken `cordis.patch.yml`, which is then
20
20
  * never parsed).
21
21
  * @param patches - `--patch` overlay paths, in argv order.
22
+ * @param fromDefaultProfile - shipped template used once to initialize a missing profile.
22
23
  */
23
- function runDumpConfig(profile, defaultOnly, patches) {
24
- const loaded = prepareProfile(profile, !defaultOnly);
24
+ function runDumpConfig(profile, defaultOnly, patches, fromDefaultProfile) {
25
+ const loaded = prepareProfile(profile, !defaultOnly, fromDefaultProfile);
25
26
  const layers = loaded.layers.map((layer) => ({
26
27
  label: layer.packageName,
27
28
  patches: layer.patches
@@ -1,4 +1,4 @@
1
- import { t as INSTALL_ANCHOR } from "./profile-boot-BBDiUnZs.js";
1
+ import { t as INSTALL_ANCHOR } from "./profile-boot-Dk-7KqJc.js";
2
2
  import { existsSync } from "node:fs";
3
3
  import { DEFAULT_PROFILE_BUNDLES, PROFILE_TEMPLATES, initProfile, readProfileManifest, resolveBundleDir, resolveProfileDir, writeProfileManifest } from "@deepseek-ai/dsh-app-boot";
4
4
  import { join, resolve } from "node:path";
@@ -0,0 +1,2 @@
1
+ import { s as runProfile } from "./profile-boot-Dk-7KqJc.js";
2
+ export { runProfile };
@@ -1,7 +1,7 @@
1
- import { writeFileSync } from "node:fs";
1
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
2
2
  import { fileURLToPath } from "node:url";
3
- import { PROFILE_PATCH_FILENAME, boot, composeEntries, healProfilesModuleFallback, installFailLoud, loadOptionalPatches, loadOverlayPatches, loadProfile, watchUserPatches } from "@deepseek-ai/dsh-app-boot";
4
- import { join, resolve } from "node:path";
3
+ import { PROFILE_PATCH_FILENAME, PROFILE_TEMPLATES, boot, composeEntries, healProfilesModuleFallback, initProfile, installFailLoud, loadOptionalPatches, loadOverlayPatches, loadProfile, resolveProfileDir, watchUserPatches } from "@deepseek-ai/dsh-app-boot";
4
+ import { dirname, join, resolve } from "node:path";
5
5
  import { resolveDshHome } from "@deepseek-ai/dsh-home-paths";
6
6
  import { installProxyFromEnvironment } from "@deepseek-ai/dsh-http-proxy";
7
7
  import { DSH_LAUNCH_ENVIRONMENT_KEY } from "@deepseek-ai/dsh-launch-environment";
@@ -129,6 +129,48 @@ const PROFILE_ROOT_CONFIG = `# dsh profile root — an empty entry list. The tre
129
129
  /** Root config filename inside a profile directory. */
130
130
  const PROFILE_ROOT_FILENAME = "cordis.yml";
131
131
  /**
132
+ * Initialize a missing profile from one shipped template. This copies only
133
+ * the template's bundle list and patch-reload policy; local state from the
134
+ * same-named shipped profile is not read, and no inheritance metadata is
135
+ * persisted. Shipped profile names are reserved, and the target directory is
136
+ * claimed exclusively so existing or concurrent state is never reused.
137
+ * @param name - the new profile name.
138
+ * @param fromDefaultProfile - shipped profile template to copy.
139
+ * @param home - Harness home containing the profile directory.
140
+ * @throws when the template is unknown, the target name is shipped, or the target directory exists.
141
+ */
142
+ function initializeProfileFromDefault(name, fromDefaultProfile, home = resolveDshHome()) {
143
+ const dir = resolveProfileDir(name, home);
144
+ const template = Object.hasOwn(PROFILE_TEMPLATES, fromDefaultProfile) ? PROFILE_TEMPLATES[fromDefaultProfile] : void 0;
145
+ if (template === void 0) {
146
+ const expected = Object.keys(PROFILE_TEMPLATES).sort().map((value) => JSON.stringify(value)).join(", ");
147
+ throw new Error(`${NAME}: unknown default profile ${JSON.stringify(fromDefaultProfile)}; expected one of ${expected}`);
148
+ }
149
+ if (Object.hasOwn(PROFILE_TEMPLATES, name)) throw new Error(`${NAME}: profile ${JSON.stringify(name)} is shipped and cannot be a custom profile target; omit --from-default-profile to use it`);
150
+ mkdirSync(dirname(dir), { recursive: true });
151
+ try {
152
+ mkdirSync(dir);
153
+ } catch (error) {
154
+ if (error.code !== "EEXIST") throw error;
155
+ const manifestPath = join(dir, "package.json");
156
+ if (existsSync(manifestPath)) throw new Error(`${NAME}: profile ${JSON.stringify(name)} already exists at ${manifestPath}; omit --from-default-profile to use it`);
157
+ throw new Error(`${NAME}: profile directory ${dir} already exists; choose an unused profile name`);
158
+ }
159
+ try {
160
+ initProfile(dir, template.bundles, template.patchReload);
161
+ } catch (error) {
162
+ try {
163
+ rmSync(dir, {
164
+ recursive: true,
165
+ force: true
166
+ });
167
+ } catch (cleanupError) {
168
+ throw new AggregateError([error, cleanupError], `${NAME}: profile initialization failed and ${dir} could not be removed`);
169
+ }
170
+ throw error;
171
+ }
172
+ }
173
+ /**
132
174
  * Resolve the telemetry opt-out switch into its boot patch. ANY non-empty
133
175
  * value (including `'0'`/`'false'`) disables: a privacy switch prefers
134
176
  * off-by-mistake over on-by-mistake. A composition without the telemetry row
@@ -157,9 +199,12 @@ function resolveTelemetryPatch(disabledEnv, hasRow) {
157
199
  * the identical base).
158
200
  * @param name - the profile name.
159
201
  * @param userLayer - `false` skips parsing `cordis.patch.yml` (the default dump).
202
+ * @param fromDefaultProfile - shipped template used once to initialize a missing profile.
160
203
  * @returns the loaded profile.
204
+ * @throws when explicit initialization names an unknown template or an existing profile.
161
205
  */
162
- function prepareProfile(name, userLayer = true) {
206
+ function prepareProfile(name, userLayer = true, fromDefaultProfile) {
207
+ if (fromDefaultProfile !== void 0) initializeProfileFromDefault(name, fromDefaultProfile);
163
208
  const profile = loadProfile(NAME, name, INSTALL_ANCHOR, void 0, { userLayer });
164
209
  writeFileSync(join(profile.dir, PROFILE_ROOT_FILENAME), PROFILE_ROOT_CONFIG);
165
210
  return profile;
@@ -184,8 +229,8 @@ function allPatches(composed) {
184
229
  * @param patchFiles - `--patch` overlay paths, in argv order.
185
230
  * @returns the profile and its patch layers.
186
231
  */
187
- async function composeProfile(name, patchFiles) {
188
- const profile = prepareProfile(name);
232
+ async function composeProfile(name, patchFiles, fromDefaultProfile) {
233
+ const profile = prepareProfile(name, true, fromDefaultProfile);
189
234
  await healProfilesModuleFallback({
190
235
  installAnchor: INSTALL_ANCHOR,
191
236
  profile
@@ -235,7 +280,7 @@ async function runProfile(options) {
235
280
  const disposeProxy = await installProxyFromEnvironment(options.environment, (message) => {
236
281
  process.stderr.write(`${NAME}: ${message}\n`);
237
282
  });
238
- const composed = await composeProfile(options.profile, options.patchFiles);
283
+ const composed = await composeProfile(options.profile, options.patchFiles, options.fromDefaultProfile);
239
284
  const app = {};
240
285
  const appReady = createAppReady();
241
286
  const shutdown = createProcessShutdown(async () => {
@@ -301,4 +346,4 @@ async function runProfile(options) {
301
346
  };
302
347
  }
303
348
  //#endregion
304
- export { resolveTelemetryPatch as a, prepareProfile as i, PROFILE_ROOT_FILENAME as n, runProfile as o, homePatchPath as r, INSTALL_ANCHOR as t };
349
+ export { prepareProfile as a, initializeProfileFromDefault as i, PROFILE_ROOT_FILENAME as n, resolveTelemetryPatch as o, homePatchPath as r, runProfile as s, INSTALL_ANCHOR as t };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@deepseek-ai/dsh",
3
3
  "description": "dsh CLI: profile boot, plugin management, and the browser UI alias",
4
- "version": "0.1.3-alpha.2",
4
+ "version": "0.1.5-alpha.2",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -31,74 +31,75 @@
31
31
  "commander": "^15.0.0",
32
32
  "js-yaml": "^4.2.0",
33
33
  "node-addon-require-builtin": "^0.1.4",
34
+ "@deepseek-ai/cordis": "^4.0.2",
34
35
  "@deepseek-ai/cordis-plugin-hmr": "^1.0.17",
35
36
  "@deepseek-ai/cordis-plugin-include": "^1.0.7",
36
37
  "@deepseek-ai/cordis-plugin-loader": "^1.0.3",
37
- "@deepseek-ai/cordis": "^4.0.2",
38
- "@deepseek-ai/dsh-acp-app": "^0.1.3-alpha.2",
39
- "@deepseek-ai/dsh-agent-tool-presentation": "^0.1.3-alpha.2",
40
- "@deepseek-ai/dsh-agent-instructions": "^0.1.3-alpha.2",
41
38
  "@deepseek-ai/cordis-plugin-timer": "^1.1.4",
42
- "@deepseek-ai/dsh-base": "^0.1.3-alpha.2",
43
- "@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.3-alpha.2",
44
- "@deepseek-ai/dsh-client-ui-cordis": "^0.1.3-alpha.2",
45
- "@deepseek-ai/dsh-command-compact": "^0.1.3-alpha.2",
46
- "@deepseek-ai/dsh-command-goal": "^0.1.3-alpha.2",
47
- "@deepseek-ai/dsh-compaction-basic": "^0.1.3-alpha.2",
48
- "@deepseek-ai/dsh-cmdline": "^0.1.3-alpha.2",
49
- "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.3-alpha.2",
50
- "@deepseek-ai/dsh-cordis-client-runner": "^0.1.3-alpha.2",
51
- "@deepseek-ai/dsh-app-boot": "^0.1.3-alpha.2",
52
- "@deepseek-ai/dsh-goal": "^0.1.3-alpha.2",
53
- "@deepseek-ai/dsh-fs-local": "^0.1.3-alpha.2",
54
- "@deepseek-ai/dsh-home-paths": "^0.1.3-alpha.2",
55
- "@deepseek-ai/dsh-hooks-claude-code": "^0.1.3-alpha.2",
56
- "@deepseek-ai/dsh-headless": "^0.1.3-alpha.2",
57
- "@deepseek-ai/dsh-hooks-codex": "^0.1.3-alpha.2",
58
- "@deepseek-ai/dsh-jobs-local": "^0.1.3-alpha.2",
59
- "@deepseek-ai/dsh-launch-environment": "^0.1.3-alpha.2",
60
- "@deepseek-ai/dsh-mcp-client": "^0.1.3-alpha.2",
61
- "@deepseek-ai/dsh-persona": "^0.1.3-alpha.2",
62
- "@deepseek-ai/dsh-plan-mode": "^0.1.3-alpha.2",
63
- "@deepseek-ai/dsh-pwsh-local": "^0.1.3-alpha.2",
64
- "@deepseek-ai/dsh-pwsh-sandbox": "^0.1.3-alpha.2",
65
- "@deepseek-ai/dsh-schedule": "^0.1.3-alpha.2",
66
- "@deepseek-ai/dsh-sdk-app": "^0.1.3-alpha.2",
67
- "@deepseek-ai/dsh-sdk-minimal": "^0.1.3-alpha.2",
68
- "@deepseek-ai/dsh-session-projection": "^0.1.3-alpha.2",
69
- "@deepseek-ai/dsh-session-reference": "^0.1.3-alpha.2",
70
- "@deepseek-ai/dsh-skill": "^0.1.3-alpha.2",
71
- "@deepseek-ai/dsh-skill-filesystem": "^0.1.3-alpha.2",
72
- "@deepseek-ai/dsh-terminal": "^0.1.3-alpha.2",
73
- "@deepseek-ai/dsh-terminal-bash": "^0.1.3-alpha.2",
74
- "@deepseek-ai/dsh-tmux-context": "^0.1.3-alpha.2",
75
- "@deepseek-ai/dsh-token-meter": "^0.1.3-alpha.2",
76
- "@deepseek-ai/dsh-time-context": "^0.1.3-alpha.2",
77
- "@deepseek-ai/dsh-tool-ask-user": "^0.1.3-alpha.2",
78
- "@deepseek-ai/dsh-goal-round-driver": "^0.1.3-alpha.2",
79
- "@deepseek-ai/dsh-tool-cordis": "^0.1.3-alpha.2",
80
- "@deepseek-ai/dsh-tool-bash": "^0.1.3-alpha.2",
81
- "@deepseek-ai/dsh-tool-fs": "^0.1.3-alpha.2",
82
- "@deepseek-ai/dsh-tool-fs-search": "^0.1.3-alpha.2",
83
- "@deepseek-ai/dsh-tool-goal": "^0.1.3-alpha.2",
84
- "@deepseek-ai/dsh-tool-jobs": "^0.1.3-alpha.2",
85
- "@deepseek-ai/dsh-tool-pwsh-persistent": "^0.1.3-alpha.2",
86
- "@deepseek-ai/dsh-tool-ralph": "^0.1.3-alpha.2",
87
- "@deepseek-ai/dsh-tool-skill": "^0.1.3-alpha.2",
88
- "@deepseek-ai/dsh-tool-pwsh": "^0.1.3-alpha.2",
89
- "@deepseek-ai/dsh-tool-str-replace-editor": "^0.1.3-alpha.2",
90
- "@deepseek-ai/dsh-tool-subagent": "^0.1.3-alpha.2",
91
- "@deepseek-ai/dsh-tool-subagent-control": "^0.1.3-alpha.2",
92
- "@deepseek-ai/dsh-tool-todo": "^0.1.3-alpha.2",
93
- "@deepseek-ai/dsh-tool-web": "^0.1.3-alpha.2",
94
- "@deepseek-ai/dsh-tool-workflow": "^0.1.3-alpha.2",
95
- "@deepseek-ai/dsh-web-app": "^0.1.3-alpha.2",
96
- "@deepseek-ai/dsh-webhook": "^0.1.3-alpha.2",
97
- "@deepseek-ai/dsh-webhook-github": "^0.1.3-alpha.2",
98
- "@deepseek-ai/dsh-workflow-worker-thread": "^0.1.3-alpha.2",
99
- "@deepseek-ai/dsh-http-proxy": "^0.1.3-alpha.2",
39
+ "@deepseek-ai/dsh-acp-app": "^0.1.5-alpha.2",
40
+ "@deepseek-ai/dsh-agent-instructions": "^0.1.5-alpha.2",
41
+ "@deepseek-ai/dsh-app-boot": "^0.1.5-alpha.2",
42
+ "@deepseek-ai/dsh-base": "^0.1.5-alpha.2",
43
+ "@deepseek-ai/dsh-client-ui-agent-preset": "^0.1.5-alpha.2",
44
+ "@deepseek-ai/dsh-client-ui-cordis": "^0.1.5-alpha.2",
45
+ "@deepseek-ai/dsh-cmdline": "^0.1.5-alpha.2",
46
+ "@deepseek-ai/dsh-command-compact": "^0.1.5-alpha.2",
47
+ "@deepseek-ai/dsh-command-goal": "^0.1.5-alpha.2",
48
+ "@deepseek-ai/dsh-compaction-basic": "^0.1.5-alpha.2",
49
+ "@deepseek-ai/dsh-compaction-tool-result-pruner": "^0.1.5-alpha.2",
50
+ "@deepseek-ai/dsh-cordis-client-runner": "^0.1.5-alpha.2",
51
+ "@deepseek-ai/dsh-fs-local": "^0.1.5-alpha.2",
52
+ "@deepseek-ai/dsh-goal": "^0.1.5-alpha.2",
53
+ "@deepseek-ai/dsh-goal-round-driver": "^0.1.5-alpha.2",
54
+ "@deepseek-ai/dsh-headless": "^0.1.5-alpha.2",
55
+ "@deepseek-ai/dsh-home-paths": "^0.1.5-alpha.2",
56
+ "@deepseek-ai/dsh-hooks-claude-code": "^0.1.5-alpha.2",
57
+ "@deepseek-ai/dsh-hooks-codex": "^0.1.5-alpha.2",
58
+ "@deepseek-ai/dsh-jobs-local": "^0.1.5-alpha.2",
59
+ "@deepseek-ai/dsh-launch-environment": "^0.1.5-alpha.2",
60
+ "@deepseek-ai/dsh-mcp-client": "^0.1.5-alpha.2",
61
+ "@deepseek-ai/dsh-persona": "^0.1.5-alpha.2",
62
+ "@deepseek-ai/dsh-plan-mode": "^0.1.5-alpha.2",
63
+ "@deepseek-ai/dsh-pwsh-local": "^0.1.5-alpha.2",
64
+ "@deepseek-ai/dsh-pwsh-sandbox": "^0.1.5-alpha.2",
65
+ "@deepseek-ai/dsh-schedule": "^0.1.5-alpha.2",
66
+ "@deepseek-ai/dsh-sdk-app": "^0.1.5-alpha.2",
67
+ "@deepseek-ai/dsh-sdk-minimal": "^0.1.5-alpha.2",
68
+ "@deepseek-ai/dsh-session-projection": "^0.1.5-alpha.2",
69
+ "@deepseek-ai/dsh-session-reference": "^0.1.5-alpha.2",
70
+ "@deepseek-ai/dsh-skill": "^0.1.5-alpha.2",
71
+ "@deepseek-ai/dsh-skill-filesystem": "^0.1.5-alpha.2",
72
+ "@deepseek-ai/dsh-time-context": "^0.1.5-alpha.2",
73
+ "@deepseek-ai/dsh-tmux-context": "^0.1.5-alpha.2",
74
+ "@deepseek-ai/dsh-terminal-bash": "^0.1.5-alpha.2",
75
+ "@deepseek-ai/dsh-token-meter": "^0.1.5-alpha.2",
76
+ "@deepseek-ai/dsh-tool-ask-user": "^0.1.5-alpha.2",
77
+ "@deepseek-ai/dsh-tool-bash": "^0.1.5-alpha.2",
78
+ "@deepseek-ai/dsh-tool-bash-persistent": "^0.1.5-alpha.2",
79
+ "@deepseek-ai/dsh-tool-cordis": "^0.1.5-alpha.2",
80
+ "@deepseek-ai/dsh-tool-present": "^0.1.5-alpha.2",
81
+ "@deepseek-ai/dsh-tool-fs": "^0.1.5-alpha.2",
82
+ "@deepseek-ai/dsh-tool-fs-search": "^0.1.5-alpha.2",
83
+ "@deepseek-ai/dsh-tool-goal": "^0.1.5-alpha.2",
84
+ "@deepseek-ai/dsh-tool-pwsh": "^0.1.5-alpha.2",
85
+ "@deepseek-ai/dsh-tool-pwsh-persistent": "^0.1.5-alpha.2",
86
+ "@deepseek-ai/dsh-tool-ralph": "^0.1.5-alpha.2",
87
+ "@deepseek-ai/dsh-tool-skill": "^0.1.5-alpha.2",
88
+ "@deepseek-ai/dsh-tool-str-replace-editor": "^0.1.5-alpha.2",
89
+ "@deepseek-ai/dsh-tool-subagent": "^0.1.5-alpha.2",
90
+ "@deepseek-ai/dsh-tool-subagent-control": "^0.1.5-alpha.2",
91
+ "@deepseek-ai/dsh-tool-todo": "^0.1.5-alpha.2",
92
+ "@deepseek-ai/dsh-tool-web": "^0.1.5-alpha.2",
93
+ "@deepseek-ai/dsh-tool-workflow": "^0.1.5-alpha.2",
94
+ "@deepseek-ai/dsh-web-app": "^0.1.5-alpha.2",
95
+ "@deepseek-ai/dsh-webhook": "^0.1.5-alpha.2",
96
+ "@deepseek-ai/dsh-webhook-github": "^0.1.5-alpha.2",
97
+ "@deepseek-ai/dsh-terminal": "^0.1.5-alpha.2",
98
+ "@deepseek-ai/dsh-workflow-worker-thread": "^0.1.5-alpha.2",
100
99
  "@deepseek-ai/schemastery": "^3.18.2",
101
- "@deepseek-ai/dsh-tool-bash-persistent": "^0.1.3-alpha.2"
100
+ "@deepseek-ai/dsh-tool-jobs": "^0.1.5-alpha.2",
101
+ "@deepseek-ai/dsh-http-proxy": "^0.1.5-alpha.2",
102
+ "@deepseek-ai/dsh-agent-tool-presentation": "^0.1.5-alpha.2"
102
103
  },
103
104
  "devDependencies": {
104
105
  "@agentclientprotocol/sdk": "1.4.0",
@@ -106,43 +107,45 @@
106
107
  "@types/ws": "8.18.1",
107
108
  "execa": "^10.0.0",
108
109
  "ws": "8.21.0",
109
- "@deepseek-ai/dsh-acp": "^0.1.3-alpha.2",
110
- "@deepseek-ai/dsh-agent": "^0.1.3-alpha.2",
111
- "@deepseek-ai/dsh-attachment-local": "^0.1.3-alpha.2",
112
- "@deepseek-ai/dsh-bash-local": "^0.1.3-alpha.2",
113
- "@deepseek-ai/dsh-credentials-local": "^0.1.3-alpha.2",
114
- "@deepseek-ai/dsh-deepseek-llm-api-extensions": "^0.1.3-alpha.2",
115
- "@deepseek-ai/dsh-experimental-agent-team": "^0.1.3-alpha.2",
116
- "@deepseek-ai/dsh-experimental-agent-team-profile": "^0.1.3-alpha.2",
117
- "@deepseek-ai/dsh-experimental-code-runtime-python": "^0.1.3-alpha.2",
118
- "@deepseek-ai/dsh-experimental-tool-agent-team": "^0.1.3-alpha.2",
119
- "@deepseek-ai/dsh-fs-observation-policy": "^0.1.3-alpha.2",
120
- "@deepseek-ai/dsh-fs-sandbox": "^0.1.3-alpha.2",
121
- "@deepseek-ai/dsh-host-frontend-static": "^0.1.3-alpha.2",
122
- "@deepseek-ai/dsh-host-webserver": "^0.1.3-alpha.2",
123
- "@deepseek-ai/dsh-llm": "^0.1.3-alpha.2",
124
- "@deepseek-ai/dsh-llm-deepseek": "^0.1.3-alpha.2",
125
- "@deepseek-ai/dsh-llm-mock-server": "^0.1.3-alpha.2",
126
- "@deepseek-ai/dsh-llm-replay": "^0.1.3-alpha.2",
127
- "@deepseek-ai/dsh-loader-smoke": "^0.1.3-alpha.2",
128
- "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "^0.1.3-alpha.2",
129
- "@deepseek-ai/dsh-llm-pi-ai": "^0.1.3-alpha.2",
130
- "@deepseek-ai/dsh-sandbox-local": "^0.1.3-alpha.2",
131
- "@deepseek-ai/dsh-session": "^0.1.3-alpha.2",
132
- "@deepseek-ai/dsh-sandbox-policy": "^0.1.3-alpha.2",
133
- "@deepseek-ai/dsh-session-checkpoint-policy": "^0.1.3-alpha.2",
134
- "@deepseek-ai/dsh-session-log-deepseek": "^0.1.3-alpha.2",
135
- "@deepseek-ai/dsh-session-persistence-jsonl": "^0.1.3-alpha.2",
136
- "@deepseek-ai/dsh-shell-env": "^0.1.3-alpha.2",
137
- "@deepseek-ai/dsh-session-query": "^0.1.3-alpha.2",
138
- "@deepseek-ai/dsh-subagent": "^0.1.3-alpha.2",
139
- "@deepseek-ai/dsh-subagent-fork-in-process": "^0.1.3-alpha.2",
140
- "@deepseek-ai/dsh-settings": "^0.1.3-alpha.2",
141
- "@deepseek-ai/dsh-settings-file": "^0.1.3-alpha.2",
142
- "@deepseek-ai/dsh-subprocess-local": "^0.1.3-alpha.2",
143
- "@deepseek-ai/dsh-system-prompt": "^0.1.3-alpha.2",
144
- "@deepseek-ai/dsh-tools": "^0.1.3-alpha.2",
145
- "@deepseek-ai/dsh-subagent-spawn-in-process": "^0.1.3-alpha.2",
146
- "@deepseek-ai/dsh-user-approval": "^0.1.3-alpha.2"
110
+ "@deepseek-ai/dsh-acp": "^0.1.5-alpha.2",
111
+ "@deepseek-ai/dsh-agent": "^0.1.5-alpha.2",
112
+ "@deepseek-ai/dsh-agent-loop": "^0.1.5-alpha.2",
113
+ "@deepseek-ai/dsh-agent-loop-testkit": "^0.1.5-alpha.2",
114
+ "@deepseek-ai/dsh-bash-local": "^0.1.5-alpha.2",
115
+ "@deepseek-ai/dsh-attachment-local": "^0.1.5-alpha.2",
116
+ "@deepseek-ai/dsh-credentials-local": "^0.1.5-alpha.2",
117
+ "@deepseek-ai/dsh-deepseek-llm-api-extensions": "^0.1.5-alpha.2",
118
+ "@deepseek-ai/dsh-experimental-agent-team-profile": "^0.1.5-alpha.2",
119
+ "@deepseek-ai/dsh-experimental-agent-team": "^0.1.5-alpha.2",
120
+ "@deepseek-ai/dsh-experimental-tool-agent-team": "^0.1.5-alpha.2",
121
+ "@deepseek-ai/dsh-experimental-code-runtime-python": "^0.1.5-alpha.2",
122
+ "@deepseek-ai/dsh-fs-sandbox": "^0.1.5-alpha.2",
123
+ "@deepseek-ai/dsh-fs-observation-policy": "^0.1.5-alpha.2",
124
+ "@deepseek-ai/dsh-host-frontend-static": "^0.1.5-alpha.2",
125
+ "@deepseek-ai/dsh-llm": "^0.1.5-alpha.2",
126
+ "@deepseek-ai/dsh-host-webserver": "^0.1.5-alpha.2",
127
+ "@deepseek-ai/dsh-llm-mock-server": "^0.1.5-alpha.2",
128
+ "@deepseek-ai/dsh-llm-pi-ai": "^0.1.5-alpha.2",
129
+ "@deepseek-ai/dsh-llm-deepseek": "^0.1.5-alpha.2",
130
+ "@deepseek-ai/dsh-llm-replay": "^0.1.5-alpha.2",
131
+ "@deepseek-ai/dsh-loader-smoke": "^0.1.5-alpha.2",
132
+ "@deepseek-ai/dsh-plugin-package-inventory-deepseek": "^0.1.5-alpha.2",
133
+ "@deepseek-ai/dsh-sandbox-local": "^0.1.5-alpha.2",
134
+ "@deepseek-ai/dsh-sandbox-policy": "^0.1.5-alpha.2",
135
+ "@deepseek-ai/dsh-session-checkpoint-policy": "^0.1.5-alpha.2",
136
+ "@deepseek-ai/dsh-session": "^0.1.5-alpha.2",
137
+ "@deepseek-ai/dsh-session-query": "^0.1.5-alpha.2",
138
+ "@deepseek-ai/dsh-shell-env": "^0.1.5-alpha.2",
139
+ "@deepseek-ai/dsh-session-persistence-jsonl": "^0.1.5-alpha.2",
140
+ "@deepseek-ai/dsh-settings": "^0.1.5-alpha.2",
141
+ "@deepseek-ai/dsh-session-log-deepseek": "^0.1.5-alpha.2",
142
+ "@deepseek-ai/dsh-settings-file": "^0.1.5-alpha.2",
143
+ "@deepseek-ai/dsh-subagent": "^0.1.5-alpha.2",
144
+ "@deepseek-ai/dsh-subagent-fork-in-process": "^0.1.5-alpha.2",
145
+ "@deepseek-ai/dsh-subagent-spawn-in-process": "^0.1.5-alpha.2",
146
+ "@deepseek-ai/dsh-system-prompt": "^0.1.5-alpha.2",
147
+ "@deepseek-ai/dsh-tools": "^0.1.5-alpha.2",
148
+ "@deepseek-ai/dsh-user-approval": "^0.1.5-alpha.2",
149
+ "@deepseek-ai/dsh-subprocess-local": "^0.1.5-alpha.2"
147
150
  }
148
151
  }
@@ -1,2 +0,0 @@
1
- import { o as runProfile } from "./profile-boot-BBDiUnZs.js";
2
- export { runProfile };