@deepseek-ai/dsh 0.1.6-alpha.2 → 0.1.7-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 +2 -2
- package/README.md +1 -1
- package/README.zh.md +1 -1
- package/lib/bin.js +21 -5
- package/lib/{dump-config-Bb5YvFIX.js → dump-config-C-0P1h0W.js} +14 -3
- package/lib/dump-config-DaAE0NHG.js +2 -0
- package/lib/dump-config-schema-BgEU7VYz.js +41 -0
- package/lib/{plugin-DJ-rVHUS.js → plugin-CnNK4cws.js} +1 -1
- package/lib/{profile-boot-BNu17Y9U.js → profile-boot-DIiro1p-.js} +8 -15
- package/lib/profile-boot.js +1 -1
- package/lib/types/args.d.ts +9 -1
- package/lib/types/dump-config-schema.d.ts +17 -0
- package/lib/types/dump-config.d.ts +9 -0
- package/lib/types/profile-boot.d.ts +1 -3
- package/package.json +117 -123
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:
|
|
6
|
-
README.zh.md:
|
|
5
|
+
README.md: 4eb113a6155433cb69f949d9e461ccfbd0142e7c
|
|
6
|
+
README.zh.md: 6a0e8a38a70d2ad551b4e91619545b3def09f2ec
|
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ The tree composes over an empty root:
|
|
|
43
43
|
|
|
44
44
|
Bundles named in `dsh.profile.bundles` resolve from the dsh installation first (`@deepseek-ai/dsh-base`, `@deepseek-ai/dsh-web-app`, `@deepseek-ai/dsh-headless`, `@deepseek-ai/dsh-sdk-app`, `@deepseek-ai/dsh-sdk-minimal`, `@deepseek-ai/dsh-acp-app`), then from the profile's own `node_modules`, where pnpm installs out-of-tree plugins.
|
|
45
45
|
|
|
46
|
-
Use `--dump-default-config` and `--dump-config` to inspect the composed tree without booting it.
|
|
46
|
+
Use `--dump-default-config` and `--dump-config` to inspect the composed tree without booting it. `--dump-config-schema` imports the composed tree's declared plugin schemas and prints JSON Schema for entries and patches instead of configuration values; read the [schema-dump safety and scope](reference/README.md#config-schema-dump) before inspecting untrusted plugins.
|
|
47
47
|
|
|
48
48
|
The [CLI behavior reference](reference/README.md) owns exact layer precedence, flags, shutdown behavior, deployment defaults, and source execution. The [startup and reload failure table](../../packages/boot/app-boot/README.md#startup-and-reload-failures) compares optional and required plugin failures with configuration HMR.
|
|
49
49
|
|
package/README.zh.md
CHANGED
|
@@ -43,7 +43,7 @@ profile 目录包含一个 `package.json`,其中记录树外插件依赖,以
|
|
|
43
43
|
|
|
44
44
|
`dsh.profile.bundles` 中列出的组合包先从 dsh 安装目录解析(`@deepseek-ai/dsh-base`、`@deepseek-ai/dsh-web-app`、`@deepseek-ai/dsh-headless`、`@deepseek-ai/dsh-sdk-app`、`@deepseek-ai/dsh-sdk-minimal`、`@deepseek-ai/dsh-acp-app`),再从 profile 自身的 `node_modules` 解析;pnpm 会将树外插件安装到该目录。
|
|
45
45
|
|
|
46
|
-
使用 `--dump-default-config` 和 `--dump-config`
|
|
46
|
+
使用 `--dump-default-config` 和 `--dump-config` 可在不启动的情况下检查组合后的配置树。`--dump-config-schema` 会导入组合树中插件声明的 schema,并打印描述 entry 与 patch 的 JSON Schema,而不是配置值;检查不受信任的插件前,请阅读 [schema dump 的安全性与范围](reference/README.zh.md#config-schema-dump)。
|
|
47
47
|
|
|
48
48
|
层的确切优先级、flag、关闭行为、部署默认值和源码执行方式,以 [CLI 行为参考](reference/README.zh.md)为准。[启动与重载失败表](../../packages/boot/app-boot/README.zh.md#startup-and-reload-failures)对比 optional、required 插件启动失败与配置 HMR 的行为。
|
|
49
49
|
|
package/lib/bin.js
CHANGED
|
@@ -62,15 +62,26 @@ function resolveBoot(program, profile, options, args) {
|
|
|
62
62
|
const patches = options.patch ?? [];
|
|
63
63
|
if (patches.includes("")) program.error("error: --patch needs a path");
|
|
64
64
|
if (options.fromDefaultProfile === "") program.error("error: --from-default-profile needs a name");
|
|
65
|
-
|
|
65
|
+
const dumps = [
|
|
66
|
+
options.dumpConfig,
|
|
67
|
+
options.dumpDefaultConfig,
|
|
68
|
+
options.dumpConfigSchema
|
|
69
|
+
].filter(Boolean);
|
|
70
|
+
if (dumps.length === 0) return {
|
|
66
71
|
mode: "profile",
|
|
67
72
|
profile,
|
|
68
73
|
fromDefaultProfile: options.fromDefaultProfile,
|
|
69
74
|
patches,
|
|
70
75
|
args
|
|
71
76
|
};
|
|
72
|
-
if (
|
|
77
|
+
if (dumps.length > 1) program.error("error: --dump-config, --dump-default-config, and --dump-config-schema are mutually exclusive");
|
|
73
78
|
if (args.length > 0) program.error(`error: config dumps take no app arguments, got ${args.map((argument) => JSON.stringify(argument)).join(" ")}`);
|
|
79
|
+
if (options.dumpConfigSchema === true) return {
|
|
80
|
+
mode: "dump-config-schema",
|
|
81
|
+
profile,
|
|
82
|
+
fromDefaultProfile: options.fromDefaultProfile,
|
|
83
|
+
patches
|
|
84
|
+
};
|
|
74
85
|
const defaultOnly = options.dumpDefaultConfig === true;
|
|
75
86
|
if (defaultOnly && patches.length > 0) program.error("error: --dump-default-config prints the bundle layers and takes no --patch");
|
|
76
87
|
return {
|
|
@@ -92,7 +103,7 @@ function parseDshArgs(argv, version) {
|
|
|
92
103
|
const first = argv[0];
|
|
93
104
|
let resolved;
|
|
94
105
|
const program = new Command();
|
|
95
|
-
program.name("dsh").version(version, "-V, --version", "output the version number").usage("[--profile] <name> [options] [app-args...]\n dsh plugin --profile <name> <pnpm-args...>").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).helpCommand(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", selectProfile).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) => {
|
|
106
|
+
program.name("dsh").version(version, "-V, --version", "output the version number").usage("[--profile] <name> [options] [app-args...]\n dsh plugin --profile <name> <pnpm-args...>").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).helpCommand(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", selectProfile).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-config-schema", "print JSON Schema for profile entries and patches without mounting").option("--dump-default-config", "print the profile tree without its user layer or --patch overlays and exit").action((args, options) => {
|
|
96
107
|
if (options.profile === void 0) {
|
|
97
108
|
if (args.some((argument) => argument === "-h" || argument === "--help")) program.help();
|
|
98
109
|
program.error("error: --profile <name> is required");
|
|
@@ -223,15 +234,20 @@ async function runCli() {
|
|
|
223
234
|
break;
|
|
224
235
|
}
|
|
225
236
|
case "plugin": {
|
|
226
|
-
const { runPlugin } = await import("./plugin-
|
|
237
|
+
const { runPlugin } = await import("./plugin-CnNK4cws.js");
|
|
227
238
|
process.exit(await runPlugin(invocation.profile, invocation.args));
|
|
228
239
|
break;
|
|
229
240
|
}
|
|
230
241
|
case "dump-config": {
|
|
231
|
-
const { runDumpConfig } = await import("./dump-config-
|
|
242
|
+
const { runDumpConfig } = await import("./dump-config-DaAE0NHG.js");
|
|
232
243
|
runDumpConfig(invocation.profile, invocation.defaultOnly, invocation.patches, invocation.fromDefaultProfile);
|
|
233
244
|
break;
|
|
234
245
|
}
|
|
246
|
+
case "dump-config-schema": {
|
|
247
|
+
const { runDumpConfigSchema } = await import("./dump-config-schema-BgEU7VYz.js");
|
|
248
|
+
await runDumpConfigSchema(invocation.profile, invocation.patches, invocation.fromDefaultProfile);
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
235
251
|
default: throw new Error(`dsh: unhandled invocation mode ${JSON.stringify(invocation)}`);
|
|
236
252
|
}
|
|
237
253
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as prepareProfile, n as PROFILE_ROOT_FILENAME, r as homePatchPath } from "./profile-boot-
|
|
1
|
+
import { a as prepareProfile, n as PROFILE_ROOT_FILENAME, r as homePatchPath } from "./profile-boot-DIiro1p-.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";
|
|
@@ -23,6 +23,17 @@ const NAME = "dsh";
|
|
|
23
23
|
*/
|
|
24
24
|
function runDumpConfig(profile, defaultOnly, patches, fromDefaultProfile) {
|
|
25
25
|
const loaded = prepareProfile(profile, !defaultOnly, fromDefaultProfile);
|
|
26
|
+
const layers = collectConfigDumpLayers(loaded, defaultOnly, patches);
|
|
27
|
+
process.stdout.write(renderConfigDump(NAME, join(loaded.dir, PROFILE_ROOT_FILENAME), layers));
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Read dump layers in bundle, profile, home, then argv order without composing them.
|
|
31
|
+
* @param loaded - prepared profile and parsed bundle and profile patches.
|
|
32
|
+
* @param defaultOnly - omit profile, home, and argv layers without reading their files.
|
|
33
|
+
* @param patches - overlay paths relative to the invoking directory, in argv order.
|
|
34
|
+
* @returns the labeled layers shared by YAML and schema dumps.
|
|
35
|
+
*/
|
|
36
|
+
function collectConfigDumpLayers(loaded, defaultOnly, patches) {
|
|
26
37
|
const layers = loaded.layers.map((layer) => ({
|
|
27
38
|
label: layer.packageName,
|
|
28
39
|
patches: layer.patches
|
|
@@ -46,8 +57,8 @@ function runDumpConfig(profile, defaultOnly, patches, fromDefaultProfile) {
|
|
|
46
57
|
});
|
|
47
58
|
}
|
|
48
59
|
}
|
|
49
|
-
|
|
60
|
+
return layers;
|
|
50
61
|
}
|
|
51
62
|
/* v8 ignore stop */
|
|
52
63
|
//#endregion
|
|
53
|
-
export { runDumpConfig };
|
|
64
|
+
export { runDumpConfig as n, collectConfigDumpLayers as t };
|
|
@@ -0,0 +1,41 @@
|
|
|
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";
|
|
3
|
+
import { generateConfigSchema } from "@deepseek-ai/dsh-app-boot";
|
|
4
|
+
//#region lib/types/dump-config-schema.js
|
|
5
|
+
/**
|
|
6
|
+
* Schema-dump entry: inspect the composed profile without applying its plugins.
|
|
7
|
+
* Imports and lazy schema builders execute trusted module code.
|
|
8
|
+
* @module @deepseek-ai/dsh/dump-config-schema
|
|
9
|
+
*/
|
|
10
|
+
/* v8 ignore file -- built-bin acceptance drives schema collection and output. */
|
|
11
|
+
const NAME = "dsh";
|
|
12
|
+
/**
|
|
13
|
+
* Print one JSON Schema document; incomplete collection or projection sets exitCode to 1.
|
|
14
|
+
* Profile initialization writes match the YAML dump. Plugin imports may execute
|
|
15
|
+
* top-level code, but collection never applies plugins or evaluates `!!js`.
|
|
16
|
+
* During schema generation, ordinary stdout writes are redirected to stderr.
|
|
17
|
+
* @param profile - the profile name.
|
|
18
|
+
* @param patches - overlay paths, in argv order.
|
|
19
|
+
* @param fromDefaultProfile - shipped template used once to initialize a missing profile.
|
|
20
|
+
* @returns after collection and output, with diagnostics also written to stderr.
|
|
21
|
+
*/
|
|
22
|
+
async function runDumpConfigSchema(profile, patches, fromDefaultProfile) {
|
|
23
|
+
const loaded = prepareProfile(profile, true, fromDefaultProfile);
|
|
24
|
+
const layers = collectConfigDumpLayers(loaded, false, patches);
|
|
25
|
+
const stdoutWrite = process.stdout.write;
|
|
26
|
+
let dump;
|
|
27
|
+
process.stdout.write = process.stderr.write.bind(process.stderr);
|
|
28
|
+
try {
|
|
29
|
+
dump = await generateConfigSchema(NAME, loaded, layers.map((layer) => layer.patches), INSTALL_ANCHOR);
|
|
30
|
+
} finally {
|
|
31
|
+
process.stdout.write = stdoutWrite;
|
|
32
|
+
}
|
|
33
|
+
process.stdout.write(`${JSON.stringify(dump, null, 2)}\n`);
|
|
34
|
+
for (const diagnostic of dump["x-cordis"].diagnostics) {
|
|
35
|
+
const location = diagnostic.path === void 0 ? "" : ` [${diagnostic.path}]`;
|
|
36
|
+
process.stderr.write(`${NAME}: ${diagnostic.level}:${location} ${diagnostic.message}\n`);
|
|
37
|
+
}
|
|
38
|
+
if (!dump["x-cordis"].complete) process.exitCode = 1;
|
|
39
|
+
}
|
|
40
|
+
//#endregion
|
|
41
|
+
export { runDumpConfigSchema };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as INSTALL_ANCHOR } from "./profile-boot-
|
|
1
|
+
import { t as INSTALL_ANCHOR } from "./profile-boot-DIiro1p-.js";
|
|
2
2
|
import { resolveProfileDir } from "@deepseek-ai/dsh-app-boot";
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { runPluginCommand } from "@deepseek-ai/dsh-plugin-manager/operations";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { fileURLToPath } from "node:url";
|
|
3
|
-
import { PROFILE_PATCH_FILENAME, PROFILE_TEMPLATES, PluginPackages, boot,
|
|
3
|
+
import { PROFILE_PATCH_FILENAME, PROFILE_TEMPLATES, PluginPackages, boot, createRuntimeResolution, initProfile, installFailLoud, loadOverlayPatches, loadProfile, readProfilePatches, resolveProfileDir } from "@deepseek-ai/dsh-app-boot";
|
|
4
4
|
import { resolveDshHome } from "@deepseek-ai/dsh-home-paths";
|
|
5
5
|
import { dirname, join, resolve } from "node:path";
|
|
6
6
|
import { installProxyFromEnvironment } from "@deepseek-ai/dsh-http-proxy";
|
|
@@ -197,22 +197,19 @@ function prepareProfile(name, userLayer = true, fromDefaultProfile) {
|
|
|
197
197
|
* then the telemetry switch.
|
|
198
198
|
* @param name - the profile name.
|
|
199
199
|
* @param patchFiles - `--patch` overlay paths, in argv order.
|
|
200
|
-
* @param resolutionMode - runtime lookup, disk links, or dual verification of both.
|
|
201
200
|
* @param fromDefaultProfile - shipped template for a missing named profile.
|
|
202
201
|
* @param resolvedProfile - application-owned profile and installation.
|
|
203
202
|
* @returns the profile and its patch layers.
|
|
204
203
|
*/
|
|
205
|
-
async function composeProfile(name, patchFiles,
|
|
204
|
+
async function composeProfile(name, patchFiles, fromDefaultProfile, resolvedProfile) {
|
|
206
205
|
const profile = resolvedProfile?.profile ?? prepareProfile(name, true, fromDefaultProfile);
|
|
207
206
|
if (resolvedProfile !== void 0) writeFileSync(join(profile.dir, PROFILE_ROOT_FILENAME), PROFILE_ROOT_CONFIG);
|
|
208
|
-
const resolutionOptions = {
|
|
209
|
-
installAnchor: resolvedProfile?.installAnchor ?? INSTALL_ANCHOR,
|
|
210
|
-
profile
|
|
211
|
-
};
|
|
212
|
-
if (resolvedProfile !== void 0 && resolutionMode !== "runtime") healIsolatedProfileModuleFallback(resolvedProfile);
|
|
213
207
|
return {
|
|
214
208
|
profile,
|
|
215
|
-
resolution:
|
|
209
|
+
resolution: await createRuntimeResolution({
|
|
210
|
+
installAnchor: resolvedProfile?.installAnchor ?? INSTALL_ANCHOR,
|
|
211
|
+
profile
|
|
212
|
+
}),
|
|
216
213
|
overlays: patchFiles.flatMap((file) => loadOverlayPatches(NAME, resolve(file)))
|
|
217
214
|
};
|
|
218
215
|
}
|
|
@@ -227,7 +224,6 @@ async function runProfile(options) {
|
|
|
227
224
|
const disposeProxy = await installProxyFromEnvironment(options.environment, (message) => {
|
|
228
225
|
process.stderr.write(`${NAME}: ${message}\n`);
|
|
229
226
|
});
|
|
230
|
-
const resolutionMode = process.pkg !== void 0 ? "runtime" : options.resolutionMode ?? "runtime";
|
|
231
227
|
const app = {};
|
|
232
228
|
let disposal;
|
|
233
229
|
const dispose = () => disposal ??= (async () => {
|
|
@@ -241,7 +237,7 @@ async function runProfile(options) {
|
|
|
241
237
|
if (failures.length > 1) throw new AggregateError(failures, "dsh: profile cleanup failed");
|
|
242
238
|
})();
|
|
243
239
|
try {
|
|
244
|
-
const composed = await composeProfile(options.profile, options.patchFiles,
|
|
240
|
+
const composed = await composeProfile(options.profile, options.patchFiles, options.fromDefaultProfile, options.resolvedProfile);
|
|
245
241
|
const appReady = createAppReady();
|
|
246
242
|
const shutdown = createProcessShutdown(dispose);
|
|
247
243
|
const signalShutdown = new AbortController();
|
|
@@ -275,10 +271,7 @@ async function runProfile(options) {
|
|
|
275
271
|
app.current = hostCtx;
|
|
276
272
|
hostCtx.provide("profileContext", profileContext);
|
|
277
273
|
hostCtx.provide(DSH_LAUNCH_ENVIRONMENT_KEY, options.environment);
|
|
278
|
-
await hostCtx.plugin(PluginPackages,
|
|
279
|
-
generation: composed.resolution,
|
|
280
|
-
behavior: resolutionMode === "dual" ? "verify" : "enforce"
|
|
281
|
-
});
|
|
274
|
+
await hostCtx.plugin(PluginPackages, { resolution: composed.resolution });
|
|
282
275
|
provideCmdline(hostCtx, {
|
|
283
276
|
args: options.args,
|
|
284
277
|
exit: (code) => void shutdown.shutdown(code),
|
package/lib/profile-boot.js
CHANGED
|
@@ -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-
|
|
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";
|
|
2
2
|
export { INSTALL_ANCHOR, PROFILE_ROOT_FILENAME, homePatchPath, initializeProfileFromDefault, prepareProfile, runProfile };
|
package/lib/types/args.d.ts
CHANGED
|
@@ -35,6 +35,14 @@ interface DumpConfigInvocation {
|
|
|
35
35
|
defaultOnly: boolean;
|
|
36
36
|
patches: string[];
|
|
37
37
|
}
|
|
38
|
+
/** Print declared plugin schemas without mounting the profile. */
|
|
39
|
+
interface DumpConfigSchemaInvocation {
|
|
40
|
+
mode: 'dump-config-schema';
|
|
41
|
+
profile: string;
|
|
42
|
+
/** Shipped template used once to initialize a missing profile. */
|
|
43
|
+
fromDefaultProfile?: string | undefined;
|
|
44
|
+
patches: string[];
|
|
45
|
+
}
|
|
38
46
|
/** Manage a profile's plugins: forward `args` to pnpm inside the profile directory. */
|
|
39
47
|
interface PluginInvocation {
|
|
40
48
|
mode: 'plugin';
|
|
@@ -43,7 +51,7 @@ interface PluginInvocation {
|
|
|
43
51
|
args: string[];
|
|
44
52
|
}
|
|
45
53
|
/** The resolved `dsh` invocation. Help, version, and errors exit inside {@link parseDshArgs}. */
|
|
46
|
-
export type DshInvocation = ProfileInvocation | DumpConfigInvocation | PluginInvocation;
|
|
54
|
+
export type DshInvocation = ProfileInvocation | DumpConfigInvocation | DumpConfigSchemaInvocation | PluginInvocation;
|
|
47
55
|
/**
|
|
48
56
|
* Resolve argv into one invocation, or print and exit for help, version, or an
|
|
49
57
|
* error.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema-dump entry: inspect the composed profile without applying its plugins.
|
|
3
|
+
* Imports and lazy schema builders execute trusted module code.
|
|
4
|
+
* @module @deepseek-ai/dsh/dump-config-schema
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Print one JSON Schema document; incomplete collection or projection sets exitCode to 1.
|
|
8
|
+
* Profile initialization writes match the YAML dump. Plugin imports may execute
|
|
9
|
+
* top-level code, but collection never applies plugins or evaluates `!!js`.
|
|
10
|
+
* During schema generation, ordinary stdout writes are redirected to stderr.
|
|
11
|
+
* @param profile - the profile name.
|
|
12
|
+
* @param patches - overlay paths, in argv order.
|
|
13
|
+
* @param fromDefaultProfile - shipped template used once to initialize a missing profile.
|
|
14
|
+
* @returns after collection and output, with diagnostics also written to stderr.
|
|
15
|
+
*/
|
|
16
|
+
export declare function runDumpConfigSchema(profile: string, patches: readonly string[], fromDefaultProfile?: string): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=dump-config-schema.d.ts.map
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* profile's own patch file, and each `--patch` overlay.
|
|
6
6
|
* @module @deepseek-ai/dsh/dump-config
|
|
7
7
|
*/
|
|
8
|
+
import { type ConfigDumpLayer, type Profile } from '@deepseek-ai/dsh-app-boot';
|
|
8
9
|
/**
|
|
9
10
|
* Print a profile composition with comments naming each source file and patch layer.
|
|
10
11
|
* @param profile - the profile name.
|
|
@@ -15,4 +16,12 @@
|
|
|
15
16
|
* @param fromDefaultProfile - shipped template used once to initialize a missing profile.
|
|
16
17
|
*/
|
|
17
18
|
export declare function runDumpConfig(profile: string, defaultOnly: boolean, patches: readonly string[], fromDefaultProfile?: string): void;
|
|
19
|
+
/**
|
|
20
|
+
* Read dump layers in bundle, profile, home, then argv order without composing them.
|
|
21
|
+
* @param loaded - prepared profile and parsed bundle and profile patches.
|
|
22
|
+
* @param defaultOnly - omit profile, home, and argv layers without reading their files.
|
|
23
|
+
* @param patches - overlay paths relative to the invoking directory, in argv order.
|
|
24
|
+
* @returns the labeled layers shared by YAML and schema dumps.
|
|
25
|
+
*/
|
|
26
|
+
export declare function collectConfigDumpLayers(loaded: Profile, defaultOnly: boolean, patches: readonly string[]): ConfigDumpLayer[];
|
|
18
27
|
//# sourceMappingURL=dump-config.d.ts.map
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* @module @deepseek-ai/dsh/profile-boot
|
|
11
11
|
*/
|
|
12
12
|
import { type Context } from '@deepseek-ai/cordis';
|
|
13
|
-
import { type ProfileContext, type Profile
|
|
13
|
+
import { type ProfileContext, type Profile } from '@deepseek-ai/dsh-app-boot';
|
|
14
14
|
import { type LaunchEnvironmentSnapshot } from '@deepseek-ai/dsh-launch-environment';
|
|
15
15
|
import { type ProcessShutdown } from './process-shutdown.ts';
|
|
16
16
|
/**
|
|
@@ -75,8 +75,6 @@ export interface RunProfileOptions {
|
|
|
75
75
|
args: readonly string[];
|
|
76
76
|
/** Application-owned package runtime, scoped to plugin package operations. */
|
|
77
77
|
packageManager?: ProfileContext['packageManager'];
|
|
78
|
-
/** Module fallback backend; defaults to runtime. Plain Node callers may override it; pkg executables always use runtime. */
|
|
79
|
-
resolutionMode?: ProfileResolutionMode;
|
|
80
78
|
}
|
|
81
79
|
/**
|
|
82
80
|
* Boot one profile invocation end to end and leave process lifetime to the
|
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.
|
|
4
|
+
"version": "0.1.7-alpha.2",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
7
7
|
},
|
|
@@ -18,140 +18,134 @@
|
|
|
18
18
|
"lib/*.js",
|
|
19
19
|
"lib/types/*.d.ts"
|
|
20
20
|
],
|
|
21
|
-
"dsh": {
|
|
22
|
-
"configTrees": [
|
|
23
|
-
{
|
|
24
|
-
"mount": "config/agent-presets",
|
|
25
|
-
"path": "../../packages/preset/agent-presets/presets",
|
|
26
|
-
"scanRoster": true
|
|
27
|
-
}
|
|
28
|
-
]
|
|
29
|
-
},
|
|
30
21
|
"license": "MIT",
|
|
31
22
|
"dependencies": {
|
|
32
23
|
"commander": "^15.0.0",
|
|
33
24
|
"js-yaml": "^4.2.0",
|
|
34
25
|
"node-addon-require-builtin": "^0.1.6",
|
|
35
|
-
"@deepseek-ai/cordis": "
|
|
36
|
-
"@deepseek-ai/
|
|
37
|
-
"@deepseek-ai/cordis-plugin-
|
|
38
|
-
"@deepseek-ai/cordis-plugin-timer": "
|
|
39
|
-
"@deepseek-ai/dsh-acp-app": "
|
|
40
|
-
"@deepseek-ai/dsh-
|
|
41
|
-
"@deepseek-ai/dsh-agent-
|
|
42
|
-
"@deepseek-ai/dsh-app-boot": "
|
|
43
|
-
"@deepseek-ai/dsh-
|
|
44
|
-
"@deepseek-ai/dsh-client-ui-
|
|
45
|
-
"@deepseek-ai/dsh-
|
|
46
|
-
"@deepseek-ai/dsh-
|
|
47
|
-
"@deepseek-ai/
|
|
48
|
-
"@deepseek-ai/dsh-command-
|
|
49
|
-
"@deepseek-ai/dsh-
|
|
50
|
-
"@deepseek-ai/dsh-
|
|
51
|
-
"@deepseek-ai/dsh-
|
|
52
|
-
"@deepseek-ai/dsh-
|
|
53
|
-
"@deepseek-ai/dsh-
|
|
54
|
-
"@deepseek-ai/dsh-
|
|
55
|
-
"@deepseek-ai/dsh-
|
|
56
|
-
"@deepseek-ai/dsh-
|
|
57
|
-
"@deepseek-ai/dsh-
|
|
58
|
-
"@deepseek-ai/dsh-
|
|
59
|
-
"@deepseek-ai/dsh-
|
|
60
|
-
"@deepseek-ai/dsh-
|
|
61
|
-
"@deepseek-ai/dsh-
|
|
62
|
-
"@deepseek-ai/dsh-
|
|
63
|
-
"@deepseek-ai/dsh-
|
|
64
|
-
"@deepseek-ai/dsh-
|
|
65
|
-
"@deepseek-ai/dsh-
|
|
66
|
-
"@deepseek-ai/dsh-
|
|
67
|
-
"@deepseek-ai/dsh-
|
|
68
|
-
"@deepseek-ai/dsh-
|
|
69
|
-
"@deepseek-ai/dsh-
|
|
70
|
-
"@deepseek-ai/dsh-
|
|
71
|
-
"@deepseek-ai/dsh-
|
|
72
|
-
"@deepseek-ai/dsh-
|
|
73
|
-
"@deepseek-ai/dsh-
|
|
74
|
-
"@deepseek-ai/dsh-skill": "
|
|
75
|
-
"@deepseek-ai/dsh-
|
|
76
|
-
"@deepseek-ai/dsh-terminal": "
|
|
77
|
-
"@deepseek-ai/dsh-terminal-bash": "
|
|
78
|
-
"@deepseek-ai/dsh-time-context": "
|
|
79
|
-
"@deepseek-ai/dsh-tmux-context": "
|
|
80
|
-
"@deepseek-ai/dsh-token-meter": "
|
|
81
|
-
"@deepseek-ai/dsh-tool-
|
|
82
|
-
"@deepseek-ai/dsh-tool-bash
|
|
83
|
-
"@deepseek-ai/dsh-tool-
|
|
84
|
-
"@deepseek-ai/dsh-tool-
|
|
85
|
-
"@deepseek-ai/dsh-tool-
|
|
86
|
-
"@deepseek-ai/dsh-
|
|
87
|
-
"@deepseek-ai/dsh-tool-
|
|
88
|
-
"@deepseek-ai/dsh-tool-
|
|
89
|
-
"@deepseek-ai/dsh-tool-
|
|
90
|
-
"@deepseek-ai/dsh-tool-pwsh": "
|
|
91
|
-
"@deepseek-ai/dsh-tool-
|
|
92
|
-
"@deepseek-ai/dsh-tool-
|
|
93
|
-
"@deepseek-ai/dsh-tool-
|
|
94
|
-
"@deepseek-ai/dsh-tool-
|
|
95
|
-
"@deepseek-ai/dsh-tool-subagent": "
|
|
96
|
-
"@deepseek-ai/dsh-tool-
|
|
97
|
-
"@deepseek-ai/dsh-tool-
|
|
98
|
-
"@deepseek-ai/dsh-tool-
|
|
99
|
-
"@deepseek-ai/dsh-
|
|
100
|
-
"@deepseek-ai/dsh-
|
|
101
|
-
"@deepseek-ai/dsh-webhook": "
|
|
102
|
-
"@deepseek-ai/dsh-
|
|
103
|
-
"@deepseek-ai/schemastery": "
|
|
104
|
-
"@deepseek-ai/dsh-
|
|
105
|
-
"@deepseek-ai/dsh-
|
|
106
|
-
"@deepseek-ai/dsh-
|
|
107
|
-
"@deepseek-ai/dsh-
|
|
108
|
-
"@deepseek-ai/dsh-
|
|
26
|
+
"@deepseek-ai/cordis": "~4.0.4",
|
|
27
|
+
"@deepseek-ai/cordis-plugin-include": "~1.0.9",
|
|
28
|
+
"@deepseek-ai/cordis-plugin-loader": "~1.0.5",
|
|
29
|
+
"@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",
|
|
94
|
+
"@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"
|
|
109
103
|
},
|
|
110
104
|
"devDependencies": {
|
|
111
105
|
"@agentclientprotocol/sdk": "1.4.0",
|
|
112
106
|
"@types/js-yaml": "^4.0.9",
|
|
113
107
|
"@types/ws": "8.18.1",
|
|
108
|
+
"ajv": "^8.20.0",
|
|
114
109
|
"execa": "^10.0.0",
|
|
115
110
|
"ws": "8.21.0",
|
|
116
|
-
"@deepseek-ai/dsh-acp": "
|
|
117
|
-
"@deepseek-ai/dsh-agent": "
|
|
118
|
-
"@deepseek-ai/dsh-agent-loop": "
|
|
119
|
-
"@deepseek-ai/dsh-agent-loop-testkit": "
|
|
120
|
-
"@deepseek-ai/dsh-attachment-local": "
|
|
121
|
-
"@deepseek-ai/dsh-
|
|
122
|
-
"@deepseek-ai/dsh-
|
|
123
|
-
"@deepseek-ai/dsh-deepseek-llm-api-extensions": "
|
|
124
|
-
"@deepseek-ai/dsh-experimental-agent-team": "
|
|
125
|
-
"@deepseek-ai/dsh-experimental-ptc-runtime-python": "
|
|
126
|
-
"@deepseek-ai/dsh-experimental-tool-agent-team": "
|
|
127
|
-
"@deepseek-ai/dsh-fs-
|
|
128
|
-
"@deepseek-ai/dsh-fs-
|
|
129
|
-
"@deepseek-ai/dsh-host-frontend-static": "
|
|
130
|
-
"@deepseek-ai/dsh-llm
|
|
131
|
-
"@deepseek-ai/dsh-
|
|
132
|
-
"@deepseek-ai/dsh-llm-
|
|
133
|
-
"@deepseek-ai/dsh-llm-
|
|
134
|
-
"@deepseek-ai/dsh-
|
|
135
|
-
"@deepseek-ai/dsh-
|
|
136
|
-
"@deepseek-ai/dsh-
|
|
137
|
-
"@deepseek-ai/dsh-sandbox-
|
|
138
|
-
"@deepseek-ai/dsh-
|
|
139
|
-
"@deepseek-ai/dsh-session
|
|
140
|
-
"@deepseek-ai/dsh-session-
|
|
141
|
-
"@deepseek-ai/dsh-session-
|
|
142
|
-
"@deepseek-ai/dsh-session-
|
|
143
|
-
"@deepseek-ai/dsh-
|
|
144
|
-
"@deepseek-ai/dsh-
|
|
145
|
-
"@deepseek-ai/dsh-
|
|
146
|
-
"@deepseek-ai/dsh-
|
|
147
|
-
"@deepseek-ai/dsh-subagent": "
|
|
148
|
-
"@deepseek-ai/dsh-
|
|
149
|
-
"@deepseek-ai/dsh-
|
|
150
|
-
"@deepseek-ai/dsh-
|
|
151
|
-
"@deepseek-ai/dsh-
|
|
152
|
-
"@deepseek-ai/dsh-
|
|
153
|
-
"@deepseek-ai/dsh-user-approval": "
|
|
154
|
-
"@deepseek-ai/dsh-system-prompt": "^0.1.6-alpha.2"
|
|
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"
|
|
155
149
|
},
|
|
156
150
|
"exports": {
|
|
157
151
|
"./profile-boot": {
|